1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182 |
- /*!
- * ngCordova
- * v0.1.18-alpha
- * Copyright 2014 Drifty Co. http://drifty.com/
- * See LICENSE in this repository for license information
- */
- (function(){
- angular.module('ngCordova', [
- 'ngCordova.plugins'
- ]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-actionsheet.git
- // link : https://github.com/EddyVerbruggen/cordova-plugin-actionsheet
- angular.module('ngCordova.plugins.actionSheet', [])
- .factory('$cordovaActionSheet', ['$q', '$window', function ($q, $window) {
- return {
- show: function (options) {
- var q = $q.defer();
- $window.plugins.actionsheet.show(options, function (result) {
- q.resolve(result);
- });
- return q.promise;
- },
- hide: function () {
- return $window.plugins.actionsheet.hide();
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-admob.git
- // link : https://github.com/floatinghotpot/cordova-plugin-admob
- angular.module('ngCordova.plugins.adMob', [])
- .factory('$cordovaAdMob', ['$q', '$window', function ($q, $window) {
- return {
- createBannerView: function (options) {
- var d = $q.defer();
- $window.plugins.AdMob.createBannerView(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createInterstitialView: function (options) {
- var d = $q.defer();
- $window.plugins.AdMob.createInterstitialView(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- requestAd: function (options) {
- var d = $q.defer();
- $window.plugins.AdMob.requestAd(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showAd: function (options) {
- var d = $q.defer();
- $window.plugins.AdMob.showAd(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- requestInterstitialAd: function (options) {
- var d = $q.defer();
- $window.plugins.AdMob.requestInterstitialAd(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/ohh2ahh/AppAvailability.git
- // link : https://github.com/ohh2ahh/AppAvailability
- angular.module('ngCordova.plugins.appAvailability', [])
- .factory('$cordovaAppAvailability', ['$q', function ($q) {
- return {
- check: function (urlScheme) {
- var q = $q.defer();
- appAvailability.check(urlScheme, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/pushandplay/cordova-plugin-apprate.git
- // link : https://github.com/pushandplay/cordova-plugin-apprate
- angular.module('ngCordova.plugins.appRate', [])
- .provider("$cordovaAppRate", [function () {
- /**
- * Set defaults settings to AppRate
- *
- * @param {Object} defaults - AppRate default settings
- * @param {string} defaults.language
- * @param {string} defaults.appName
- * @param {boolean} defaults.promptForNewVersion
- * @param {boolean} defaults.openStoreInApp
- * @param {number} defaults.usesUntilPrompt
- * @param {boolean} defaults.useCustomRateDialog
- * @param {string} defaults.iosURL
- * @param {string} defaults.androidURL
- * @param {string} defaults.blackberryURL
- * @param {string} defaults.windowsURL
- */
- this.setPreferences = function (defaults) {
- if (!defaults || !angular.isObject(defaults)) {
- return;
- }
- AppRate.preferences.useLanguage = defaults.language || null;
- AppRate.preferences.displayAppName = defaults.appName || "";
- AppRate.preferences.promptAgainForEachNewVersion = defaults.promptForNewVersion || true;
- AppRate.preferences.openStoreInApp = defaults.openStoreInApp || false;
- AppRate.preferences.usesUntilPrompt = defaults.usesUntilPrompt || 3;
- AppRate.preferences.useCustomRateDialog = defaults.useCustomRateDialog || false;
- AppRate.preferences.storeAppURL.ios = defaults.iosURL || null;
- AppRate.preferences.storeAppURL.android = defaults.androidURL || null;
- AppRate.preferences.storeAppURL.blackberry = defaults.blackberryURL || null;
- AppRate.preferences.storeAppURL.windows8 = defaults.windowsURL || null;
- };
- /**
- * Set custom locale
- *
- * @param {Object} customObj
- * @param {string} customObj.title
- * @param {string} customObj.cancelButtonLabel
- * @param {string} customObj.laterButtonLabel
- * @param {string} customObj.rateButtonLabel
- */
- this.setCustomLocale = function (customObj) {
- var strings = {
- title: 'Rate %@',
- message: 'If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!',
- cancelButtonLabel: 'No, Thanks',
- laterButtonLabel: 'Remind Me Later',
- rateButtonLabel: 'Rate It Now'
- };
- strings = angular.extend(strings, customObj);
- AppRate.preferences.customLocale = strings;
- };
- this.$get = ['$q', function ($q) {
- return {
- promptForRating: function (immediate) {
- var q = $q.defer();
- var prompt = AppRate.promptForRating(immediate);
- q.resolve(prompt);
- return q.promise;
- },
- navigateToAppStore: function () {
- var q = $q.defer();
- var navigate = AppRate.navigateToAppStore();
- q.resolve(navigate);
- return q.promise;
- },
- onButtonClicked: function (cb) {
- AppRate.onButtonClicked = function (buttonIndex) {
- cb.call(this, buttonIndex);
- };
- },
- onRateDialogShow: function (cb) {
- AppRate.onRateDialogShow = cb();
- }
- };
- }];
- }]);
- // install : cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git
- // link : https://github.com/whiteoctober/cordova-plugin-app-version
- angular.module('ngCordova.plugins.appVersion', [])
- .factory('$cordovaAppVersion', ['$q', function ($q) {
- return {
- getVersionNumber: function () {
- var q = $q.defer();
- cordova.getAppVersion.getVersionNumber(function (version) {
- q.resolve(version);
- });
- return q.promise;
- },
- getVersionCode: function () {
- var q = $q.defer();
- cordova.getAppVersion.getVersionCode(function (code) {
- q.resolve(code);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/christocracy/cordova-plugin-background-geolocation.git
- // link : https://github.com/christocracy/cordova-plugin-background-geolocation
- angular.module('ngCordova.plugins.backgroundGeolocation', [])
- .factory('$cordovaBackgroundGeolocation', ['$q', '$window', function ($q, $window) {
- return {
- init: function () {
- $window.navigator.geolocation.getCurrentPosition(function (location) {
- return location;
- });
- },
- configure: function (options) {
- this.init();
- var q = $q.defer();
- $window.plugins.backgroundGeoLocation.configure(
- function (result) {
- q.notify(result);
- $window.plugins.backgroundGeoLocation.finish();
- },
- function (err) {
- q.reject(err);
- }, options);
- this.start();
- return q.promise;
- },
- start: function () {
- var q = $q.defer();
- $window.plugins.backgroundGeoLocation.start(
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- stop: function () {
- var q = $q.defer();
- $window.plugins.backgroundGeoLocation.stop(
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }
- ]);
- // install : cordova plugin add https://github.com/katzer/cordova-plugin-badge.git
- // link : https://github.com/katzer/cordova-plugin-badge
- angular.module('ngCordova.plugins.badge', [])
- .factory('$cordovaBadge', ['$q', function ($q) {
- return {
- hasPermission: function () {
- var q = $q.defer();
- cordova.plugins.notification.badge.hasPermission(function (permission) {
- if (permission) {
- q.resolve(true);
- } else {
- q.reject('You do not have permission');
- }
- });
- return q.promise;
- },
- promptForPermission: function () {
- return cordova.plugins.notification.badge.promptForPermission();
- },
- set: function (badge, callback, scope) {
- var q = $q.defer();
- cordova.plugins.notification.badge.hasPermission(function (permission) {
- if (permission) {
- q.resolve(
- cordova.plugins.notification.badge.set(badge, callback, scope)
- );
- } else {
- q.reject('You do not have permission to set Badge');
- }
- });
- return q.promise;
- },
- get: function () {
- var q = $q.defer();
- cordova.plugins.notification.badge.hasPermission(function (permission) {
- if (permission) {
- cordova.plugins.notification.badge.get(function (badge) {
- q.resolve(badge);
- });
- } else {
- q.reject('You do not have permission to get Badge');
- }
- });
- return q.promise;
- },
- clear: function (callback, scope) {
- var q = $q.defer();
- cordova.plugins.notification.badge.hasPermission(function (permission) {
- if (permission) {
- q.resolve(cordova.plugins.notification.badge.clear(callback, scope));
- } else {
- q.reject('You do not have permission to clear Badge');
- }
- });
- return q.promise;
- },
- increase: function (count, callback, scope) {
- var q = $q.defer();
- this.hasPermission().then(function (){
- q.resolve(
- cordova.plugins.notification.badge.increase(count, callback, scope)
- );
- }, function (){
- q.reject('You do not have permission to increase Badge');
- }) ;
- return q.promise;
- },
- decrease: function (count, callback, scope) {
- var q = $q.defer();
- this.hasPermission().then(function (){
- q.resolve(
- cordova.plugins.notification.badge.decrease(count, callback, scope)
- );
- }, function (){
- q.reject('You do not have permission to decrease Badge');
- }) ;
- return q.promise;
- },
- configure: function (config) {
- return cordova.plugins.notification.badge.configure(config);
- }
- };
- }]);
- // install : cordova plugin add https://github.com/wildabeast/BarcodeScanner.git
- // link : https://github.com/wildabeast/BarcodeScanner
- angular.module('ngCordova.plugins.barcodeScanner', [])
- .factory('$cordovaBarcodeScanner', ['$q', function ($q) {
- return {
- scan: function (config) {
- var q = $q.defer();
- cordova.plugins.barcodeScanner.scan(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- }, config);
- return q.promise;
- },
- encode: function (type, data) {
- var q = $q.defer();
- type = type || "TEXT_TYPE";
- cordova.plugins.barcodeScanner.encode(type, data, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-battery-status
- // link : https://github.com/apache/cordova-plugin-battery-status
- angular.module('ngCordova.plugins.batteryStatus', [])
- .factory('$cordovaBatteryStatus', ['$rootScope', '$window', '$timeout', function ($rootScope, $window, $timeout) {
- /**
- * @param {string} status
- */
- var batteryStatus = function (status) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaBatteryStatus:status', status);
- });
- };
- /**
- * @param {string} status
- */
- var batteryCritical = function (status) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaBatteryStatus:critical', status);
- });
- };
- /**
- * @param {string} status
- */
- var batteryLow = function (status) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaBatteryStatus:low', status);
- });
- };
- document.addEventListener("deviceready", function () {
- if (navigator.battery) {
- $window.addEventListener('batterystatus', batteryStatus, false);
- $window.addEventListener('batterycritical', batteryCritical, false);
- $window.addEventListener('batterylow', batteryLow, false);
- }
- }, false);
- return true;
- }])
- .run(['$cordovaBatteryStatus', function ($cordovaBatteryStatus) {
- }]);
- // install : cordova plugin add https://github.com/don/cordova-plugin-ble-central.git
- // link : https://github.com/don/cordova-plugin-ble-central
- angular.module('ngCordova.plugins.ble', [])
- .factory('$cordovaBLE', ['$q', '$timeout', function ($q, $timeout) {
- return {
- scan: function (services, seconds) {
- var q = $q.defer();
- ble.startScan(services, function (result) {
- q.notify(result);
- }, function (error) {
- q.reject(error);
- });
- $timeout(function () {
- ble.stopScan(function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- }, seconds*1000);
- return q.promise;
- },
- connect: function (deviceID) {
- var q = $q.defer();
- ble.connect(deviceID, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- disconnect: function (deviceID) {
- var q = $q.defer();
- ble.disconnect(deviceID, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- read: function (deviceID, serviceUUID, characteristicUUID) {
- var q = $q.defer();
- ble.read(deviceID, serviceUUID, characteristicUUID, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- write: function (deviceID, serviceUUID, characteristicUUID, data) {
- var q = $q.defer();
- ble.write(deviceID, serviceUUID, characteristicUUID, data, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- writeCommand: function (deviceID, serviceUUID, characteristicUUID, data) {
- var q = $q.defer();
- ble.writeCommand(deviceID, serviceUUID, characteristicUUID, data, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- startNotification: function (deviceID, serviceUUID, characteristicUUID) {
- var q = $q.defer();
- ble.startNotification(deviceID, serviceUUID, characteristicUUID, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- stopNotification: function (deviceID, serviceUUID, characteristicUUID) {
- var q = $q.defer();
- ble.stopNotification(deviceID, serviceUUID, characteristicUUID, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- isConnected: function (deviceID) {
- var q = $q.defer();
- ble.isConnected(deviceID, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- isEnabled: function () {
- var q = $q.defer();
- ble.isEnabled(function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/don/BluetoothSerial.git
- // link : https://github.com/don/BluetoothSerial
- angular.module('ngCordova.plugins.bluetoothSerial', [])
- .factory('$cordovaBluetoothSerial', ['$q', '$window', function ($q, $window) {
- return {
- connect: function (address) {
- var q = $q.defer();
- var disconnectionPromise = $q.defer();
- var isConnected = false;
- $window.bluetoothSerial.connect(address, function () {
- isConnected = true;
- q.resolve(disconnectionPromise);
- }, function (error) {
- if(isConnected === false) {
- disconnectionPromise.reject(error);
- }
- q.reject(error);
- });
- return q.promise;
- },
- // not supported on iOS
- connectInsecure: function (address) {
- var q = $q.defer();
- $window.bluetoothSerial.connectInsecure(address, function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- disconnect: function () {
- var q = $q.defer();
- $window.bluetoothSerial.disconnect(function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- list: function () {
- var q = $q.defer();
- $window.bluetoothSerial.list(function (data) {
- q.resolve(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- discoverUnpaired: function () {
- var q = $q.defer();
- $window.bluetoothSerial.discoverUnpaired(function (data) {
- q.resolve(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- setDeviceDiscoveredListener: function () {
- var q = $q.defer();
- $window.bluetoothSerial.setDeviceDiscoveredListener(function (data) {
- q.notify(data);
- });
- return q.promise;
- },
- clearDeviceDiscoveredListener: function () {
- $window.bluetoothSerial.clearDeviceDiscoveredListener();
- },
- showBluetoothSettings: function () {
- var q = $q.defer();
- $window.bluetoothSerial.showBluetoothSettings(function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- isEnabled: function () {
- var q = $q.defer();
- $window.bluetoothSerial.isEnabled(function () {
- q.resolve();
- }, function () {
- q.reject();
- });
- return q.promise;
- },
- enable: function () {
- var q = $q.defer();
- $window.bluetoothSerial.enable(function () {
- q.resolve();
- }, function () {
- q.reject();
- });
- return q.promise;
- },
- isConnected: function () {
- var q = $q.defer();
- $window.bluetoothSerial.isConnected(function () {
- q.resolve();
- }, function () {
- q.reject();
- });
- return q.promise;
- },
- available: function () {
- var q = $q.defer();
- $window.bluetoothSerial.available(function (data) {
- q.resolve(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- read: function () {
- var q = $q.defer();
- $window.bluetoothSerial.read(function (data) {
- q.resolve(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- readUntil: function (delimiter) {
- var q = $q.defer();
- $window.bluetoothSerial.readUntil(delimiter, function (data) {
- q.resolve(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- write: function (data) {
- var q = $q.defer();
- $window.bluetoothSerial.write(data, function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- subscribe: function (delimiter) {
- var q = $q.defer();
- $window.bluetoothSerial.subscribe(delimiter, function (data) {
- q.notify(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- subscribeRawData: function () {
- var q = $q.defer();
- $window.bluetoothSerial.subscribeRawData(function (data) {
- q.notify(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- unsubscribe: function () {
- var q = $q.defer();
- $window.bluetoothSerial.unsubscribe(function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- unsubscribeRawData: function () {
- var q = $q.defer();
- $window.bluetoothSerial.unsubscribeRawData(function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- clear: function () {
- var q = $q.defer();
- $window.bluetoothSerial.clear(function () {
- q.resolve();
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- readRSSI: function () {
- var q = $q.defer();
- $window.bluetoothSerial.readRSSI(function (data) {
- q.resolve(data);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/fiscal-cliff/phonegap-plugin-brightness.git
- // link : https://github.com/fiscal-cliff/phonegap-plugin-brightness
- angular.module('ngCordova.plugins.brightness', [])
- .factory('$cordovaBrightness', ['$q', '$window', function ($q, $window) {
- return {
- get: function () {
- var q = $q.defer();
- if (!$window.cordova) {
- q.reject("Not supported without cordova.js");
- } else {
- $window.cordova.plugins.brightness.getBrightness(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- }
- return q.promise;
- },
- set: function (data) {
- var q = $q.defer();
- if (!$window.cordova) {
- q.reject("Not supported without cordova.js");
- } else {
- $window.cordova.plugins.brightness.setBrightness(data, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- }
- return q.promise;
- },
- setKeepScreenOn: function (bool) {
- var q = $q.defer();
- if (!$window.cordova) {
- q.reject("Not supported without cordova.js");
- } else {
- $window.cordova.plugins.brightness.setKeepScreenOn(bool, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- }
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin.git
- // link : https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin
- angular.module('ngCordova.plugins.calendar', [])
- .factory('$cordovaCalendar', ['$q', '$window', function ($q, $window) {
-
- return {
- createCalendar: function (options) {
- var d = $q.defer(),
- createCalOptions = $window.plugins.calendar.getCreateCalendarOptions();
- if (typeof options === 'string') {
- createCalOptions.calendarName = options;
- } else {
- createCalOptions = angular.extend(createCalOptions, options);
- }
- $window.plugins.calendar.createCalendar(createCalOptions, function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- deleteCalendar: function (calendarName) {
- var d = $q.defer();
- $window.plugins.calendar.deleteCalendar(calendarName, function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- createEvent: function (options) {
- var d = $q.defer(),
- defaultOptions = {
- title: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null
- };
- defaultOptions = angular.extend(defaultOptions, options);
- $window.plugins.calendar.createEvent(
- defaultOptions.title,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- },
- createEventWithOptions: function (options) {
- var d = $q.defer(),
- defaultOptionKeys = [],
- calOptions = window.plugins.calendar.getCalendarOptions(),
- defaultOptions = {
- title: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null
- };
- defaultOptionKeys = Object.keys(defaultOptions);
- for (var key in options) {
- if (defaultOptionKeys.indexOf(key) === -1) {
- calOptions[key] = options[key];
- } else {
- defaultOptions[key] = options[key];
- }
- }
- $window.plugins.calendar.createEventWithOptions(
- defaultOptions.title,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- calOptions,
- function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- },
- createEventInteractively: function (options) {
- var d = $q.defer(),
- defaultOptions = {
- title: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null
- };
- defaultOptions = angular.extend(defaultOptions, options);
- $window.plugins.calendar.createEventInteractively(
- defaultOptions.title,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- },
- createEventInNamedCalendar: function (options) {
- var d = $q.defer(),
- defaultOptions = {
- title: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null,
- calendarName: null
- };
- defaultOptions = angular.extend(defaultOptions, options);
- $window.plugins.calendar.createEventInNamedCalendar(
- defaultOptions.title,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- defaultOptions.calendarName,
- function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- },
- findEvent: function (options) {
- var d = $q.defer(),
- defaultOptions = {
- title: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null
- };
- defaultOptions = angular.extend(defaultOptions, options);
- $window.plugins.calendar.findEvent(
- defaultOptions.title,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- function (foundEvent) {
- d.resolve(foundEvent);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- },
- listEventsInRange: function (startDate, endDate) {
- var d = $q.defer();
- $window.plugins.calendar.listEventsInRange(startDate, endDate, function (events) {
- d.resolve(events);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- listCalendars: function () {
- var d = $q.defer();
- $window.plugins.calendar.listCalendars(function (calendars) {
- d.resolve(calendars);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- findAllEventsInNamedCalendar: function (calendarName) {
- var d = $q.defer();
- $window.plugins.calendar.findAllEventsInNamedCalendar(calendarName, function (events) {
- d.resolve(events);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- modifyEvent: function (options) {
- var d = $q.defer(),
- defaultOptions = {
- title: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null,
- newTitle: null,
- newLocation: null,
- newNotes: null,
- newStartDate: null,
- newEndDate: null
- };
- defaultOptions = angular.extend(defaultOptions, options);
- $window.plugins.calendar.modifyEvent(
- defaultOptions.title,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- defaultOptions.newTitle,
- defaultOptions.newLocation,
- defaultOptions.newNotes,
- new Date(defaultOptions.newStartDate),
- new Date(defaultOptions.newEndDate),
- function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- },
- deleteEvent: function (options) {
- var d = $q.defer(),
- defaultOptions = {
- newTitle: null,
- location: null,
- notes: null,
- startDate: null,
- endDate: null
- };
- defaultOptions = angular.extend(defaultOptions, options);
- $window.plugins.calendar.deleteEvent(
- defaultOptions.newTitle,
- defaultOptions.location,
- defaultOptions.notes,
- new Date(defaultOptions.startDate),
- new Date(defaultOptions.endDate),
- function (message) {
- d.resolve(message);
- }, function (error) {
- d.reject(error);
- }
- );
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-camera
- // link : https://github.com/apache/cordova-plugin-camera
- angular.module('ngCordova.plugins.camera', [])
- .factory('$cordovaCamera', ['$q', function ($q) {
- return {
- getPicture: function (options) {
- var q = $q.defer();
- if (!navigator.camera) {
- q.resolve(null);
- return q.promise;
- }
- navigator.camera.getPicture(function (imageData) {
- q.resolve(imageData);
- }, function (err) {
- q.reject(err);
- }, options);
- return q.promise;
- },
- cleanup: function () {
- var q = $q.defer();
- navigator.camera.cleanup(function () {
- q.resolve();
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-media-capture
- // link : https://github.com/apache/cordova-plugin-media-capture
- angular.module('ngCordova.plugins.capture', [])
- .factory('$cordovaCapture', ['$q', function ($q) {
- return {
- captureAudio: function (options) {
- var q = $q.defer();
- if (!navigator.device.capture) {
- q.resolve(null);
- return q.promise;
- }
- navigator.device.capture.captureAudio(function (audioData) {
- q.resolve(audioData);
- }, function (err) {
- q.reject(err);
- }, options);
- return q.promise;
- },
- captureImage: function (options) {
- var q = $q.defer();
- if (!navigator.device.capture) {
- q.resolve(null);
- return q.promise;
- }
- navigator.device.capture.captureImage(function (imageData) {
- q.resolve(imageData);
- }, function (err) {
- q.reject(err);
- }, options);
- return q.promise;
- },
- captureVideo: function (options) {
- var q = $q.defer();
- if (!navigator.device.capture) {
- q.resolve(null);
- return q.promise;
- }
- navigator.device.capture.captureVideo(function (videoData) {
- q.resolve(videoData);
- }, function (err) {
- q.reject(err);
- }, options);
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/vkeepe/card.io.git
- // link : https://github.com/vkeepe/card.io.git
- angular.module('ngCordova.plugins.cardIO', [])
- .provider(
- '$cordovaNgCardIO', [function () {
- /**
- * Default array of response data from cardIO scan card
- */
- var defaultRespFields = [
- "card_type",
- "redacted_card_number",
- "card_number",
- "expiry_month",
- "expiry_year",
- "short_expiry_year",
- "cvv",
- "zip"
- ];
- /**
- * Default config for cardIO scan function
- */
- var defaultScanConfig = {
- "expiry": true,
- "cvv": true,
- "zip": false,
- "suppressManual": false,
- "suppressConfirm": false,
- "hideLogo": true
- };
- /**
- * Configuring defaultRespFields using $cordovaNgCardIOProvider
- *
- */
- this.setCardIOResponseFields = function (filelds) {
- if (!filelds || !angular.isArray(filelds)) {
- return;
- }
- defaultRespFields = filelds;
- };
- /**
- *
- * Configuring defaultScanConfig using $cordovaNgCardIOProvider
- */
- this.setScanerConfig = function (config) {
- if (!config || !angular.isObject(config)) {
- return;
- }
- defaultScanConfig.expiry = config.expiry || true;
- defaultScanConfig.cvv = config.cvv || true;
- defaultScanConfig.zip = config.zip || false;
- defaultScanConfig.suppressManual = config.suppressManual
- || false;
- defaultScanConfig.suppressConfirm = config.suppressConfirm
- || false;
- defaultScanConfig.hideLogo = config.hideLogo || true;
- };
- /**
- * Function scanCard for $cordovaNgCardIO service to make scan of card
- *
- */
- this.$get = ['$q', function ($q) {
- return {
- scanCard: function () {
- var deferred = $q.defer();
- CardIO.scan(
- defaultScanConfig,
- function (response) {
- if (response == null) {
- deferred.reject(null);
- } else {
- var respData = {};
- for (
- var i = 0, len = defaultRespFields.length; i < len; i++) {
- var field = defaultRespFields[i];
- if (field == "short_expiry_year") {
- respData[field] = String(response['expiry_year']).substr(
- 2, 2
- )
- || "";
- } else {
- respData[field] = response[field] || "";
- }
- }
- deferred.resolve(respData);
- }
- },
- function () {
- deferred.reject(null);
- }
- );
- return deferred.promise;
- }
- }
- }]
- }]
- );
- // install : cordova plugin add https://github.com/VersoSolutions/CordovaClipboard.git
- // link : https://github.com/VersoSolutions/CordovaClipboard
- angular.module('ngCordova.plugins.clipboard', [])
- .factory('$cordovaClipboard', ['$q', '$window', function ($q, $window) {
- return {
- copy: function (text) {
- var q = $q.defer();
- $window.cordova.plugins.clipboard.copy(text,
- function () {
- q.resolve();
- }, function () {
- q.reject();
- });
- return q.promise;
- },
- paste: function () {
- var q = $q.defer();
- $window.cordova.plugins.clipboard.paste(function (text) {
- q.resolve(text);
- }, function () {
- q.reject();
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-contacts
- // link : https://github.com/apache/cordova-plugin-contacts
- angular.module('ngCordova.plugins.contacts', [])
- .factory('$cordovaContacts', ['$q', function ($q) {
- return {
- save: function (contact) {
- var q = $q.defer();
- var deviceContact = navigator.contacts.create(contact);
- deviceContact.save(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- remove: function (contact) {
- var q = $q.defer();
- var deviceContact = navigator.contacts.create(contact);
- deviceContact.remove(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- clone: function (contact) {
- var deviceContact = navigator.contacts.create(contact);
- return deviceContact.clone(contact);
- },
- find: function (options) {
- var q = $q.defer();
- var fields = options.fields || ['id', 'displayName'];
- delete options.fields;
- if (Object.keys(options).length === 0) {
- navigator.contacts.find(fields, function (results) {
- q.resolve(results);
- },function (err) {
- q.reject(err)
- });
- }
- else {
- navigator.contacts.find(fields, function (results) {
- q.resolve(results);
- }, function (err) {
- q.reject(err);
- }, options);
- }
- return q.promise;
- },
- pickContact: function () {
- var q = $q.defer();
- navigator.contacts.pickContact(function (contact) {
- q.resolve(contact);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- // TODO: method to set / get ContactAddress
- // TODO: method to set / get ContactError
- // TODO: method to set / get ContactField
- // TODO: method to set / get ContactName
- // TODO: method to set / get ContactOrganization
- };
- }]);
- // install : cordova plugin add https://github.com/VitaliiBlagodir/cordova-plugin-datepicker.git
- // link : https://github.com/VitaliiBlagodir/cordova-plugin-datepicker
- angular.module('ngCordova.plugins.datePicker', [])
- .factory('$cordovaDatePicker', ['$window', '$q', function ($window, $q) {
-
- return {
- show: function (options) {
- var q = $q.defer();
- options = options || {date: new Date(), mode: 'date'};
- $window.datePicker.show(options, function (date) {
- q.resolve(date);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-device
- // link : https://github.com/apache/cordova-plugin-device
- angular.module('ngCordova.plugins.device', [])
- .factory('$cordovaDevice', [function () {
- return {
- /**
- * Returns the whole device object.
- * @see https://github.com/apache/cordova-plugin-device
- * @returns {Object} The device object.
- */
- getDevice: function () {
- return device;
- },
- /**
- * Returns the Cordova version.
- * @see https://github.com/apache/cordova-plugin-device#devicecordova
- * @returns {String} The Cordova version.
- */
- getCordova: function () {
- return device.cordova;
- },
- /**
- * Returns the name of the device's model or product.
- * @see https://github.com/apache/cordova-plugin-device#devicemodel
- * @returns {String} The name of the device's model or product.
- */
- getModel: function () {
- return device.model;
- },
- /**
- * @deprecated device.name is deprecated as of version 2.3.0. Use device.model instead.
- * @returns {String}
- */
- getName: function () {
- return device.name;
- },
- /**
- * Returns the device's operating system name.
- * @see https://github.com/apache/cordova-plugin-device#deviceplatform
- * @returns {String} The device's operating system name.
- */
- getPlatform: function () {
- return device.platform;
- },
- /**
- * Returns the device's Universally Unique Identifier.
- * @see https://github.com/apache/cordova-plugin-device#deviceuuid
- * @returns {String} The device's Universally Unique Identifier
- */
- getUUID: function () {
- return device.uuid;
- },
- /**
- * Returns the operating system version.
- * @see https://github.com/apache/cordova-plugin-device#deviceversion
- * @returns {String}
- */
- getVersion: function () {
- return device.version;
- },
- /**
- * Returns the device manufacturer.
- * @returns {String}
- */
- getManufacturer: function () {
- return device.manufacturer;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-device-motion
- // link : https://github.com/apache/cordova-plugin-device-motion
- angular.module('ngCordova.plugins.deviceMotion', [])
- .factory('$cordovaDeviceMotion', ['$q', function ($q) {
- return {
- getCurrentAcceleration: function () {
- var q = $q.defer();
- if (angular.isUndefined(navigato.accelerometer) ||
- !angular.isFunction(navigator.accelerometer.getCurrentAcceleration)) {
- q.reject('Device do not support watchAcceleration');
- }
- navigator.accelerometer.getCurrentAcceleration(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- watchAcceleration: function (options) {
- var q = $q.defer();
- if (angular.isUndefined(navigato.accelerometer) ||
- !angular.isFunction(navigator.accelerometer.watchAcceleration)) {
- q.reject('Device do not support watchAcceleration');
- }
- var watchID = navigator.accelerometer.watchAcceleration(function (result) {
- q.notify(result);
- }, function (err) {
- q.reject(err);
- }, options);
- q.promise.cancel = function () {
- navigator.accelerometer.clearWatch(watchID);
- };
- q.promise.clearWatch = function (id) {
- navigator.accelerometer.clearWatch(id || watchID);
- };
- q.promise.watchID = watchID;
- return q.promise;
- },
- clearWatch: function (watchID) {
- return navigator.accelerometer.clearWatch(watchID);
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-device-orientation
- // link : https://github.com/apache/cordova-plugin-device-orientation
- angular.module('ngCordova.plugins.deviceOrientation', [])
- .factory('$cordovaDeviceOrientation', ['$q', function ($q) {
- var defaultOptions = {
- frequency: 3000 // every 3s
- };
-
- return {
- getCurrentHeading: function () {
- var q = $q.defer();
- if(!navigator.compass) {
- q.reject('No compass on Device');
- return q.promise;
- }
- navigator.compass.getCurrentHeading(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- watchHeading: function (options) {
- var q = $q.defer();
- if(!navigator.compass) {
- q.reject('No compass on Device');
- return q.promise;
- }
- var _options = angular.extend(defaultOptions, options);
- var watchID = navigator.compass.watchHeading(function (result) {
- q.notify(result);
- }, function (err) {
- q.reject(err);
- }, _options);
- q.promise.cancel = function () {
- navigator.compass.clearWatch(watchID);
- };
- q.promise.clearWatch = function (id) {
- navigator.compass.clearWatch(id || watchID);
- };
- q.promise.watchID = watchID;
- return q.promise;
- },
- clearWatch: function (watchID) {
- return navigator.compass.clearWatch(watchID);
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-dialogs
- // link : https://github.com/apache/cordova-plugin-dialogs
- angular.module('ngCordova.plugins.dialogs', [])
- .factory('$cordovaDialogs', ['$q', '$window', function ($q, $window) {
- return {
- alert: function (message, title, buttonName) {
- var q = $q.defer();
- if (!$window.navigator.notification) {
- $window.alert(message);
- q.resolve();
- } else {
- navigator.notification.alert(message, function () {
- q.resolve();
- }, title, buttonName);
- }
- return q.promise;
- },
- confirm: function (message, title, buttonLabels) {
- var q = $q.defer();
- if (!$window.navigator.notification) {
- if ($window.confirm(message)) {
- q.resolve(1);
- } else {
- q.resolve(2);
- }
- } else {
- navigator.notification.confirm(message, function (buttonIndex) {
- q.resolve(buttonIndex);
- }, title, buttonLabels);
- }
- return q.promise;
- },
- prompt: function (message, title, buttonLabels, defaultText) {
- var q = $q.defer();
- if (!$window.navigator.notification) {
- var res = $window.prompt(message, defaultText);
- if (res !== null) {
- q.resolve({input1: res, buttonIndex: 1});
- } else {
- q.resolve({input1: res, buttonIndex: 2});
- }
- } else {
- navigator.notification.prompt(message, function (result) {
- q.resolve(result);
- }, title, buttonLabels, defaultText);
- }
- return q.promise;
- },
- beep: function (times) {
- return navigator.notification.beep(times);
- }
- };
- }]);
- // install : cordova plugin add https://github.com/katzer/cordova-plugin-email-composer.git
- // link : https://github.com/katzer/cordova-plugin-email-composer
- angular.module('ngCordova.plugins.emailComposer', [])
- .factory('$cordovaEmailComposer', ['$q', function ($q) {
- return {
- isAvailable: function () {
- var q = $q.defer();
- cordova.plugins.email.isAvailable(function (isAvailable) {
- if (isAvailable) {
- q.resolve();
- } else {
- q.reject();
- }
- });
- return q.promise;
- },
- open: function (properties) {
- var q = $q.defer();
- cordova.plugins.email.open(properties, function () {
- q.reject(); // user closed email composer
- });
- return q.promise;
- },
- addAlias: function (app, schema) {
- cordova.plugins.email.addAlias(app, schema);
- }
- };
- }]);
- // install : cordova -d plugin add https://github.com/Wizcorp/phonegap-facebook-plugin.git --variable APP_ID="123456789" --variable APP_NAME="myApplication"
- // link : https://github.com/Wizcorp/phonegap-facebook-plugin
- angular.module('ngCordova.plugins.facebook', [])
- .provider('$cordovaFacebook', [function () {
- /**
- * Init browser settings for Facebook plugin
- *
- * @param {number} id
- * @param {string} version
- */
- this.browserInit = function (id, version) {
- this.appID = id;
- this.appVersion = version || "v2.0";
- facebookConnectPlugin.browserInit(this.appID, this.appVersion);
- };
- this.$get = ['$q', function ($q) {
- return {
- login: function (permissions) {
- var q = $q.defer();
- facebookConnectPlugin.login(permissions, function (res) {
- q.resolve(res);
- }, function (res) {
- q.reject(res);
- });
- return q.promise;
- },
- showDialog: function (options) {
- var q = $q.defer();
- facebookConnectPlugin.showDialog(options, function (res) {
- q.resolve(res);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- api: function (path, permissions) {
- var q = $q.defer();
- facebookConnectPlugin.api(path, permissions, function (res) {
- q.resolve(res);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- getAccessToken: function () {
- var q = $q.defer();
- facebookConnectPlugin.getAccessToken(function (res) {
- q.resolve(res);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- getLoginStatus: function () {
- var q = $q.defer();
- facebookConnectPlugin.getLoginStatus(function (res) {
- q.resolve(res);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- logout: function () {
- var q = $q.defer();
- facebookConnectPlugin.logout(function (res) {
- q.resolve(res);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }];
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-facebookads.git
- // link : https://github.com/floatinghotpot/cordova-plugin-facebookads
- angular.module('ngCordova.plugins.facebookAds', [])
- .factory('$cordovaFacebookAds', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.FacebookAds.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.FacebookAds.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.FacebookAds.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.FacebookAds.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.FacebookAds.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.FacebookAds.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.FacebookAds.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.FacebookAds.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-file
- // link : https://github.com/apache/cordova-plugin-file
- angular.module('ngCordova.plugins.file', [])
- .constant("$cordovaFileError", {
- 1: 'NOT_FOUND_ERR',
- 2: 'SECURITY_ERR',
- 3: 'ABORT_ERR',
- 4: 'NOT_READABLE_ERR',
- 5: 'ENCODING_ERR',
- 6: 'NO_MODIFICATION_ALLOWED_ERR',
- 7: 'INVALID_STATE_ERR',
- 8: 'SYNTAX_ERR',
- 9: 'INVALID_MODIFICATION_ERR',
- 10: 'QUOTA_EXCEEDED_ERR',
- 11: 'TYPE_MISMATCH_ERR',
- 12: 'PATH_EXISTS_ERR'
- })
- .provider('$cordovaFile', [function () {
- this.$get = ['$q', '$window', '$cordovaFileError', function ($q, $window, $cordovaFileError) {
- return {
- getFreeDiskSpace: function () {
- var q = $q.defer();
- cordova.exec(function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- }, "File", "getFreeDiskSpace", []);
- return q.promise;
- },
- checkDir: function (path, dir) {
- var q = $q.defer();
- if ((/^\//.test(dir))) {
- q.reject("directory cannot start with \/");
- }
- try {
- var directory = path + dir;
- $window.resolveLocalFileSystemURL(directory, function (fileSystem) {
- if (fileSystem.isDirectory === true) {
- q.resolve(fileSystem);
- } else {
- q.reject({code: 13, message: "input is not a directory"});
- }
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- } catch (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- }
- return q.promise;
- },
- checkFile: function (path, file) {
- var q = $q.defer();
- if ((/^\//.test(file))) {
- q.reject("directory cannot start with \/");
- }
- try {
- var directory = path + file;
- $window.resolveLocalFileSystemURL(directory, function (fileSystem) {
- if (fileSystem.isFile === true) {
- q.resolve(fileSystem);
- } else {
- q.reject({code: 13, message: "input is not a file"});
- }
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- } catch (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- }
- return q.promise;
- },
- createDir: function (path, dirName, replaceBool) {
- var q = $q.defer();
- if ((/^\//.test(dirName))) {
- q.reject("directory cannot start with \/");
- }
- replaceBool = replaceBool ? false : true;
- var options = {
- create: true,
- exclusive: replaceBool
- };
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getDirectory(dirName, options, function (result) {
- q.resolve(result);
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- createFile: function (path, fileName, replaceBool) {
- var q = $q.defer();
- if ((/^\//.test(fileName))) {
- q.reject("file-name cannot start with \/");
- }
- replaceBool = replaceBool ? false : true;
- var options = {
- create: true,
- exclusive: replaceBool
- };
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(fileName, options, function (result) {
- q.resolve(result);
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- removeDir: function (path, dirName) {
- var q = $q.defer();
- if ((/^\//.test(dirName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
- dirEntry.remove(function () {
- q.resolve({success: true, fileRemoved: dirEntry});
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- }, function (er) {
- er.message = $cordovaFileError[er.code];
- q.reject(er);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- removeFile: function (path, fileName) {
- var q = $q.defer();
- if ((/^\//.test(fileName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
- fileEntry.remove(function () {
- q.resolve({success: true, fileRemoved: fileEntry});
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- }, function (er) {
- er.message = $cordovaFileError[er.code];
- q.reject(er);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- removeRecursively: function (path, dirName) {
- var q = $q.defer();
- if ((/^\//.test(dirName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
- dirEntry.removeRecursively(function () {
- q.resolve({success: true, fileRemoved: dirEntry});
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- }, function (er) {
- er.message = $cordovaFileError[er.code];
- q.reject(er);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- writeFile: function (path, fileName, text, replaceBool) {
- var q = $q.defer();
- if ((/^\//.test(fileName))) {
- q.reject("file-name cannot start with \/");
- }
- replaceBool = replaceBool ? false : true;
- var options = {
- create: true,
- exclusive: replaceBool
- };
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(fileName, options, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- if (options.append === true) {
- writer.seek(writer.length);
- }
- if (options.truncate) {
- writer.truncate(options.truncate);
- }
- writer.onwriteend = function (evt) {
- if (this.error) {
- q.reject(this.error);
- } else {
- q.resolve(evt);
- }
- };
- writer.write(text);
- q.promise.abort = function () {
- writer.abort();
- };
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- writeExistingFile: function (path, fileName, text) {
- var q = $q.defer();
- if ((/^\//.test(fileName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- writer.seek(writer.length);
- writer.onwriteend = function (evt) {
- if (this.error) {
- q.reject(this.error);
- } else {
- q.resolve(evt);
- }
- };
- writer.write(text);
- q.promise.abort = function () {
- writer.abort();
- };
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- readAsText: function (path, file) {
- var q = $q.defer();
- if ((/^\//.test(file))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(file, {create: false}, function (fileEntry) {
- fileEntry.file(function (fileData) {
- var reader = new FileReader();
- reader.onloadend = function (evt) {
- if (evt.target.result !== undefined || evt.target.result !== null) {
- q.resolve(evt.target.result);
- } else if (evt.target.error !== undefined || evt.target.error !== null) {
- q.reject(evt.target.error);
- } else {
- q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
- }
- };
- reader.readAsText(fileData);
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- readAsDataURL: function (path, file) {
- var q = $q.defer();
- if ((/^\//.test(file))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(file, {create: false}, function (fileEntry) {
- fileEntry.file(function (fileData) {
- var reader = new FileReader();
- reader.onloadend = function (evt) {
- if (evt.target.result !== undefined || evt.target.result !== null) {
- q.resolve(evt.target.result);
- } else if (evt.target.error !== undefined || evt.target.error !== null) {
- q.reject(evt.target.error);
- } else {
- q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
- }
- };
- reader.readAsDataURL(fileData);
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- readAsBinaryString: function (path, file) {
- var q = $q.defer();
- if ((/^\//.test(file))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(file, {create: false}, function (fileEntry) {
- fileEntry.file(function (fileData) {
- var reader = new FileReader();
- reader.onloadend = function (evt) {
- if (evt.target.result !== undefined || evt.target.result !== null) {
- q.resolve(evt.target.result);
- } else if (evt.target.error !== undefined || evt.target.error !== null) {
- q.reject(evt.target.error);
- } else {
- q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
- }
- };
- reader.readAsBinaryString(fileData);
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- readAsArrayBuffer: function (path, file) {
- var q = $q.defer();
- if ((/^\//.test(file))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(file, {create: false}, function (fileEntry) {
- fileEntry.file(function (fileData) {
- var reader = new FileReader();
- reader.onloadend = function (evt) {
- if (evt.target.result !== undefined || evt.target.result !== null) {
- q.resolve(evt.target.result);
- } else if (evt.target.error !== undefined || evt.target.error !== null) {
- q.reject(evt.target.error);
- } else {
- q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
- }
- };
- reader.readAsArrayBuffer(fileData);
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- moveFile: function (path, fileName, newPath, newFileName) {
- var q = $q.defer();
- newFileName = newFileName || fileName;
- if ((/^\//.test(fileName)) || (/^\//.test(newFileName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
- $window.resolveLocalFileSystemURL(newPath, function (newFileEntry) {
- fileEntry.moveTo(newFileEntry, newFileName, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- }, function (err) {
- q.reject(err);
- });
- }, function (err) {
- q.reject(err);
- });
- }, function (er) {
- q.reject(er);
- });
- } catch (e) {
- q.reject(e);
- }
- return q.promise;
- },
- moveDir: function (path, dirName, newPath, newDirName) {
- var q = $q.defer();
- newDirName = newDirName || dirName;
- if (/^\//.test(dirName) || (/^\//.test(newDirName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
- $window.resolveLocalFileSystemURL(newPath, function (newDirEntry) {
- dirEntry.moveTo(newDirEntry, newDirName, function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- });
- }, function (erro) {
- q.reject(erro);
- });
- }, function (err) {
- q.reject(err);
- });
- }, function (er) {
- q.reject(er);
- });
- } catch (e) {
- q.reject(e);
- }
- return q.promise;
- },
- copyDir: function (path, dirName, newPath, newDirName) {
- var q = $q.defer();
- newDirName = newDirName || dirName;
- if (/^\//.test(dirName) || (/^\//.test(newDirName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getDirectory(dirName, {create: false, exclusive: false}, function (dirEntry) {
- $window.resolveLocalFileSystemURL(newPath, function (newDirEntry) {
- dirEntry.copyTo(newDirEntry, newDirName, function (result) {
- q.resolve(result);
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (erro) {
- erro.message = $cordovaFileError[erro.code];
- q.reject(erro);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- }, function (er) {
- er.message = $cordovaFileError[er.code];
- q.reject(er);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- copyFile: function (path, fileName, newPath, newFileName) {
- var q = $q.defer();
- newFileName = newFileName || fileName;
- if ((/^\//.test(fileName))) {
- q.reject("file-name cannot start with \/");
- }
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getFile(fileName, {create: false, exclusive: false}, function (fileEntry) {
- $window.resolveLocalFileSystemURL(newPath, function (newFileEntry) {
- fileEntry.copyTo(newFileEntry, newFileName, function (result) {
- q.resolve(result);
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (erro) {
- erro.message = $cordovaFileError[erro.code];
- q.reject(erro);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- }, function (er) {
- er.message = $cordovaFileError[er.code];
- q.reject(er);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- }
- /*
- listFiles: function (path, dir) {
- },
- listDir: function (path, dirName) {
- var q = $q.defer();
- try {
- $window.resolveLocalFileSystemURL(path, function (fileSystem) {
- fileSystem.getDirectory(dirName, options, function (parent) {
- var reader = parent.createReader();
- reader.readEntries(function (entries) {
- q.resolve(entries);
- }, function () {
- q.reject('DIR_READ_ERROR : ' + path + dirName);
- });
- }, function (error) {
- error.message = $cordovaFileError[error.code];
- q.reject(error);
- });
- }, function (err) {
- err.message = $cordovaFileError[err.code];
- q.reject(err);
- });
- } catch (e) {
- e.message = $cordovaFileError[e.code];
- q.reject(e);
- }
- return q.promise;
- },
- readFileMetadata: function (filePath) {
- //return getFile(filePath, {create: false});
- }
- */
- };
- }];
- }]);
- // install : cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2.git
- // link : https://github.com/pwlin/cordova-plugin-file-opener2
- angular.module('ngCordova.plugins.fileOpener2', [])
- .factory('$cordovaFileOpener2', ['$q', function ($q) {
- return {
- open: function (file, type) {
- var q = $q.defer();
- cordova.plugins.fileOpener2.open(file, type, {
- error: function (e) {
- q.reject(e);
- }, success: function () {
- q.resolve();
- }
- });
- return q.promise;
- },
- uninstall: function (pack) {
- var q = $q.defer();
- cordova.plugins.fileOpener2.uninstall(pack, {
- error: function (e) {
- q.reject(e);
- }, success: function () {
- q.resolve();
- }
- });
- return q.promise;
- },
- appIsInstalled: function (pack) {
- var q = $q.defer();
- cordova.plugins.fileOpener2.appIsInstalled(pack, {
- success: function (res) {
- q.resolve(res);
- }
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-file-transfer
- // link : https://github.com/apache/cordova-plugin-file-transfer
- angular.module('ngCordova.plugins.fileTransfer', [])
- .factory('$cordovaFileTransfer', ['$q', '$timeout', function ($q, $timeout) {
- return {
- download: function (source, filePath, options, trustAllHosts) {
- var q = $q.defer();
- var ft = new FileTransfer();
- var uri = (options && options.encodeURI === false) ? source : encodeURI(source);
- if (options && options.timeout !== undefined && options.timeout !== null) {
- $timeout(function () {
- ft.abort();
- }, options.timeout);
- options.timeout = null;
- }
- ft.onprogress = function (progress) {
- q.notify(progress);
- };
- q.promise.abort = function () {
- ft.abort();
- };
- ft.download(uri, filePath, q.resolve, q.reject, trustAllHosts, options);
- return q.promise;
- },
- upload: function (server, filePath, options, trustAllHosts) {
- var q = $q.defer();
- var ft = new FileTransfer();
- var uri = (options && options.encodeURI === false) ? server : encodeURI(server);
- if (options && options.timeout !== undefined && options.timeout !== null) {
- $timeout(function () {
- ft.abort();
- }, options.timeout);
- options.timeout = null;
- }
- ft.onprogress = function (progress) {
- q.notify(progress);
- };
- q.promise.abort = function () {
- ft.abort();
- };
- ft.upload(filePath, uri, q.resolve, q.reject, options, trustAllHosts);
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/Flashlight-PhoneGap-Plugin.git
- // link : https://github.com/EddyVerbruggen/Flashlight-PhoneGap-Plugin
- angular.module('ngCordova.plugins.flashlight', [])
- .factory('$cordovaFlashlight', ['$q', '$window', function ($q, $window) {
- return {
- available: function () {
- var q = $q.defer();
- $window.plugins.flashlight.available(function (isAvailable) {
- q.resolve(isAvailable);
- });
- return q.promise;
- },
- switchOn: function () {
- var q = $q.defer();
- $window.plugins.flashlight.switchOn(function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- switchOff: function () {
- var q = $q.defer();
- $window.plugins.flashlight.switchOff(function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- toggle: function () {
- var q = $q.defer();
- $window.plugins.flashlight.toggle(function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-flurry.git
- // link : https://github.com/floatinghotpot/cordova-plugin-flurry
- angular.module('ngCordova.plugins.flurryAds', [])
- .factory('$cordovaFlurryAds', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.FlurryAds.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.FlurryAds.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.FlurryAds.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.FlurryAds.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.FlurryAds.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.FlurryAds.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.FlurryAds.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.FlurryAds.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/phonegap-build/GAPlugin.git
- // link : https://github.com/phonegap-build/GAPlugin
- angular.module('ngCordova.plugins.ga', [])
- .factory('$cordovaGA', ['$q', '$window', function ($q, $window) {
- return {
- init: function (id, mingap) {
- var q = $q.defer();
- mingap = (mingap >= 0) ? mingap : 10;
- $window.plugins.gaPlugin.init(function (result) {
- q.resolve(result);
- },
- function (error) {
- q.reject(error);
- },
- id, mingap);
- return q.promise;
- },
- trackEvent: function (success, fail, category, eventAction, eventLabel, eventValue) {
- var q = $q.defer();
- $window.plugins.gaPlugin.trackEvent(function (result) {
- q.resolve(result);
- },
- function (error) {
- q.reject(error);
- },
- category, eventAction, eventLabel, eventValue);
- return q.promise;
- },
- trackPage: function (success, fail, pageURL) {
- var q = $q.defer();
- $window.plugins.gaPlugin.trackPage(function (result) {
- q.resolve(result);
- },
- function (error) {
- q.reject(error);
- },
- pageURL);
- return q.promise;
- },
- setVariable: function (success, fail, index, value) {
- var q = $q.defer();
- $window.plugins.gaPlugin.setVariable(function (result) {
- q.resolve(result);
- },
- function (error) {
- q.reject(error);
- },
- index, value);
- return q.promise;
- },
- exit: function (success, fail) {
- var q = $q.defer();
- $window.plugins.gaPlugin.exit(function (result) {
- q.resolve(result);
- },
- function (error) {
- q.reject(error);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-geolocation
- // link : https://github.com/apache/cordova-plugin-geolocation
- angular.module('ngCordova.plugins.geolocation', [])
- .factory('$cordovaGeolocation', ['$q', function ($q) {
- return {
- getCurrentPosition: function (options) {
- var q = $q.defer();
- navigator.geolocation.getCurrentPosition(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- }, options);
- return q.promise;
- },
- watchPosition: function (options) {
- var q = $q.defer();
- var watchID = navigator.geolocation.watchPosition(function (result) {
- q.notify(result);
- }, function (err) {
- q.reject(err);
- }, options);
- q.promise.cancel = function () {
- navigator.geolocation.clearWatch(watchID);
- };
- q.promise.clearWatch = function (id) {
- navigator.geolocation.clearWatch(id || watchID);
- };
- q.promise.watchID = watchID;
- return q.promise;
- },
- clearWatch: function (watchID) {
- return navigator.geolocation.clearWatch(watchID);
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-globalization
- // link : https://github.com/apache/cordova-plugin-globalization
- angular.module('ngCordova.plugins.globalization', [])
- .factory('$cordovaGlobalization', ['$q', function ($q) {
- return {
- getPreferredLanguage: function () {
- var q = $q.defer();
- navigator.globalization.getPreferredLanguage(function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- getLocaleName: function () {
- var q = $q.defer();
- navigator.globalization.getLocaleName(function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- getFirstDayOfWeek: function () {
- var q = $q.defer();
- navigator.globalization.getFirstDayOfWeek(function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- // "date" parameter must be a JavaScript Date Object.
- dateToString: function (date, options) {
- var q = $q.defer();
- navigator.globalization.dateToString(
- date,
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- stringToDate: function (dateString, options) {
- var q = $q.defer();
- navigator.globalization.stringToDate(
- dateString,
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- getDatePattern: function (options) {
- var q = $q.defer();
- navigator.globalization.getDatePattern(
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- getDateNames: function (options) {
- var q = $q.defer();
- navigator.globalization.getDateNames(
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- // "date" parameter must be a JavaScript Date Object.
- isDayLightSavingsTime: function (date) {
- var q = $q.defer();
- navigator.globalization.isDayLightSavingsTime(
- date,
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- numberToString: function (number, options) {
- var q = $q.defer();
- navigator.globalization.numberToString(
- number,
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- stringToNumber: function (numberString, options) {
- var q = $q.defer();
- navigator.globalization.stringToNumber(
- numberString,
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- getNumberPattern: function (options) {
- var q = $q.defer();
- navigator.globalization.getNumberPattern(
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- },
- options);
- return q.promise;
- },
- getCurrencyPattern: function (currencyCode) {
- var q = $q.defer();
- navigator.globalization.getCurrencyPattern(
- currencyCode,
- function (result) {
- q.resolve(result);
- },
- function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-admob-pro.git
- // link : https://github.com/floatinghotpot/cordova-admob-pro
- angular.module('ngCordova.plugins.googleAds', [])
- .factory('$cordovaGoogleAds', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.AdMob.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.AdMob.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.AdMob.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.AdMob.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.AdMob.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.AdMob.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.AdMob.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.AdMob.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/danwilson/google-analytics-plugin.git
- // link : https://github.com/danwilson/google-analytics-plugin
- angular.module('ngCordova.plugins.googleAnalytics', [])
- .factory('$cordovaGoogleAnalytics', ['$q', '$window', function ($q, $window) {
- return {
- startTrackerWithId: function (id) {
- var d = $q.defer();
- $window.analytics.startTrackerWithId(id, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- setUserId: function (id) {
- var d = $q.defer();
- $window.analytics.setUserId(id, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- debugMode: function () {
- var d = $q.defer();
- $window.analytics.debugMode(function (response) {
- d.resolve(response);
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- trackView: function (screenName) {
- var d = $q.defer();
- $window.analytics.trackView(screenName, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- addCustomDimension: function (key, value) {
- var d = $q.defer();
- $window.analytics.addCustomDimension(key, value, function () {
- d.resolve();
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- trackEvent: function (category, action, label, value) {
- var d = $q.defer();
- $window.analytics.trackEvent(category, action, label, value, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- trackException: function (description, fatal) {
- var d = $q.defer();
- $window.analytics.trackException(description, fatal, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- trackTiming: function (category, milliseconds, variable, label) {
- var d = $q.defer();
- $window.analytics.trackTiming(category, milliseconds, variable, label, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- addTransaction: function (transactionId, affiliation, revenue, tax, shipping, currencyCode) {
- var d = $q.defer();
- $window.analytics.addTransaction(transactionId, affiliation, revenue, tax, shipping, currencyCode, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- },
- addTransactionItem: function (transactionId, name, sku, category, price, quantity, currencyCode) {
- var d = $q.defer();
- $window.analytics.addTransactionItem(transactionId, name, sku, category, price, quantity, currencyCode, function (response) {
- d.resolve(response);
- }, function (error) {
- d.reject(error);
- });
- return d.promise;
- }
- };
- }]);
- // install :
- // link :
- // Google Maps needs ALOT of work!
- // Not for production use
- angular.module('ngCordova.plugins.googleMap', [])
- .factory('$cordovaGoogleMap', ['$q', '$window', function ($q, $window) {
- var map = null;
- return {
- getMap: function (options) {
- var q = $q.defer();
- if (!$window.plugin.google.maps) {
- q.reject(null);
- } else {
- var div = document.getElementById("map_canvas");
- map = $window.plugin.google.maps.Map.getMap(options);
- map.setDiv(div);
- q.resolve(map);
- }
- return q.promise;
- },
- isMapLoaded: function () { // check if an instance of the map exists
- return !!map;
- },
- addMarker: function (markerOptions) { // add a marker to the map with given markerOptions
- var q = $q.defer();
- map.addMarker(markerOptions, function (marker) {
- q.resolve(marker);
- });
- return q.promise;
- },
- getMapTypeIds: function () {
- return $window.plugin.google.maps.mapTypeId;
- },
- setVisible: function (isVisible) {
- var q = $q.defer();
- map.setVisible(isVisible);
- return q.promise;
- },
- // I don't know how to deallocate te map and the google map plugin.
- cleanup: function () {
- map = null;
- // delete map;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/ptgamr/cordova-google-play-game.git --variable APP_ID=123456789
- // link : https://github.com/ptgamr/cordova-google-play-game
- angular.module('ngCordova.plugins.googlePlayGame', [])
- .factory('$cordovaGooglePlayGame', ['$q', function ($q) {
- return {
- auth: function () {
- var q = $q.defer();
- googleplaygame.auth(function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- signout: function () {
- var q = $q.defer();
- googleplaygame.signout(function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- isSignedIn: function () {
- var q = $q.defer();
- googleplaygame.isSignedIn(function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- showPlayer: function () {
- var q = $q.defer();
- googleplaygame.showPlayer(function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- submitScore: function (data) {
- var q = $q.defer();
- googleplaygame.submitScore(data, function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- showAllLeaderboards: function () {
- var q = $q.defer();
- googleplaygame.showAllLeaderboards(function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- showLeaderboard: function (data) {
- var q = $q.defer();
- googleplaygame.showLeaderboard(data, function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- unlockAchievement: function (data) {
- var q = $q.defer();
- googleplaygame.unlockAchievement(data, function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- incrementAchievement: function (data) {
- var q = $q.defer();
- googleplaygame.incrementAchievement(data, function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- },
- showAchievements: function () {
- var q = $q.defer();
- googleplaygame.showAchievements(function (success) {
- return q.resolve(success);
- }, function (err) {
- return q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-googleplus.git
- // link : https://github.com/EddyVerbruggen/cordova-plugin-googleplus
- angular.module('ngCordova.plugins.googlePlus', [])
- .factory('$cordovaGooglePlus', ['$q', '$window', function ($q, $window) {
- return {
- login: function (iosKey) {
- var q = $q.defer();
- if (iosKey === undefined) {
- iosKey = {};
- }
- $window.plugins.googleplus.login({'iOSApiKey': iosKey}, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- silentLogin: function (iosKey) {
- var q = $q.defer();
- if (iosKey === undefined) {
- iosKey = {};
- }
- $window.plugins.googleplus.trySilentLogin({'iOSApiKey': iosKey}, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- logout: function () {
- var q = $q.defer();
- $window.plugins.googleplus.logout(function (response) {
- q.resolve(response);
- });
- },
- disconnect: function () {
- var q = $q.defer();
- $window.plugins.googleplus.disconnect(function (response) {
- q.resolve(response);
- });
- },
- isAvailable: function () {
- var q = $q.defer();
- $window.plugins.googleplus.isAvailable(function (available) {
- if (available) {
- q.resolve(available);
- } else {
- q.reject(available);
- }
- });
-
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/Telerik-Verified-Plugins/HealthKit.git
- // link : https://github.com/Telerik-Verified-Plugins/HealthKit
- angular.module('ngCordova.plugins.healthKit', [])
- .factory('$cordovaHealthKit', ['$q', '$window', function ($q, $window) {
- return {
- isAvailable: function () {
- var q = $q.defer();
- $window.plugins.healthkit.available(function (success) {
- q.resolve(success);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- /**
- * Check whether or not the user granted your app access to a specific HealthKit type.
- * Reference for possible types:
- * https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HealthKit_Constants/
- */
- checkAuthStatus: function (type) {
- var q = $q.defer();
- type = type || 'HKQuantityTypeIdentifierHeight';
- $window.plugins.healthkit.checkAuthStatus({
- 'type': type
- }, function (success) {
- q.resolve(success);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- /**
- * Request authorization to access HealthKit data. See the full HealthKit constants
- * reference for possible read and write types:
- * https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HealthKit_Constants/
- */
- requestAuthorization: function (readTypes, writeTypes) {
- var q = $q.defer();
- readTypes = readTypes || [
- 'HKCharacteristicTypeIdentifierDateOfBirth', 'HKQuantityTypeIdentifierActiveEnergyBurned', 'HKQuantityTypeIdentifierHeight'
- ];
- writeTypes = writeTypes || [
- 'HKQuantityTypeIdentifierActiveEnergyBurned', 'HKQuantityTypeIdentifierHeight', 'HKQuantityTypeIdentifierDistanceCycling'
- ];
- $window.plugins.healthkit.requestAuthorization({
- 'readTypes': readTypes,
- 'writeTypes': writeTypes
- }, function (success) {
- q.resolve(success);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- readDateOfBirth: function () {
- var q = $q.defer();
- $window.plugins.healthkit.readDateOfBirth(
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- readGender: function () {
- var q = $q.defer();
- $window.plugins.healthkit.readGender(
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- saveWeight: function (value, units, date) {
- var q = $q.defer();
- $window.plugins.healthkit.saveWeight({
- 'unit': units || 'lb',
- 'amount': value,
- 'date': date || new Date()
- },
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- readWeight: function (units) {
- var q = $q.defer();
- $window.plugins.healthkit.readWeight({
- 'unit': units || 'lb'
- },
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- saveHeight: function (value, units, date) {
- var q = $q.defer();
- $window.plugins.healthkit.saveHeight({
- 'unit': units || 'in',
- 'amount': value,
- 'date': date || new Date()
- },
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- readHeight: function (units) {
- var q = $q.defer();
- $window.plugins.healthkit.readHeight({
- 'unit': units || 'in'
- },
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- findWorkouts: function () {
- var q = $q.defer();
- $window.plugins.healthkit.findWorkouts({},
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- /**
- * Save a workout.
- *
- * Workout param should be of the format:
- {
- 'activityType': 'HKWorkoutActivityTypeCycling', // HKWorkoutActivityType constant (https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HKWorkout_Class/#//apple_ref/c/tdef/HKWorkoutActivityType)
- 'quantityType': 'HKQuantityTypeIdentifierDistanceCycling',
- 'startDate': new Date(), // mandatory
- 'endDate': null, // optional, use either this or duration
- 'duration': 3600, // in seconds, optional, use either this or endDate
- 'energy': 300, //
- 'energyUnit': 'kcal', // J|cal|kcal
- 'distance': 11, // optional
- 'distanceUnit': 'km' // probably useful with the former param
- // 'extraData': "", // Not sure how necessary this is
- },
- */
- saveWorkout: function (workout) {
- var q = $q.defer();
- $window.plugins.healthkit.saveWorkout(workout,
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- },
- /**
- * Sample any kind of health data through a given date range.
- * sampleQuery of the format:
- {
- 'startDate': yesterday, // mandatory
- 'endDate': tomorrow, // mandatory
- 'sampleType': 'HKQuantityTypeIdentifierHeight',
- 'unit' : 'cm'
- },
- */
- querySampleType: function (sampleQuery) {
- var q = $q.defer();
- $window.plugins.healthkit.querySampleType(sampleQuery,
- function (success) {
- q.resolve(success);
- },
- function (err) {
- q.resolve(err);
- }
- );
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-httpd.git
- // link : https://github.com/floatinghotpot/cordova-httpd
- angular.module('ngCordova.plugins.httpd', [])
- .factory('$cordovaHttpd', ['$q', function ($q) {
- return {
- startServer: function (options) {
- var d = $q.defer();
- cordova.plugins.CorHttpd.startServer(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- stopServer: function () {
- var d = $q.defer();
- cordova.plugins.CorHttpd.stopServer(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- getURL: function () {
- var d = $q.defer();
- cordova.plugins.CorHttpd.getURL(function (url) {
- d.resolve(url);
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- getLocalPath: function () {
- var d = $q.defer();
- cordova.plugins.CorHttpd.getLocalPath(function (path) {
- d.resolve(path);
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-iad.git
- // link : https://github.com/floatinghotpot/cordova-plugin-iad
- angular.module('ngCordova.plugins.iAd', [])
- .factory('$cordovaiAd', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.iAd.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.iAd.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.iAd.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.iAd.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.iAd.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.iAd.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.iAd.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.iAd.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/wymsee/cordova-imagePicker.git
- // link : https://github.com/wymsee/cordova-imagePicker
- angular.module('ngCordova.plugins.imagePicker', [])
- .factory('$cordovaImagePicker', ['$q', '$window', function ($q, $window) {
- return {
- getPictures: function (options) {
- var q = $q.defer();
- $window.imagePicker.getPictures(function (results) {
- q.resolve(results);
- }, function (error) {
- q.reject(error);
- }, options);
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-inappbrowser
- // link : https://github.com/apache/cordova-plugin-inappbrowser
- angular.module('ngCordova.plugins.inAppBrowser', [])
- .provider('$cordovaInAppBrowser', [function () {
- var ref;
- var defaultOptions = this.defaultOptions = {};
- this.setDefaultOptions = function (config) {
- defaultOptions = angular.extend(defaultOptions, config);
- };
- this.$get = ['$rootScope', '$q', '$window', '$timeout', function ($rootScope, $q, $window, $timeout) {
- return {
- open: function (url, target, requestOptions) {
- var q = $q.defer();
- if (requestOptions && !angular.isObject(requestOptions)) {
- q.reject("options must be an object");
- return q.promise;
- }
- var options = angular.extend({}, defaultOptions, requestOptions);
- var opt = [];
- angular.forEach(options, function (value, key) {
- opt.push(key + '=' + value);
- });
- var optionsString = opt.join();
- ref = $window.open(url, target, optionsString);
- ref.addEventListener('loadstart', function (event) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaInAppBrowser:loadstart', event);
- });
- }, false);
- ref.addEventListener('loadstop', function (event) {
- q.resolve(event);
- $timeout(function () {
- $rootScope.$broadcast('$cordovaInAppBrowser:loadstop', event);
- });
- }, false);
- ref.addEventListener('loaderror', function (event) {
- q.reject(event);
- $timeout(function () {
- $rootScope.$broadcast('$cordovaInAppBrowser:loaderror', event);
- });
- }, false);
- ref.addEventListener('exit', function (event) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaInAppBrowser:exit', event);
- });
- }, false);
- return q.promise;
- },
- close: function () {
- ref.close();
- ref = null;
- },
- show: function () {
- ref.show();
- },
- executeScript: function (details) {
- var q = $q.defer();
- ref.executeScript(details, function (result) {
- q.resolve(result);
- });
- return q.promise;
- },
- insertCSS: function (details) {
- var q = $q.defer();
- ref.insertCSS(details, function (result) {
- q.resolve(result);
- });
- return q.promise;
- }
- };
- }];
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin.git
- // link : https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin
- angular.module('ngCordova.plugins.insomnia', [])
- .factory('$cordovaInsomnia', ['$window', function ($window) {
- return {
- keepAwake: function () {
- return $window.plugins.insomnia.keepAwake();
- },
- allowSleepAgain: function () {
- return $window.plugins.insomnia.allowSleepAgain();
- }
- };
- }]);
- // install : cordova plugins add https://github.com/vstirbu/InstagramPlugin.git
- // link : https://github.com/vstirbu/InstagramPlugin
- angular.module('ngCordova.plugins.instagram', [])
- .factory('$cordovaInstagram', ['$q', function ($q) {
- return {
- share: function (options) {
- var q = $q.defer();
- if (!window.Instagram) {
- console.error('Tried to call Instagram.share but the Instagram plugin isn\'t installed!');
- q.resolve(null);
- return q.promise;
- }
- Instagram.share(options.image, options.caption, function (err) {
- if(err) {
- q.reject(err);
- } else {
- q.resolve(true);
- }
- });
- return q.promise;
- },
- isInstalled: function () {
- var q = $q.defer();
- if (!window.Instagram) {
- console.error('Tried to call Instagram.isInstalled but the Instagram plugin isn\'t installed!');
- q.resolve(null);
- return q.promise;
- }
- Instagram.isInstalled(function (err, installed) {
- if (err) {
- q.reject(err);
- } else {
- q.resolve(installed || true);
- }
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/driftyco/ionic-plugins-keyboard.git
- // link : https://github.com/driftyco/ionic-plugins-keyboard
- angular.module('ngCordova.plugins.keyboard', [])
- .factory('$cordovaKeyboard', ['$rootScope', function ($rootScope) {
- var keyboardShowEvent = function () {
- $rootScope.$evalAsync(function () {
- $rootScope.$broadcast('$cordovaKeyboard:show');
- });
- };
- var keyboardHideEvent = function () {
- $rootScope.$evalAsync(function () {
- $rootScope.$broadcast('$cordovaKeyboard:hide');
- });
- };
- document.addEventListener("deviceready", function () {
- if (cordova.plugins.Keyboard) {
- window.addEventListener("native.keyboardshow", keyboardShowEvent, false);
- window.addEventListener("native.keyboardhide", keyboardHideEvent, false);
- }
- });
- return {
- hideAccessoryBar: function (bool) {
- return cordova.plugins.Keyboard.hideKeyboardAccessoryBar(bool);
- },
- close: function () {
- return cordova.plugins.Keyboard.close();
- },
- show: function () {
- return cordova.plugins.Keyboard.show();
- },
- disableScroll: function (bool) {
- return cordova.plugins.Keyboard.disableScroll(bool);
- },
- isVisible: function () {
- return cordova.plugins.Keyboard.isVisible;
- },
- clearShowWatch: function () {
- document.removeEventListener("native.keyboardshow", keyboardShowEvent);
- $rootScope.$$listeners["$cordovaKeyboard:show"] = [];
- },
- clearHideWatch: function () {
- document.removeEventListener("native.keyboardhide", keyboardHideEvent);
- $rootScope.$$listeners["$cordovaKeyboard:hide"] = [];
- }
- };
- }]);
- // install : cordova plugin add https://github.com/shazron/KeychainPlugin.git
- // link : https://github.com/shazron/KeychainPlugin
- angular.module('ngCordova.plugins.keychain', [])
- .factory('$cordovaKeychain', ['$q', function ($q) {
- return {
- getForKey: function (key, serviceName) {
- var defer = $q.defer(),
- kc = new Keychain();
- kc.getForKey(defer.resolve, defer.reject, key, serviceName);
- return defer.promise;
- },
- setForKey: function (key, serviceName, value) {
- var defer = $q.defer(),
- kc = new Keychain();
- kc.setForKey(defer.resolve, defer.reject, key, serviceName, value);
- return defer.promise;
- },
- removeForKey: function (key, serviceName) {
- var defer = $q.defer(),
- kc = new Keychain();
- kc.removeForKey(defer.resolve, defer.reject, key, serviceName);
- return defer.promise;
- }
- };
- }]);
- // install : cordova plugin add uk.co.workingedge.phonegap.plugin.launchnavigator
- // link : https://github.com/dpa99c/phonegap-launch-navigator
- angular.module('ngCordova.plugins.launchNavigator', [])
- .factory('$cordovaLaunchNavigator', ['$q', function ($q) {
- return {
- navigate: function (destination, start, successFn, errorFn, options) {
- var q = $q.defer();
- launchnavigator.navigate(
- destination,
- start,
- function (){
- q.resolve();
- },
- function (error){
- q.reject(error);
- },
- options);
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/katzer/cordova-plugin-local-notifications.git
- // link : https://github.com/katzer/cordova-plugin-local-notifications
- angular.module('ngCordova.plugins.localNotification', [])
- .factory('$cordovaLocalNotification', ['$q', '$window', '$rootScope', '$timeout', function ($q, $window, $rootScope, $timeout) {
- document.addEventListener('deviceready', function () {
- if ($window.cordova &&
- $window.cordova.plugins &&
- $window.cordova.plugins.notification &&
- $window.cordova.plugins.notification.local) {
- // ----- "Scheduling" events
- // A local notification was scheduled
- $window.cordova.plugins.notification.local.on('schedule', function (notification, state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:schedule', notification, state);
- });
- });
- // A local notification was triggered
- $window.cordova.plugins.notification.local.on('trigger', function (notification, state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:trigger', notification, state);
- });
- });
- // ----- "Update" events
- // A local notification was updated
- $window.cordova.plugins.notification.local.on('update', function (notification, state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:update', notification, state);
- });
- });
- // ----- "Clear" events
- // A local notification was cleared from the notification center
- $window.cordova.plugins.notification.local.on('clear', function (notification, state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:clear', notification, state);
- });
- });
- // All local notifications were cleared from the notification center
- $window.cordova.plugins.notification.local.on('clearall', function (state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:clearall', state);
- });
- });
- // ----- "Cancel" events
- // A local notification was cancelled
- $window.cordova.plugins.notification.local.on('cancel', function (notification, state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:cancel', notification, state);
- });
- });
- // All local notifications were cancelled
- $window.cordova.plugins.notification.local.on('cancelall', function (state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:cancelall', state);
- });
- });
- // ----- Other events
- // A local notification was clicked
- $window.cordova.plugins.notification.local.on('click', function (notification, state) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaLocalNotification:click', notification, state);
- });
- });
- }
- }, false);
- return {
- schedule: function (options, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.schedule(options, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- add: function (options, scope) {
- console.warn('Deprecated: use "schedule" instead.');
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.schedule(options, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- update: function (options, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.update(options, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- clear: function (ids, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.clear(ids, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- clearAll: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.clearAll(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- cancel: function (ids, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.cancel(ids, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- cancelAll: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.cancelAll(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- isPresent: function (id, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.isPresent(id, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- isScheduled: function (id, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.isScheduled(id, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- isTriggered: function (id, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.isTriggered(id, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- hasPermission: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.hasPermission(function (result) {
- if (result) {
- q.resolve(result);
- } else {
- q.reject(result);
- }
- }, scope);
- return q.promise;
- },
- registerPermission: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.registerPermission(function (result) {
- if (result) {
- q.resolve(result);
- } else {
- q.reject(result);
- }
- }, scope);
- return q.promise;
- },
- promptForPermission: function (scope) {
- console.warn('Deprecated: use "registerPermission" instead.');
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.registerPermission(function (result) {
- if (result) {
- q.resolve(result);
- } else {
- q.reject(result);
- }
- }, scope);
- return q.promise;
- },
- getAllIds: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getAllIds(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getIds: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getIds(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getScheduledIds: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getScheduledIds(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getTriggeredIds: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getTriggeredIds(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- get: function (ids, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.get(ids, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getAll: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getAll(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getScheduled: function (ids, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getScheduled(ids, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getAllScheduled: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getAllScheduled(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getTriggered: function (ids, scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getTriggered(ids, function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getAllTriggered: function (scope) {
- var q = $q.defer();
- scope = scope || null;
- $window.cordova.plugins.notification.local.getAllTriggered(function (result) {
- q.resolve(result);
- }, scope);
- return q.promise;
- },
- getDefaults: function () {
- return $window.cordova.plugins.notification.local.getDefaults();
- },
- setDefaults: function (Object) {
- $window.cordova.plugins.notification.local.setDefaults(Object);
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-mmedia.git
- // link : https://github.com/floatinghotpot/cordova-plugin-mmedia
- angular.module('ngCordova.plugins.mMediaAds', [])
- .factory('$cordovaMMediaAds', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.mMedia.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.mMedia.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.mMedia.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.mMedia.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.mMedia.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.mMedia.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.mMedia.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.mMedia.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-media
- // link : https://github.com/apache/cordova-plugin-media
- angular.module('ngCordova.plugins.media', [])
- .service('NewMedia', ['$q', '$interval', function ($q, $interval) {
- var q, q2, q3, mediaStatus = null, mediaPosition = -1, mediaTimer, mediaDuration = -1;
- function setTimer(media) {
- if (angular.isDefined(mediaTimer)) return;
- mediaTimer = $interval(function () {
- if (mediaDuration < 0) {
- mediaDuration = media.getDuration();
- if (q && mediaDuration > 0) q.notify({duration: mediaDuration});
- }
- media.getCurrentPosition(
- // success callback
- function (position) {
- if (position > -1) {
- mediaPosition = position;
- }
- },
- // error callback
- function (e) {
- console.log("Error getting pos=" + e);
- });
- if (q) q.notify({position: mediaPosition});
- }, 1000);
- }
- function clearTimer() {
- if (angular.isDefined(mediaTimer)) {
- $interval.cancel(mediaTimer);
- mediaTimer = undefined;
- }
- }
- function resetValues() {
- mediaPosition = -1;
- mediaDuration = -1;
- }
- function NewMedia(src) {
- this.media = new Media(src,
- function (success) {
- clearTimer();
- resetValues();
- q.resolve(success);
- }, function (error) {
- clearTimer();
- resetValues();
- q.reject(error);
- }, function (status) {
- mediaStatus = status;
- q.notify({status: mediaStatus});
- });
- }
- // iOS quirks :
- // - myMedia.play({ numberOfLoops: 2 }) -> looping
- // - myMedia.play({ playAudioWhenScreenIsLocked : false })
- NewMedia.prototype.play = function (options) {
- q = $q.defer();
- if (typeof options !== "object") {
- options = {};
- }
- this.media.play(options);
- setTimer(this.media);
- return q.promise;
- };
- NewMedia.prototype.pause = function () {
- clearTimer();
- this.media.pause();
- };
- NewMedia.prototype.stop = function () {
- this.media.stop();
- };
- NewMedia.prototype.release = function () {
- this.media.release();
- this.media = undefined;
- };
- NewMedia.prototype.seekTo = function (timing) {
- this.media.seekTo(timing);
- };
- NewMedia.prototype.setVolume = function (volume) {
- this.media.setVolume(volume);
- };
- NewMedia.prototype.startRecord = function () {
- this.media.startRecord();
- };
- NewMedia.prototype.stopRecord = function () {
- this.media.stopRecord();
- };
- NewMedia.prototype.currentTime = function () {
- q2 = $q.defer();
- this.media.getCurrentPosition(function (position){
- q2.resolve(position);
- });
- return q2.promise;
- };
- NewMedia.prototype.getDuration = function () {
- q3 = $q.defer();
- this.media.getDuration(function (duration){
- q3.resolve(duration);
- });
- return q3.promise;
- }
- return NewMedia;
- }])
- .factory('$cordovaMedia2', ['NewMedia', function (NewMedia) {
- return {
- newMedia: function (src) {
- return new NewMedia(src);
- }
- };
- }]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-mobfox-pro.git
- // link : https://github.com/floatinghotpot/cordova-mobfox-pro
- angular.module('ngCordova.plugins.mobfoxAds', [])
- .factory('$cordovaMobFoxAds', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.MobFox.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.MobFox.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.MobFox.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.MobFox.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.MobFox.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.MobFox.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.MobFox.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.MobFox.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- angular.module('ngCordova.plugins', [
- 'ngCordova.plugins.actionSheet',
- 'ngCordova.plugins.adMob',
- 'ngCordova.plugins.appAvailability',
- 'ngCordova.plugins.appRate',
- 'ngCordova.plugins.appVersion',
- 'ngCordova.plugins.backgroundGeolocation',
- 'ngCordova.plugins.badge',
- 'ngCordova.plugins.barcodeScanner',
- 'ngCordova.plugins.batteryStatus',
- 'ngCordova.plugins.ble',
- 'ngCordova.plugins.bluetoothSerial',
- 'ngCordova.plugins.brightness',
- 'ngCordova.plugins.calendar',
- 'ngCordova.plugins.camera',
- 'ngCordova.plugins.capture',
- 'ngCordova.plugins.clipboard',
- 'ngCordova.plugins.contacts',
- 'ngCordova.plugins.datePicker',
- 'ngCordova.plugins.device',
- 'ngCordova.plugins.deviceMotion',
- 'ngCordova.plugins.deviceOrientation',
- 'ngCordova.plugins.dialogs',
- 'ngCordova.plugins.emailComposer',
- 'ngCordova.plugins.facebook',
- 'ngCordova.plugins.facebookAds',
- 'ngCordova.plugins.file',
- 'ngCordova.plugins.fileTransfer',
- 'ngCordova.plugins.fileOpener2',
- 'ngCordova.plugins.flashlight',
- 'ngCordova.plugins.flurryAds',
- 'ngCordova.plugins.ga',
- 'ngCordova.plugins.geolocation',
- 'ngCordova.plugins.globalization',
- 'ngCordova.plugins.googleAds',
- 'ngCordova.plugins.googleAnalytics',
- 'ngCordova.plugins.googleMap',
- 'ngCordova.plugins.googlePlayGame',
- 'ngCordova.plugins.googlePlus',
- 'ngCordova.plugins.healthKit',
- 'ngCordova.plugins.httpd',
- 'ngCordova.plugins.iAd',
- 'ngCordova.plugins.imagePicker',
- 'ngCordova.plugins.inAppBrowser',
- 'ngCordova.plugins.instagram',
- 'ngCordova.plugins.keyboard',
- 'ngCordova.plugins.keychain',
- 'ngCordova.plugins.launchNavigator',
- 'ngCordova.plugins.localNotification',
- 'ngCordova.plugins.media',
- 'ngCordova.plugins.mMediaAds',
- 'ngCordova.plugins.mobfoxAds',
- 'ngCordova.plugins.mopubAds',
- 'ngCordova.plugins.nativeAudio',
- 'ngCordova.plugins.network',
- 'ngCordovaOauth',
- 'ngCordova.plugins.pinDialog',
- 'ngCordova.plugins.prefs',
- 'ngCordova.plugins.printer',
- 'ngCordova.plugins.progressIndicator',
- 'ngCordova.plugins.push',
- 'ngCordova.plugins.sms',
- 'ngCordova.plugins.socialSharing',
- 'ngCordova.plugins.spinnerDialog',
- 'ngCordova.plugins.splashscreen',
- 'ngCordova.plugins.sqlite',
- 'ngCordova.plugins.statusbar',
- 'ngCordova.plugins.toast',
- 'ngCordova.plugins.touchid',
- 'ngCordova.plugins.vibration',
- 'ngCordova.plugins.videoCapturePlus',
- 'ngCordova.plugins.zip',
- 'ngCordova.plugins.insomnia'
- ]);
- // install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-mopub.git
- // link : https://github.com/floatinghotpot/cordova-plugin-mopub
- angular.module('ngCordova.plugins.mopubAds', [])
- .factory('$cordovaMoPubAds', ['$q', '$window', function ($q, $window) {
- return {
- setOptions: function (options) {
- var d = $q.defer();
- $window.MoPub.setOptions(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- createBanner: function (options) {
- var d = $q.defer();
- $window.MoPub.createBanner(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- removeBanner: function () {
- var d = $q.defer();
- $window.MoPub.removeBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBanner: function (position) {
- var d = $q.defer();
- $window.MoPub.showBanner(position, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showBannerAtXY: function (x, y) {
- var d = $q.defer();
- $window.MoPub.showBannerAtXY(x, y, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- hideBanner: function () {
- var d = $q.defer();
- $window.MoPub.hideBanner(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- prepareInterstitial: function (options) {
- var d = $q.defer();
- $window.MoPub.prepareInterstitial(options, function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- },
- showInterstitial: function () {
- var d = $q.defer();
- $window.MoPub.showInterstitial(function () {
- d.resolve();
- }, function () {
- d.reject();
- });
- return d.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/sidneys/cordova-plugin-nativeaudio.git
- // link : https://github.com/sidneys/cordova-plugin-nativeaudio
- angular.module('ngCordova.plugins.nativeAudio', [])
- .factory('$cordovaNativeAudio', ['$q', '$window', function ($q, $window) {
- return {
- preloadSimple: function (id, assetPath) {
- var q = $q.defer();
- $window.plugins.NativeAudio.preloadSimple(id, assetPath, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- preloadComplex: function (id, assetPath, volume, voices) {
- var q = $q.defer();
- $window.plugins.NativeAudio.preloadComplex(id, assetPath, volume, voices, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- play: function (id, completeCallback) {
- var q = $q.defer();
- $window.plugins.NativeAudio.play(id, completeCallback
- ,function (err) {
- q.reject(err);
- }
- , function (result) {
- q.resolve(result);
- });
- return q.promise;
- },
- stop: function (id) {
- var q = $q.defer();
- $window.plugins.NativeAudio.stop(id, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- loop: function (id) {
- var q = $q.defer();
- $window.plugins.NativeAudio.loop(id, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- unload: function (id) {
- var q = $q.defer();
- $window.plugins.NativeAudio.unload(id, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- setVolumeForComplexAsset: function (id, volume) {
- var q = $q.defer();
- $window.plugins.NativeAudio.setVolumeForComplexAsset(id, volume, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-network-information
- // link : https://github.com/apache/cordova-plugin-network-information
- angular.module('ngCordova.plugins.network', [])
- .factory('$cordovaNetwork', ['$rootScope', '$timeout', function ($rootScope, $timeout) {
- /**
- * Fires offline a event
- */
- var offlineEvent = function () {
- var networkState = navigator.connection.type;
- $timeout(function () {
- $rootScope.$broadcast('$cordovaNetwork:offline', networkState);
- });
- };
- /**
- * Fires online a event
- */
- var onlineEvent = function () {
- var networkState = navigator.connection.type;
- $timeout(function () {
- $rootScope.$broadcast('$cordovaNetwork:online', networkState);
- });
- };
- document.addEventListener("deviceready", function () {
- if (navigator.connection) {
- document.addEventListener("offline", offlineEvent, false);
- document.addEventListener("online", onlineEvent, false);
- }
- });
- return {
- getNetwork: function () {
- return navigator.connection.type;
- },
- isOnline: function () {
- var networkState = navigator.connection.type;
- return networkState !== Connection.UNKNOWN && networkState !== Connection.NONE;
- },
- isOffline: function () {
- var networkState = navigator.connection.type;
- return networkState === Connection.UNKNOWN || networkState === Connection.NONE;
- },
- clearOfflineWatch: function () {
- document.removeEventListener("offline", offlineEvent);
- $rootScope.$$listeners["$cordovaNetwork:offline"] = [];
- },
- clearOnlineWatch: function () {
- document.removeEventListener("online", onlineEvent);
- $rootScope.$$listeners["$cordovaNetwork:online"] = [];
- }
- };
- }])
- .run(['$cordovaNetwork', function ($cordovaNetwork) {
- }]);
- // install : cordova plugin add https://github.com/Paldom/PinDialog.git
- // link : https://github.com/Paldom/PinDialog
- angular.module('ngCordova.plugins.pinDialog', [])
- .factory('$cordovaPinDialog', ['$q', '$window', function ($q, $window) {
- return {
- prompt: function (message, title, buttons) {
- var q = $q.defer();
- $window.plugins.pinDialog.prompt(message, function (res) {
- q.resolve(res);
- }, title, buttons);
- return q.promise;
- }
- };
- }]);
- // install :
- // link :
- angular.module('ngCordova.plugins.prefs', [])
- .factory('$cordovaPreferences', ['$window', '$q', function ($window, $q) {
- return {
- set: function (key, value) {
- var q = $q.defer();
- $window.appgiraffe.plugins.applicationPreferences.set(key, value, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- },
- get: function (key) {
- var q = $q.defer();
- $window.appgiraffe.plugins.applicationPreferences.get(key, function (value) {
- q.resolve(value);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/katzer/cordova-plugin-printer.git
- // link : https://github.com/katzer/cordova-plugin-printer
- angular.module('ngCordova.plugins.printer', [])
- .factory('$cordovaPrinter', ['$q', '$window', function ($q, $window) {
- return {
- isAvailable: function () {
- var q = $q.defer();
- $window.plugin.printer.isAvailable(function (isAvailable) {
- q.resolve(isAvailable);
- });
- return q.promise;
- },
- print: function (doc, options) {
- var q = $q.defer();
- $window.plugin.printer.print(doc, options, function () {
- q.resolve();
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/pbernasconi/cordova-progressIndicator.git
- // link : http://pbernasconi.github.io/cordova-progressIndicator/
- angular.module('ngCordova.plugins.progressIndicator', [])
- .factory('$cordovaProgress', ['$q', function ($q) {
- return {
- show: function (_message) {
- var message = _message || "Please wait...";
- return ProgressIndicator.show(message);
- },
- showSimple: function (_dim) {
- var dim = _dim || false;
- return ProgressIndicator.showSimple(dim);
- },
- showSimpleWithLabel: function (_dim, _label) {
- var dim = _dim || false;
- var label = _label || "Loading...";
- return ProgressIndicator.showSimpleWithLabel(dim, label);
- },
- showSimpleWithLabelDetail: function (_dim, _label, _detail) {
- var dim = _dim || false;
- var label = _label || "Loading...";
- var detail = _detail || "Please wait";
- return ProgressIndicator.showSimpleWithLabelDetail(dim, label, detail);
- },
- showDeterminate: function (_dim, _timeout) {
- var dim = _dim || false;
- var timeout = _timeout || 50000;
- return ProgressIndicator.showDeterminate(dim, timeout);
- },
- showDeterminateWithLabel: function (_dim, _timeout, _label) {
- var dim = _dim || false;
- var timeout = _timeout || 50000;
- var label = _label || "Loading...";
- return ProgressIndicator.showDeterminateWithLabel(dim, timeout, label);
- },
- showAnnular: function (_dim, _timeout) {
- var dim = _dim || false;
- var timeout = _timeout || 50000;
- return ProgressIndicator.showAnnular(dim, timeout);
- },
- showAnnularWithLabel: function (_dim, _timeout, _label) {
- var dim = _dim || false;
- var timeout = _timeout || 50000;
- var label = _label || "Loading...";
- return ProgressIndicator.showAnnularWithLabel(dim, timeout, label);
- },
- showBar: function (_dim, _timeout) {
- var dim = _dim || false;
- var timeout = _timeout || 50000;
- return ProgressIndicator.showBar(dim, timeout);
- },
- showBarWithLabel: function (_dim, _timeout, _label) {
- var dim = _dim || false;
- var timeout = _timeout || 50000;
- var label = _label || "Loading...";
- return ProgressIndicator.showBarWithLabel(dim, timeout, label);
- },
- showSuccess: function (_dim, _label) {
- var dim = _dim || false;
- var label = _label || "Success";
- return ProgressIndicator.showSuccess(dim, label);
- },
- showText: function (_dim, _text, _position) {
- var dim = _dim || false;
- var text = _text || "Warning";
- var position = _position || "center";
- return ProgressIndicator.showText(dim, text, position);
- },
- hide: function () {
- return ProgressIndicator.hide();
- }
- };
- }]);
- // install : cordova plugin add https://github.com/phonegap-build/PushPlugin.git
- // link : https://github.com/phonegap-build/PushPlugin
- angular.module('ngCordova.plugins.push', [])
- .factory('$cordovaPush', ['$q', '$window', '$rootScope', '$timeout', function ($q, $window, $rootScope, $timeout) {
-
- return {
- onNotification: function (notification) {
- $timeout(function () {
- $rootScope.$broadcast('$cordovaPush:notificationReceived', notification);
- });
- },
- register: function (config) {
- var q = $q.defer();
- var injector;
- if (config !== undefined && config.ecb === undefined) {
- if (document.querySelector('[ng-app]') === null) {
- injector = "document.body";
- }
- else {
- injector = "document.querySelector('[ng-app]')";
- }
- config.ecb = "angular.element(" + injector + ").injector().get('$cordovaPush').onNotification";
- }
- $window.plugins.pushNotification.register(function (token) {
- q.resolve(token);
- }, function (error) {
- q.reject(error);
- }, config);
- return q.promise;
- },
- unregister: function (options) {
- var q = $q.defer();
- $window.plugins.pushNotification.unregister(function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- }, options);
- return q.promise;
- },
- // iOS only
- setBadgeNumber: function (number) {
- var q = $q.defer();
- $window.plugins.pushNotification.setApplicationIconBadgeNumber(function (result) {
- q.resolve(result);
- }, function (error) {
- q.reject(error);
- }, number);
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/cordova-sms/cordova-sms-plugin.git
- // link : https://github.com/cordova-sms/cordova-sms-plugin
- angular.module('ngCordova.plugins.sms', [])
- .factory('$cordovaSms', ['$q', function ($q) {
- return {
- send: function (number, message, options) {
- var q = $q.defer();
- sms.send(number, message, options, function (res) {
- q.resolve(res);
- }, function (err) {
- q.reject(err);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin.git
- // link : https://github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin
- // NOTE: shareViaEmail -> if user cancels sharing email, success is still called
- // TODO: add support for iPad
- angular.module('ngCordova.plugins.socialSharing', [])
- .factory('$cordovaSocialSharing', ['$q', '$window', function ($q, $window) {
- return {
- share: function (message, subject, file, link) {
- var q = $q.defer();
- subject = subject || null;
- file = file || null;
- link = link || null;
- $window.plugins.socialsharing.share(message, subject, file, link, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareViaTwitter: function (message, file, link) {
- var q = $q.defer();
- file = file || null;
- link = link || null;
- $window.plugins.socialsharing.shareViaTwitter(message, file, link, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareViaWhatsApp: function (message, file, link) {
- var q = $q.defer();
- file = file || null;
- link = link || null;
- $window.plugins.socialsharing.shareViaWhatsApp(message, file, link, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareViaFacebook: function (message, file, link) {
- var q = $q.defer();
- message = message || null;
- file = file || null;
- link = link || null;
- $window.plugins.socialsharing.shareViaFacebook(message, file, link, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareViaFacebookWithPasteMessageHint: function (message, file, link, pasteMessageHint) {
- var q = $q.defer();
- file = file || null;
- link = link || null;
- $window.plugins.socialsharing.shareViaFacebookWithPasteMessageHint(message, file, link, pasteMessageHint, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareViaSMS: function (message, commaSeparatedPhoneNumbers) {
- var q = $q.defer();
- $window.plugins.socialsharing.shareViaSMS(message, commaSeparatedPhoneNumbers, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareViaEmail: function (message, subject, toArr, ccArr, bccArr, fileArr) {
- var q = $q.defer();
- toArr = toArr || null;
- ccArr = ccArr || null;
- bccArr = bccArr || null;
- fileArr = fileArr || null;
- $window.plugins.socialsharing.shareViaEmail(message, subject, toArr, ccArr, bccArr, fileArr, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- shareVia: function (via, message, subject, file, link) {
- var q = $q.defer();
- message = message || null;
- subject = subject || null;
- file = file || null;
- link = link || null;
- $window.plugins.socialsharing.shareVia(via, message, subject, file, link, function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- canShareViaEmail: function () {
- var q = $q.defer();
- $window.plugins.socialsharing.canShareViaEmail(function () {
- q.resolve(true);
- }, function () {
- q.reject(false);
- });
- return q.promise;
- },
- canShareVia: function (via, message, subject, file, link) {
- var q = $q.defer();
- $window.plugins.socialsharing.canShareVia(via, message, subject, file, link, function (success) {
- q.resolve(success);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- available: function () {
- var q = $q.defer();
- window.plugins.socialsharing.available(function (isAvailable) {
- if (isAvailable) {
- q.resolve();
- }
- else {
- q.reject();
- }
- });
- }
- };
- }]);
- // install : cordova plugin add https://github.com/Paldom/SpinnerDialog.git
- // link : https://github.com/Paldom/SpinnerDialog
- angular.module('ngCordova.plugins.spinnerDialog', [])
- .factory('$cordovaSpinnerDialog', ['$window', function ($window) {
- return {
- show: function (title, message, fixed) {
- fixed = fixed || false;
- return $window.plugins.spinnerDialog.show(title, message, fixed);
- },
- hide: function () {
- return $window.plugins.spinnerDialog.hide();
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-splashscreen
- // link : https://github.com/apache/cordova-plugin-splashscreen
- angular.module('ngCordova.plugins.splashscreen', [])
- .factory('$cordovaSplashscreen', [function () {
- return {
- hide: function () {
- return navigator.splashscreen.hide();
- },
- show: function () {
- return navigator.splashscreen.show();
- }
- };
- }]);
- // install : cordova plugin add https://github.com/litehelpers/Cordova-sqlite-storage.git
- // link : https://github.com/litehelpers/Cordova-sqlite-storage
- angular.module('ngCordova.plugins.sqlite', [])
- .factory('$cordovaSQLite', ['$q', '$window', function ($q, $window) {
- return {
- openDB: function (options, background) {
- if (typeof options !== 'object') {
- options = {name: options};
- }
- if (typeof background !== 'undefined') {
- options.bgType = background;
- }
- return $window.sqlitePlugin.openDatabase(options);
- },
- execute: function (db, query, binding) {
- var q = $q.defer();
- db.transaction(function (tx) {
- tx.executeSql(query, binding, function (tx, result) {
- q.resolve(result);
- },
- function (transaction, error) {
- q.reject(error);
- });
- });
- return q.promise;
- },
- insertCollection: function (db, query, bindings) {
- var q = $q.defer();
- var coll = bindings.slice(0); // clone collection
- db.transaction(function (tx) {
- (function insertOne() {
- var record = coll.splice(0, 1)[0]; // get the first record of coll and reduce coll by one
- try {
- tx.executeSql(query, record, function (tx, result) {
- if (coll.length === 0) {
- q.resolve(result);
- } else {
- insertOne();
- }
- }, function (transaction, error) {
- q.reject(error);
- return;
- });
- } catch (exception) {
- q.reject(exception);
- }
- })();
- });
- return q.promise;
- },
- nestedExecute: function (db, query1, query2, binding1, binding2) {
- var q = $q.defer();
- db.transaction(function (tx) {
- tx.executeSql(query1, binding1, function (tx, result) {
- q.resolve(result);
- tx.executeSql(query2, binding2, function (tx, res) {
- q.resolve(res);
- });
- });
- },
- function (transaction, error) {
- q.reject(error);
- });
- return q.promise;
- },
- deleteDB: function (dbName) {
- var q = $q.defer();
- $window.sqlitePlugin.deleteDatabase(dbName, function (success) {
- q.resolve(success);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-statusbar
- // link : https://github.com/apache/cordova-plugin-statusbar
- angular.module('ngCordova.plugins.statusbar', [])
- .factory('$cordovaStatusbar', [function () {
- return {
- /**
- * @param {boolean} bool
- */
- overlaysWebView: function (bool) {
- return StatusBar.overlaysWebView(!!bool);
- },
- STYLES: {
- DEFAULT: 0,
- LIGHT_CONTENT: 1,
- BLACK_TRANSLUCENT: 2,
- BLACK_OPAQUE: 3
- },
- /**
- * @param {number} style
- */
- style: function (style) {
- switch (style) {
- // Default
- case 0:
- return StatusBar.styleDefault();
- // LightContent
- case 1:
- return StatusBar.styleLightContent();
- // BlackTranslucent
- case 2:
- return StatusBar.styleBlackTranslucent();
- // BlackOpaque
- case 3:
- return StatusBar.styleBlackOpaque();
- default:
- return StatusBar.styleDefault();
- }
- },
- // supported names:
- // black, darkGray, lightGray, white, gray, red, green,
- // blue, cyan, yellow, magenta, orange, purple, brown
- styleColor: function (color) {
- return StatusBar.backgroundColorByName(color);
- },
- styleHex: function (colorHex) {
- return StatusBar.backgroundColorByHexString(colorHex);
- },
- hide: function () {
- return StatusBar.hide();
- },
- show: function () {
- return StatusBar.show();
- },
- isVisible: function () {
- return StatusBar.isVisible;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin.git
- // link : https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin
- angular.module('ngCordova.plugins.toast', [])
- .factory('$cordovaToast', ['$q', '$window', function ($q, $window) {
- return {
- showShortTop: function (message) {
- var q = $q.defer();
- $window.plugins.toast.showShortTop(message, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- showShortCenter: function (message) {
- var q = $q.defer();
- $window.plugins.toast.showShortCenter(message, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- showShortBottom: function (message) {
- var q = $q.defer();
- $window.plugins.toast.showShortBottom(message, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- showLongTop: function (message) {
- var q = $q.defer();
- $window.plugins.toast.showLongTop(message, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- showLongCenter: function (message) {
- var q = $q.defer();
- $window.plugins.toast.showLongCenter(message, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- showLongBottom: function (message) {
- var q = $q.defer();
- $window.plugins.toast.showLongBottom(message, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- },
- show: function (message, duration, position) {
- var q = $q.defer();
- $window.plugins.toast.show(message, duration, position, function (response) {
- q.resolve(response);
- }, function (error) {
- q.reject(error);
- });
- return q.promise;
- }
- };
- }]);
- // install : cordova plugin add https://github.com/leecrossley/cordova-plugin-touchid.git
- // link : https://github.com/leecrossley/cordova-plugin-touchid
- angular.module('ngCordova.plugins.touchid', [])
- .factory('$cordovaTouchID', ['$q', function ($q) {
- return {
- checkSupport: function () {
- var defer = $q.defer();
- if (!window.cordova) {
- defer.reject("Not supported without cordova.js");
- } else {
- touchid.checkSupport(function (value) {
- defer.resolve(value);
- }, function (err) {
- defer.reject(err);
- });
- }
- return defer.promise;
- },
- authenticate: function (auth_reason_text) {
- var defer = $q.defer();
- if (!window.cordova) {
- defer.reject("Not supported without cordova.js");
- } else {
- touchid.authenticate(function (value) {
- defer.resolve(value);
- }, function (err) {
- defer.reject(err);
- }, auth_reason_text);
- }
- return defer.promise;
- }
- };
- }]);
- // install : cordova plugin add cordova-plugin-vibration
- // link : https://github.com/apache/cordova-plugin-vibration
- angular.module('ngCordova.plugins.vibration', [])
- .factory('$cordovaVibration', [function () {
- return {
- vibrate: function (times) {
- return navigator.notification.vibrate(times);
- },
- vibrateWithPattern: function (pattern, repeat) {
- return navigator.notification.vibrateWithPattern(pattern, repeat);
- },
- cancelVibration: function () {
- return navigator.notification.cancelVibration();
- }
- };
- }]);
- // install : cordova plugin add https://github.com/EddyVerbruggen/VideoCapturePlus-PhoneGap-Plugin.git
- // link : https://github.com/EddyVerbruggen/VideoCapturePlus-PhoneGap-Plugin
- angular.module('ngCordova.plugins.videoCapturePlus', [])
- .provider('$cordovaVideoCapturePlus', [function () {
- var defaultOptions = {};
- /**
- * the nr of videos to record, default 1 (on iOS always 1)
- *
- * @param limit
- */
- this.setLimit = function setLimit(limit) {
- defaultOptions.limit = limit;
- };
- /**
- * max duration in seconds, default 0, which is 'forever'
- *
- * @param seconds
- */
- this.setMaxDuration = function setMaxDuration(seconds) {
- defaultOptions.duration = seconds;
- };
- /**
- * set to true to override the default low quality setting
- *
- * @param {Boolean} highquality
- */
- this.setHighQuality = function setHighQuality(highquality) {
- defaultOptions.highquality = highquality;
- };
- /**
- * you'll want to sniff the user-Agent/device and pass the best overlay based on that..
- * set to true to override the default backfacing camera setting. iOS: works fine, Android: YMMV (#18)
- *
- * @param {Boolean} frontcamera
- */
- this.useFrontCamera = function useFrontCamera(frontcamera) {
- defaultOptions.frontcamera = frontcamera;
- };
- /**
- * put the png in your www folder
- *
- * @param {String} imageUrl
- */
- this.setPortraitOverlay = function setPortraitOverlay(imageUrl) {
- defaultOptions.portraitOverlay = imageUrl;
- };
- /**
- *
- * @param {String} imageUrl
- */
- this.setLandscapeOverlay = function setLandscapeOverlay(imageUrl) {
- defaultOptions.landscapeOverlay = imageUrl;
- };
- /**
- * iOS only
- *
- * @param text
- */
- this.setOverlayText = function setOverlayText(text) {
- defaultOptions.overlayText = text;
- };
- this.$get = ['$q', '$window', function ($q, $window) {
- return {
- captureVideo: function (options) {
- var q = $q.defer();
- if (!$window.plugins.videocaptureplus) {
- q.resolve(null);
- return q.promise;
- }
- $window.plugins.videocaptureplus.captureVideo(q.resolve, q.reject,
- angular.extend({}, defaultOptions, options));
- return q.promise;
- }
- };
- }];
- }]);
- // install : cordova plugin add https://github.com/MobileChromeApps/zip.git
- // link : https://github.com/MobileChromeApps/zip
- angular.module('ngCordova.plugins.zip', [])
- .factory('$cordovaZip', ['$q', '$window', function ($q, $window) {
- return {
- unzip: function (source, destination) {
- var q = $q.defer();
- $window.zip.unzip(source, destination, function (isError) {
- if (isError === 0) {
- q.resolve();
- } else {
- q.reject();
- }
- }, function (progressEvent) {
- q.notify(progressEvent);
- });
- return q.promise;
- }
- };
- }]);
- angular.module("oauth.providers", ["oauth.utils"])
- .factory("$cordovaOauth", ["$q", '$http', "$cordovaOauthUtility", function($q, $http, $cordovaOauthUtility) {
- return {
- /*
- * Sign into the ADFS service (ADFS 3.0 onwards)
- *
- * @param string clientId (client registered in ADFS, with redirect_uri configured to: http://localhost/callback)
- * @param string adfsServer (url of the ADFS Server)
- * @param string relyingPartyId (url of the Relying Party (resource relying on ADFS for authentication) configured in ADFS)
- * @return promise
- */
- adfs: function(clientId, adfsServer, relyingPartyId) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var browserRef = window.open(adfsServer + '/adfs/oauth2/authorize?response_type=code&client_id=' + clientId +'&redirect_uri=http://localhost/callback&resource=' + relyingPartyId, '_blank', 'location=no');
- browserRef.addEventListener("loadstart", function(event) {
- if((event.url).indexOf('http://localhost/callback') === 0) {
- var requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: adfsServer + "/adfs/oauth2/token", data: "client_id=" + clientId + "&code=" + requestToken + "&redirect_uri=http://localhost/callback&grant_type=authorization_code" })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Dropbox service
- *
- * @param string appKey
- * @param object options
- * @return promise
- */
- dropbox: function(appKey, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open("https://www.dropbox.com/1/oauth2/authorize?client_id=" + appKey + "&redirect_uri=" + redirect_uri + "&response_type=token", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, uid: parameterMap.uid });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Digital Ocean service
- *
- * @param string clientId
- * @param string clientSecret
- * @param object options
- * @return promise
- */
- digitalOcean: function(clientId, clientSecret, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=read%20write", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- var requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://cloud.digitalocean.com/v1/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Google service
- *
- * @param string clientId
- * @param array appScope
- * @param object options
- * @return promise
- */
- google: function(clientId, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://accounts.google.com/o/oauth2/auth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(" ") + '&approval_prompt=force&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener("loadstart", function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the GitHub service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @param object options
- * @return promise
- */
- github: function(clientId, clientSecret, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://github.com/login/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(","), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http.defaults.headers.post.accept = 'application/json';
- $http({method: "post", url: "https://github.com/login/oauth/access_token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Facebook service
- *
- * @param string clientId
- * @param array appScope
- * @param object options
- * @return promise
- */
- facebook: function(clientId, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var flowUrl = "https://www.facebook.com/v2.0/dialog/oauth?client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&response_type=token&scope=" + appScope.join(",");
- if(options !== undefined && options.hasOwnProperty("auth_type")) {
- flowUrl += "&auth_type=" + options.auth_type;
- }
- var browserRef = window.open(flowUrl, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
- } else {
- if ((event.url).indexOf("error_code=100") !== 0)
- deferred.reject("Facebook returned error_code=100: Invalid permissions");
- else
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the LinkedIn service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @param string state
- * @param object options
- * @return promise
- */
- linkedin: function(clientId, clientSecret, appScope, state, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://www.linkedin.com/uas/oauth2/authorization?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(" ") + '&response_type=code&state=' + state, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://www.linkedin.com/uas/oauth2/accessToken", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Instagram service
- *
- * @param string clientId
- * @param array appScope
- * @param object options
- * @return promise
- */
- instagram: function(clientId, appScope, options) {
- var deferred = $q.defer();
- var split_tokens = {
- 'code':'?',
- 'token':'#'
- };
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- var response_type = "token";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- if(options.hasOwnProperty("response_type")) {
- response_type = options.response_type;
- }
- }
- var browserRef = window.open('https://api.instagram.com/oauth/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(" ") + '&response_type='+response_type, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split(split_tokens[response_type])[1];
- var parameterMap = $cordovaOauthUtility.parseResponseParameters(callbackResponse);
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token });
- } else if(parameterMap.code !== undefined && parameterMap.code !== null) {
- deferred.resolve({ code: parameterMap.code });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Box service
- *
- * @param string clientId
- * @param string clientSecret
- * @param string appState
- * @param object options
- * @return promise
- */
- box: function(clientId, clientSecret, appState, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://app.box.com/api/oauth2/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&state=' + appState + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://app.box.com/api/oauth2/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Reddit service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @param object options
- * @return promise
- */
- reddit: function(clientId, clientSecret, appScope, compact, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://ssl.reddit.com/api/v1/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&duration=permanent&state=ngcordovaoauth&scope=' + appScope.join(",") + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http.defaults.headers.post.Authorization = 'Basic ' + btoa(clientId + ":" + clientSecret);
- $http({method: "post", url: "https://ssl.reddit.com/api/v1/access_token", data: "redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Twitter service
- * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
- *
- * @param string clientId
- * @param string clientSecret
- * @return promise
- */
- twitter: function(clientId, clientSecret, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- if(typeof jsSHA !== "undefined") {
- var oauthObject = {
- oauth_consumer_key: clientId,
- oauth_nonce: $cordovaOauthUtility.createNonce(10),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
- oauth_version: "1.0"
- };
- var signatureObj = $cordovaOauthUtility.createSignature("POST", "https://api.twitter.com/oauth/request_token", oauthObject, { oauth_callback: redirect_uri }, clientSecret);
- $http({
- method: "post",
- url: "https://api.twitter.com/oauth/request_token",
- headers: {
- "Authorization": signatureObj.authorization_header,
- "Content-Type": "application/x-www-form-urlencoded"
- },
- data: "oauth_callback=" + encodeURIComponent(redirect_uri)
- })
- .success(function(requestTokenResult) {
- var requestTokenParameters = (requestTokenResult).split("&");
- var parameterMap = {};
- for(var i = 0; i < requestTokenParameters.length; i++) {
- parameterMap[requestTokenParameters[i].split("=")[0]] = requestTokenParameters[i].split("=")[1];
- }
- if(parameterMap.hasOwnProperty("oauth_token") === false) {
- deferred.reject("Oauth request token was not received");
- }
- var browserRef = window.open('https://api.twitter.com/oauth/authenticate?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- var callbackResponse = (event.url).split("?")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = {};
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.hasOwnProperty("oauth_verifier") === false) {
- deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
- }
- delete oauthObject.oauth_signature;
- oauthObject.oauth_token = parameterMap.oauth_token;
- var signatureObj = $cordovaOauthUtility.createSignature("POST", "https://api.twitter.com/oauth/access_token", oauthObject, { oauth_verifier: parameterMap.oauth_verifier }, clientSecret);
- $http({
- method: "post",
- url: "https://api.twitter.com/oauth/access_token",
- headers: {
- "Authorization": signatureObj.authorization_header
- },
- params: {
- "oauth_verifier": parameterMap.oauth_verifier
- }
- })
- .success(function(result) {
- var accessTokenParameters = result.split("&");
- var parameterMap = {};
- for(var i = 0; i < accessTokenParameters.length; i++) {
- parameterMap[accessTokenParameters[i].split("=")[0]] = accessTokenParameters[i].split("=")[1];
- }
- if(parameterMap.hasOwnProperty("oauth_token_secret") === false) {
- deferred.reject("Oauth access token was not received");
- }
- deferred.resolve(parameterMap);
- })
- .error(function(error) {
- deferred.reject(error);
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- })
- .error(function(error) {
- deferred.reject(error);
- });
- } else {
- deferred.reject("Missing jsSHA JavaScript library");
- }
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Meetup service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- meetup: function(clientId, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://secure.meetup.com/oauth2/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = {};
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve(parameterMap);
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Salesforce service
- *
- * Suggestion: use salesforce oauth with forcetk.js(as SDK)
- *
- * @param string loginUrl (such as: https://login.salesforce.com ; please notice community login)
- * @param string clientId (copy from connection app info)
- * @param string redirectUri (callback url in connection app info)
- * @return promise
- */
- salesforce: function (loginUrl, clientId) {
- var redirectUri = 'http://localhost/callback';
- var getAuthorizeUrl = function (loginUrl, clientId, redirectUri) {
- return loginUrl+'services/oauth2/authorize?display=touch'+
- '&response_type=token&client_id='+escape(clientId)+
- '&redirect_uri='+escape(redirectUri);
- };
- var startWith = function(string, str) {
- return (string.substr(0, str.length) === str);
- };
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var browserRef = window.open(getAuthorizeUrl(loginUrl, clientId, redirectUri), "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function(event) {
- if(startWith(event.url, redirectUri)) {
- var oauthResponse = {};
- var fragment = (event.url).split('#')[1];
- if (fragment) {
- var nvps = fragment.split('&');
- for (var nvp in nvps) {
- var parts = nvps[nvp].split('=');
- oauthResponse[parts[0]] = unescape(parts[1]);
- }
- }
- if (typeof oauthResponse === 'undefined' ||
- typeof oauthResponse.access_token === 'undefined') {
- deferred.reject("Problem authenticating");
- } else {
- deferred.resolve(oauthResponse);
- }
- setTimeout(function() {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Strava service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @param object options
- * @return promise
- */
- strava: function(clientId, clientSecret, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://www.strava.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(",") + '&response_type=code&approval_prompt=force', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://www.strava.com/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Withings service
- * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
- *
- * @param string clientId
- * @param string clientSecret
- * @return promise
- */
- withings: function(clientId, clientSecret) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- if(typeof jsSHA !== "undefined") {
- // Step 1 : get a oAuth "request token"
- var oauthObject = $cordovaOauthUtility.generateOauthParametersInstance(clientId);
- oauthObject.oauth_callback = 'http://localhost/callback';
- var requestTokenUrlBase = "https://oauth.withings.com/account/request_token";
- var signatureObj = $cordovaOauthUtility.createSignature("GET", requestTokenUrlBase, {}, oauthObject, clientSecret);
- oauthObject.oauth_signature = signatureObj.signature;
- var requestTokenParameters = $cordovaOauthUtility.generateUrlParameters(oauthObject);
- $http({method: "get", url: requestTokenUrlBase + "?" + requestTokenParameters })
- .success(function(requestTokenResult) {
- // Step 2 : End-user authorization
- var parameterMap = $cordovaOauthUtility.parseResponseParameters(requestTokenResult);
- if(parameterMap.hasOwnProperty("oauth_token") === false) {
- deferred.reject("Oauth request token was not received");
- }
- var oauthObject = $cordovaOauthUtility.generateOauthParametersInstance(clientId);
- oauthObject.oauth_token = parameterMap.oauth_token;
- // used in step 3
- var oauthTokenSecret = parameterMap.oauth_token_secret;
- var authorizeUrlBase = "https://oauth.withings.com/account/authorize";
- var signatureObj = $cordovaOauthUtility.createSignature("GET", authorizeUrlBase, {}, oauthObject, clientSecret);
- oauthObject.oauth_signature = signatureObj.signature;
- var authorizeParameters = $cordovaOauthUtility.generateUrlParameters(oauthObject);
- var browserRef = window.open(authorizeUrlBase + '?' + authorizeParameters, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- // STEP 3: User Data Access token
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("?")[1];
- parameterMap = $cordovaOauthUtility.parseResponseParameters(callbackResponse);
- if(parameterMap.hasOwnProperty("oauth_verifier") === false) {
- deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
- }
- var oauthObject = $cordovaOauthUtility.generateOauthParametersInstance(clientId);
- oauthObject.oauth_token = parameterMap.oauth_token;
- var accessTokenUrlBase = "https://oauth.withings.com/account/access_token";
- var signatureObj = $cordovaOauthUtility.createSignature("GET", accessTokenUrlBase, {}, oauthObject, clientSecret, oauthTokenSecret);
- oauthObject.oauth_signature = signatureObj.signature;
- var accessTokenParameters = $cordovaOauthUtility.generateUrlParameters(oauthObject);
- $http({method: "get", url: accessTokenUrlBase + '?' + accessTokenParameters})
- .success(function(result) {
- var parameterMap = $cordovaOauthUtility.parseResponseParameters(result);
- if(parameterMap.hasOwnProperty("oauth_token_secret") === false) {
- deferred.reject("Oauth access token was not received");
- }
- deferred.resolve(parameterMap);
- })
- .error(function(error) {
- deferred.reject(error);
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- })
- .error(function(error) {
- deferred.reject(error);
- });
- } else {
- deferred.reject("Missing jsSHA JavaScript library");
- }
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Foursquare service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- foursquare: function(clientId, options) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if ($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://foursquare.com/oauth2/authenticate?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- var promiseResponse = {
- access_token: parameterMap.access_token,
- expires_in: parameterMap.expires_in
- };
- deferred.resolve(promiseResponse);
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Magento service
- * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
- *
- * @param string baseUrl
- * @param string clientId
- * @param string clientSecret
- * @return promise
- */
- magento: function(baseUrl, clientId, clientSecret) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- if(typeof jsSHA !== "undefined") {
- var oauthObject = {
- oauth_callback: "http://localhost/callback",
- oauth_consumer_key: clientId,
- oauth_nonce: $cordovaOauthUtility.createNonce(5),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
- oauth_version: "1.0"
- };
- var signatureObj = $cordovaOauthUtility.createSignature("POST", baseUrl + "/oauth/initiate", oauthObject, { oauth_callback: "http://localhost/callback" }, clientSecret);
- $http.defaults.headers.post.Authorization = signatureObj.authorization_header;
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: baseUrl + "/oauth/initiate", data: "oauth_callback=http://localhost/callback" })
- .success(function(requestTokenResult) {
- var requestTokenParameters = (requestTokenResult).split("&");
- var parameterMap = {};
- for(var i = 0; i < requestTokenParameters.length; i++) {
- parameterMap[requestTokenParameters[i].split("=")[0]] = requestTokenParameters[i].split("=")[1];
- }
- if(parameterMap.hasOwnProperty("oauth_token") === false) {
- deferred.reject("Oauth request token was not received");
- }
- var tokenSecret = parameterMap.oauth_token_secret;
- var browserRef = window.open(baseUrl + '/oauth/authorize?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("?")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = {};
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.hasOwnProperty("oauth_verifier") === false) {
- deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
- }
- delete oauthObject.oauth_signature;
- delete oauthObject.oauth_callback;
- oauthObject.oauth_token = parameterMap.oauth_token;
- oauthObject.oauth_nonce = $cordovaOauthUtility.createNonce(5);
- oauthObject.oauth_verifier = parameterMap.oauth_verifier;
- var signatureObj = $cordovaOauthUtility.createSignature("POST", baseUrl + "/oauth/token", oauthObject, {}, clientSecret, tokenSecret);
- $http.defaults.headers.post.Authorization = signatureObj.authorization_header;
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: baseUrl + "/oauth/token" })
- .success(function(result) {
- var accessTokenParameters = result.split("&");
- var parameterMap = {};
- for(var i = 0; i < accessTokenParameters.length; i++) {
- parameterMap[accessTokenParameters[i].split("=")[0]] = accessTokenParameters[i].split("=")[1];
- }
- if(parameterMap.hasOwnProperty("oauth_token_secret") === false) {
- deferred.reject("Oauth access token was not received");
- }
- deferred.resolve(parameterMap);
- })
- .error(function(error) {
- deferred.reject(error);
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- })
- .error(function(error) {
- deferred.reject(error);
- });
- } else {
- deferred.reject("Missing jsSHA JavaScript library");
- }
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Vkontakte service
- *
- * @param string clientId
- * @param array appScope (for example: "friends,wall,photos,messages")
- * @return promise
- */
- vkontakte: function(clientId, appScope) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var browserRef = window.open('https://oauth.vk.com/authorize?client_id=' + clientId + '&redirect_uri=http://oauth.vk.com/blank.html&response_type=token&scope=' + appScope.join(",") + '&display=touch&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- var tmp = (event.url).split("#");
- if (tmp[0] == 'https://oauth.vk.com/blank.html' || tmp[0] == 'http://oauth.vk.com/blank.html') {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- var output = { access_token: parameterMap.access_token, expires_in: parameterMap.expires_in };
- if(parameterMap.email !== undefined && parameterMap.email !== null){
- output.email = parameterMap.email;
- }
- deferred.resolve(output);
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Odnoklassniki service
- *
- * @param string clientId
- * @param array appScope (for example: "VALUABLE_ACCESS ,GROUP_CONTENT,VIDEO_CONTENT")
- * @return promise
- */
- odnoklassniki: function (clientId, appScope)
- {
- var deferred = $q.defer();
- if (window.cordova)
- {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if ($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true)
- {
- var browserRef = window.open('http://www.odnoklassniki.ru/oauth/authorize?client_id=' + clientId + '&scope=' + appScope.join(",") + '&response_type=token&redirect_uri=http://localhost/callback' + '&layout=m', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event)
- {
- if ((event.url).indexOf("http://localhost/callback") === 0)
- {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++)
- {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null)
- {
- deferred.resolve({ access_token: parameterMap.access_token, session_secret_key: parameterMap.session_secret_key });
- } else
- {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function ()
- {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event)
- {
- deferred.reject("The sign in flow was canceled");
- });
- } else
- {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else
- {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Imgur service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- imgur: function(clientId, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://api.imgur.com/oauth2/authorize?client_id=' + clientId + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in, account_username: parameterMap.account_username });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Spotify service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- spotify: function(clientId, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://accounts.spotify.com/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token&scope=' + appScope.join(" "), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in, account_username: parameterMap.account_username });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Uber service
- *
- * @param string clientId
- * @param appScope array
- * @param object options
- * @return promise
- */
- uber: function(clientId, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://login.uber.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token&scope=' + appScope.join(" "), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in, scope: parameterMap.scope });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Windows Live Connect service
- *
- * @param string clientId
- * @param array appScope
- * @param object options
- * @return promise
- */
- windowsLive: function (clientId, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "https://login.live.com/oauth20_desktop.srf";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://login.live.com/oauth20_authorize.srf?client_id=' + clientId + "&scope=" + appScope.join(",") + '&response_type=token&display=touch' + '&redirect_uri=' + redirect_uri, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit", function (event) { });
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Yammer service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- yammer: function(clientId, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://www.yammer.com/dialog/oauth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Venmo service
- *
- * @param string clientId
- * @param array appScope
- * @param object options
- * @return promise
- */
- venmo: function(clientId, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://api.venmo.com/v1/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token&scope=' + appScope.join(" "), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Stripe service
- *
- * @param string clientId
- * @param string clientSecret
- * @param string appScope
- * @param object options
- * @return promise
- */
- stripe: function(clientId, clientSecret, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://connect.stripe.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://connect.stripe.com/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Rally service
- *
- * @param string clientId
- * @param string clientSecret
- * @param string appScope
- * @param object options
- * @return promise
- */
- rally: function(clientId, clientSecret, appScope, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://rally1.rallydev.com/login/oauth2/auth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://rally1.rallydev.com/login/oauth2/auth", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the FamilySearch service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- familySearch: function(clientId, state, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if(cordovaMetadata.hasOwnProperty("cordova-plugin-inappbrowser") === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open("https://ident.familysearch.org/cis-web/oauth2/v3/authorization?client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&response_type=code&state=" + state, "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- var requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://ident.familysearch.org/cis-web/oauth2/v3/token", data: "client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code&code=" + requestToken })
- .success(function(data) {
- deferred.resolve(data);
- })
- .error(function(data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function() {
- setTimeout(function() {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
- /*
- * Sign into the Envato service
- *
- * @param string clientId
- * @param object options
- * @return promise
- */
- envato: function(clientId, options) {
- var deferred = $q.defer();
- if(window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
- var redirect_uri = "http://localhost/callback";
- if(options !== undefined) {
- if(options.hasOwnProperty("redirect_uri")) {
- redirect_uri = options.redirect_uri;
- }
- }
- var browserRef = window.open('https://api.envato.com/authorization?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function(event) {
- if((event.url).indexOf(redirect_uri) === 0) {
- browserRef.removeEventListener("exit",function(event){});
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for(var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function(event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- }
- };
- }]);
- /*
- * Cordova AngularJS Oauth
- *
- * Created by Nic Raboy
- * http://www.nraboy.com
- *
- *
- *
- * DESCRIPTION:
- *
- * Use Oauth sign in for various web services.
- *
- *
- * REQUIRES:
- *
- * Apache Cordova 3.5+
- * Apache InAppBrowser Plugin
- * Apache Cordova Whitelist Plugin
- *
- *
- * SUPPORTS:
- *
- * Dropbox
- * Digital Ocean
- * Google
- * GitHub
- * Facebook
- * LinkedIn
- * Instagram
- * Box
- * Reddit
- * Twitter
- * Meetup
- * Salesforce
- * Strava
- * Withings
- * Foursquare
- * Magento
- * vkontakte
- * Odnoklassniki
- * ADFS
- * Imgur
- * Spotify
- * Uber
- * Windows Live Connect
- * Yammer
- * Venmo
- * Stripe
- * Rally
- * Family Search
- * Envato
- */
- angular.module("ngCordovaOauth", [
- "oauth.providers",
- "oauth.utils"
- ]);
- angular.module("oauth.utils", [])
- .factory("$cordovaOauthUtility", ["$q", function($q) {
- return {
- /*
- * Check to see if the mandatory InAppBrowser plugin is installed
- *
- * @param
- * @return boolean
- */
- isInAppBrowserInstalled: function(cordovaMetadata) {
- var inAppBrowserNames = ["cordova-plugin-inappbrowser", "org.apache.cordova.inappbrowser"];
- return inAppBrowserNames.some(function(name) {
- return cordovaMetadata.hasOwnProperty(name);
- });
- },
- /*
- * Sign an Oauth 1.0 request
- *
- * @param string method
- * @param string endPoint
- * @param object headerParameters
- * @param object bodyParameters
- * @param string secretKey
- * @param string tokenSecret (optional)
- * @return object
- */
- createSignature: function(method, endPoint, headerParameters, bodyParameters, secretKey, tokenSecret) {
- if(typeof jsSHA !== "undefined") {
- var headerAndBodyParameters = angular.copy(headerParameters);
- var bodyParameterKeys = Object.keys(bodyParameters);
- for(var i = 0; i < bodyParameterKeys.length; i++) {
- headerAndBodyParameters[bodyParameterKeys[i]] = encodeURIComponent(bodyParameters[bodyParameterKeys[i]]);
- }
- var signatureBaseString = method + "&" + encodeURIComponent(endPoint) + "&";
- var headerAndBodyParameterKeys = (Object.keys(headerAndBodyParameters)).sort();
- for(i = 0; i < headerAndBodyParameterKeys.length; i++) {
- if(i == headerAndBodyParameterKeys.length - 1) {
- signatureBaseString += encodeURIComponent(headerAndBodyParameterKeys[i] + "=" + headerAndBodyParameters[headerAndBodyParameterKeys[i]]);
- } else {
- signatureBaseString += encodeURIComponent(headerAndBodyParameterKeys[i] + "=" + headerAndBodyParameters[headerAndBodyParameterKeys[i]] + "&");
- }
- }
- var oauthSignatureObject = new jsSHA(signatureBaseString, "TEXT");
- var encodedTokenSecret = '';
- if (tokenSecret) {
- encodedTokenSecret = encodeURIComponent(tokenSecret);
- }
- headerParameters.oauth_signature = encodeURIComponent(oauthSignatureObject.getHMAC(encodeURIComponent(secretKey) + "&" + encodedTokenSecret, "TEXT", "SHA-1", "B64"));
- var headerParameterKeys = Object.keys(headerParameters);
- var authorizationHeader = 'OAuth ';
- for(i = 0; i < headerParameterKeys.length; i++) {
- if(i == headerParameterKeys.length - 1) {
- authorizationHeader += headerParameterKeys[i] + '="' + headerParameters[headerParameterKeys[i]] + '"';
- } else {
- authorizationHeader += headerParameterKeys[i] + '="' + headerParameters[headerParameterKeys[i]] + '",';
- }
- }
- return { signature_base_string: signatureBaseString, authorization_header: authorizationHeader, signature: headerParameters.oauth_signature };
- } else {
- return "Missing jsSHA JavaScript library";
- }
- },
- /*
- * Create Random String Nonce
- *
- * @param integer length
- * @return string
- */
- createNonce: function(length) {
- var text = "";
- var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- for(var i = 0; i < length; i++) {
- text += possible.charAt(Math.floor(Math.random() * possible.length));
- }
- return text;
- },
- generateUrlParameters: function (parameters) {
- var sortedKeys = Object.keys(parameters);
- sortedKeys.sort();
- var params = "";
- var amp = "";
- for (var i = 0 ; i < sortedKeys.length; i++) {
- params += amp + sortedKeys[i] + "=" + parameters[sortedKeys[i]];
- amp = "&";
- }
- return params;
- },
- parseResponseParameters: function (response) {
- if (response.split) {
- var parameters = response.split("&");
- var parameterMap = {};
- for(var i = 0; i < parameters.length; i++) {
- parameterMap[parameters[i].split("=")[0]] = parameters[i].split("=")[1];
- }
- return parameterMap;
- }
- else {
- return {};
- }
- },
- generateOauthParametersInstance: function(consumerKey) {
- var nonceObj = new jsSHA(Math.round((new Date()).getTime() / 1000.0), "TEXT");
- var oauthObject = {
- oauth_consumer_key: consumerKey,
- oauth_nonce: nonceObj.getHash("SHA-1", "HEX"),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
- oauth_version: "1.0"
- };
- return oauthObject;
- }
- };
- }]);
- })();
|