├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── readme.md └── src ├── ContactList.sln ├── ContactsList.API ├── App_Start │ ├── GenericStorage.cs │ ├── SwaggerConfig.cs │ └── WebApiConfig.cs ├── ContactsList.API.csproj ├── Controllers │ └── ContactsController.cs ├── Global.asax ├── Global.asax.cs ├── Models │ └── Contact.cs ├── Properties │ └── AssemblyInfo.cs ├── ServicePrincipal.cs ├── Web.Debug.config ├── Web.Release.config ├── Web.config └── packages.config ├── ContactsList.Angular ├── ContactsList.Angular.csproj ├── Content │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.css.map │ └── bootstrap.min.css ├── Properties │ └── AssemblyInfo.cs ├── Scripts │ ├── angular-animate.js │ ├── angular-animate.min.js │ ├── angular-animate.min.js.map │ ├── angular-aria.js │ ├── angular-aria.min.js │ ├── angular-aria.min.js.map │ ├── angular-cookies.js │ ├── angular-cookies.min.js │ ├── angular-cookies.min.js.map │ ├── angular-csp.css │ ├── angular-loader.js │ ├── angular-loader.min.js │ ├── angular-loader.min.js.map │ ├── angular-messages.js │ ├── angular-messages.min.js │ ├── angular-messages.min.js.map │ ├── angular-mocks.js │ ├── angular-resource.js │ ├── angular-resource.min.js │ ├── angular-resource.min.js.map │ ├── angular-route.js │ ├── angular-route.min.js │ ├── angular-route.min.js.map │ ├── angular-sanitize.js │ ├── angular-sanitize.min.js │ ├── angular-sanitize.min.js.map │ ├── angular-scenario.js │ ├── angular-touch.js │ ├── angular-touch.min.js │ ├── angular-touch.min.js.map │ ├── angular.js │ ├── angular.min.js │ ├── angular.min.js.map │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── errors.json │ ├── i18n │ │ ├── angular-locale_aa-dj.js │ │ ├── angular-locale_aa-er.js │ │ ├── angular-locale_aa-et.js │ │ ├── angular-locale_aa.js │ │ ├── angular-locale_af-na.js │ │ ├── angular-locale_af-za.js │ │ ├── angular-locale_af.js │ │ ├── angular-locale_agq-cm.js │ │ ├── angular-locale_agq.js │ │ ├── angular-locale_ak-gh.js │ │ ├── angular-locale_ak.js │ │ ├── angular-locale_am-et.js │ │ ├── angular-locale_am.js │ │ ├── angular-locale_ar-001.js │ │ ├── angular-locale_ar-ae.js │ │ ├── angular-locale_ar-bh.js │ │ ├── angular-locale_ar-dj.js │ │ ├── angular-locale_ar-dz.js │ │ ├── angular-locale_ar-eg.js │ │ ├── angular-locale_ar-eh.js │ │ ├── angular-locale_ar-er.js │ │ ├── angular-locale_ar-il.js │ │ ├── angular-locale_ar-iq.js │ │ ├── angular-locale_ar-jo.js │ │ ├── angular-locale_ar-km.js │ │ ├── angular-locale_ar-kw.js │ │ ├── angular-locale_ar-lb.js │ │ ├── angular-locale_ar-ly.js │ │ ├── angular-locale_ar-ma.js │ │ ├── angular-locale_ar-mr.js │ │ ├── angular-locale_ar-om.js │ │ ├── angular-locale_ar-ps.js │ │ ├── angular-locale_ar-qa.js │ │ ├── angular-locale_ar-sa.js │ │ ├── angular-locale_ar-sd.js │ │ ├── angular-locale_ar-so.js │ │ ├── angular-locale_ar-ss.js │ │ ├── angular-locale_ar-sy.js │ │ ├── angular-locale_ar-td.js │ │ ├── angular-locale_ar-tn.js │ │ ├── angular-locale_ar-ye.js │ │ ├── angular-locale_ar.js │ │ ├── angular-locale_as-in.js │ │ ├── angular-locale_as.js │ │ ├── angular-locale_asa-tz.js │ │ ├── angular-locale_asa.js │ │ ├── angular-locale_ast-es.js │ │ ├── angular-locale_ast.js │ │ ├── angular-locale_az-cyrl-az.js │ │ ├── angular-locale_az-cyrl.js │ │ ├── angular-locale_az-latn-az.js │ │ ├── angular-locale_az-latn.js │ │ ├── angular-locale_az.js │ │ ├── angular-locale_bas-cm.js │ │ ├── angular-locale_bas.js │ │ ├── angular-locale_be-by.js │ │ ├── angular-locale_be.js │ │ ├── angular-locale_bem-zm.js │ │ ├── angular-locale_bem.js │ │ ├── angular-locale_bez-tz.js │ │ ├── angular-locale_bez.js │ │ ├── angular-locale_bg-bg.js │ │ ├── angular-locale_bg.js │ │ ├── angular-locale_bm-latn-ml.js │ │ ├── angular-locale_bm-latn.js │ │ ├── angular-locale_bm-ml.js │ │ ├── angular-locale_bm.js │ │ ├── angular-locale_bn-bd.js │ │ ├── angular-locale_bn-in.js │ │ ├── angular-locale_bn.js │ │ ├── angular-locale_bo-cn.js │ │ ├── angular-locale_bo-in.js │ │ ├── angular-locale_bo.js │ │ ├── angular-locale_br-fr.js │ │ ├── angular-locale_br.js │ │ ├── angular-locale_brx-in.js │ │ ├── angular-locale_brx.js │ │ ├── angular-locale_bs-cyrl-ba.js │ │ ├── angular-locale_bs-cyrl.js │ │ ├── angular-locale_bs-latn-ba.js │ │ ├── angular-locale_bs-latn.js │ │ ├── angular-locale_bs.js │ │ ├── angular-locale_byn-er.js │ │ ├── angular-locale_byn.js │ │ ├── angular-locale_ca-ad.js │ │ ├── angular-locale_ca-es-valencia.js │ │ ├── angular-locale_ca-es.js │ │ ├── angular-locale_ca-fr.js │ │ ├── angular-locale_ca-it.js │ │ ├── angular-locale_ca.js │ │ ├── angular-locale_cgg-ug.js │ │ ├── angular-locale_cgg.js │ │ ├── angular-locale_chr-us.js │ │ ├── angular-locale_chr.js │ │ ├── angular-locale_ckb-arab-iq.js │ │ ├── angular-locale_ckb-arab-ir.js │ │ ├── angular-locale_ckb-arab.js │ │ ├── angular-locale_ckb-iq.js │ │ ├── angular-locale_ckb-ir.js │ │ ├── angular-locale_ckb-latn-iq.js │ │ ├── angular-locale_ckb-latn.js │ │ ├── angular-locale_ckb.js │ │ ├── angular-locale_cs-cz.js │ │ ├── angular-locale_cs.js │ │ ├── angular-locale_cy-gb.js │ │ ├── angular-locale_cy.js │ │ ├── angular-locale_da-dk.js │ │ ├── angular-locale_da-gl.js │ │ ├── angular-locale_da.js │ │ ├── angular-locale_dav-ke.js │ │ ├── angular-locale_dav.js │ │ ├── angular-locale_de-at.js │ │ ├── angular-locale_de-be.js │ │ ├── angular-locale_de-ch.js │ │ ├── angular-locale_de-de.js │ │ ├── angular-locale_de-li.js │ │ ├── angular-locale_de-lu.js │ │ ├── angular-locale_de.js │ │ ├── angular-locale_dje-ne.js │ │ ├── angular-locale_dje.js │ │ ├── angular-locale_dsb-de.js │ │ ├── angular-locale_dsb.js │ │ ├── angular-locale_dua-cm.js │ │ ├── angular-locale_dua.js │ │ ├── angular-locale_dyo-sn.js │ │ ├── angular-locale_dyo.js │ │ ├── angular-locale_dz-bt.js │ │ ├── angular-locale_dz.js │ │ ├── angular-locale_ebu-ke.js │ │ ├── angular-locale_ebu.js │ │ ├── angular-locale_ee-gh.js │ │ ├── angular-locale_ee-tg.js │ │ ├── angular-locale_ee.js │ │ ├── angular-locale_el-cy.js │ │ ├── angular-locale_el-gr.js │ │ ├── angular-locale_el.js │ │ ├── angular-locale_en-001.js │ │ ├── angular-locale_en-150.js │ │ ├── angular-locale_en-ag.js │ │ ├── angular-locale_en-ai.js │ │ ├── angular-locale_en-as.js │ │ ├── angular-locale_en-au.js │ │ ├── angular-locale_en-bb.js │ │ ├── angular-locale_en-be.js │ │ ├── angular-locale_en-bm.js │ │ ├── angular-locale_en-bs.js │ │ ├── angular-locale_en-bw.js │ │ ├── angular-locale_en-bz.js │ │ ├── angular-locale_en-ca.js │ │ ├── angular-locale_en-cc.js │ │ ├── angular-locale_en-ck.js │ │ ├── angular-locale_en-cm.js │ │ ├── angular-locale_en-cx.js │ │ ├── angular-locale_en-dg.js │ │ ├── angular-locale_en-dm.js │ │ ├── angular-locale_en-er.js │ │ ├── angular-locale_en-fj.js │ │ ├── angular-locale_en-fk.js │ │ ├── angular-locale_en-fm.js │ │ ├── angular-locale_en-gb.js │ │ ├── angular-locale_en-gd.js │ │ ├── angular-locale_en-gg.js │ │ ├── angular-locale_en-gh.js │ │ ├── angular-locale_en-gi.js │ │ ├── angular-locale_en-gm.js │ │ ├── angular-locale_en-gu.js │ │ ├── angular-locale_en-gy.js │ │ ├── angular-locale_en-hk.js │ │ ├── angular-locale_en-ie.js │ │ ├── angular-locale_en-im.js │ │ ├── angular-locale_en-in.js │ │ ├── angular-locale_en-io.js │ │ ├── angular-locale_en-iso.js │ │ ├── angular-locale_en-je.js │ │ ├── angular-locale_en-jm.js │ │ ├── angular-locale_en-ke.js │ │ ├── angular-locale_en-ki.js │ │ ├── angular-locale_en-kn.js │ │ ├── angular-locale_en-ky.js │ │ ├── angular-locale_en-lc.js │ │ ├── angular-locale_en-lr.js │ │ ├── angular-locale_en-ls.js │ │ ├── angular-locale_en-mg.js │ │ ├── angular-locale_en-mh.js │ │ ├── angular-locale_en-mo.js │ │ ├── angular-locale_en-mp.js │ │ ├── angular-locale_en-ms.js │ │ ├── angular-locale_en-mt.js │ │ ├── angular-locale_en-mu.js │ │ ├── angular-locale_en-mw.js │ │ ├── angular-locale_en-my.js │ │ ├── angular-locale_en-na.js │ │ ├── angular-locale_en-nf.js │ │ ├── angular-locale_en-ng.js │ │ ├── angular-locale_en-nr.js │ │ ├── angular-locale_en-nu.js │ │ ├── angular-locale_en-nz.js │ │ ├── angular-locale_en-pg.js │ │ ├── angular-locale_en-ph.js │ │ ├── angular-locale_en-pk.js │ │ ├── angular-locale_en-pn.js │ │ ├── angular-locale_en-pr.js │ │ ├── angular-locale_en-pw.js │ │ ├── angular-locale_en-rw.js │ │ ├── angular-locale_en-sb.js │ │ ├── angular-locale_en-sc.js │ │ ├── angular-locale_en-sd.js │ │ ├── angular-locale_en-sg.js │ │ ├── angular-locale_en-sh.js │ │ ├── angular-locale_en-sl.js │ │ ├── angular-locale_en-ss.js │ │ ├── angular-locale_en-sx.js │ │ ├── angular-locale_en-sz.js │ │ ├── angular-locale_en-tc.js │ │ ├── angular-locale_en-tk.js │ │ ├── angular-locale_en-to.js │ │ ├── angular-locale_en-tt.js │ │ ├── angular-locale_en-tv.js │ │ ├── angular-locale_en-tz.js │ │ ├── angular-locale_en-ug.js │ │ ├── angular-locale_en-um.js │ │ ├── angular-locale_en-us.js │ │ ├── angular-locale_en-vc.js │ │ ├── angular-locale_en-vg.js │ │ ├── angular-locale_en-vi.js │ │ ├── angular-locale_en-vu.js │ │ ├── angular-locale_en-ws.js │ │ ├── angular-locale_en-za.js │ │ ├── angular-locale_en-zm.js │ │ ├── angular-locale_en-zw.js │ │ ├── angular-locale_en.js │ │ ├── angular-locale_eo-001.js │ │ ├── angular-locale_eo.js │ │ ├── angular-locale_es-419.js │ │ ├── angular-locale_es-ar.js │ │ ├── angular-locale_es-bo.js │ │ ├── angular-locale_es-cl.js │ │ ├── angular-locale_es-co.js │ │ ├── angular-locale_es-cr.js │ │ ├── angular-locale_es-cu.js │ │ ├── angular-locale_es-do.js │ │ ├── angular-locale_es-ea.js │ │ ├── angular-locale_es-ec.js │ │ ├── angular-locale_es-es.js │ │ ├── angular-locale_es-gq.js │ │ ├── angular-locale_es-gt.js │ │ ├── angular-locale_es-hn.js │ │ ├── angular-locale_es-ic.js │ │ ├── angular-locale_es-mx.js │ │ ├── angular-locale_es-ni.js │ │ ├── angular-locale_es-pa.js │ │ ├── angular-locale_es-pe.js │ │ ├── angular-locale_es-ph.js │ │ ├── angular-locale_es-pr.js │ │ ├── angular-locale_es-py.js │ │ ├── angular-locale_es-sv.js │ │ ├── angular-locale_es-us.js │ │ ├── angular-locale_es-uy.js │ │ ├── angular-locale_es-ve.js │ │ ├── angular-locale_es.js │ │ ├── angular-locale_et-ee.js │ │ ├── angular-locale_et.js │ │ ├── angular-locale_eu-es.js │ │ ├── angular-locale_eu.js │ │ ├── angular-locale_ewo-cm.js │ │ ├── angular-locale_ewo.js │ │ ├── angular-locale_fa-af.js │ │ ├── angular-locale_fa-ir.js │ │ ├── angular-locale_fa.js │ │ ├── angular-locale_ff-cm.js │ │ ├── angular-locale_ff-gn.js │ │ ├── angular-locale_ff-mr.js │ │ ├── angular-locale_ff-sn.js │ │ ├── angular-locale_ff.js │ │ ├── angular-locale_fi-fi.js │ │ ├── angular-locale_fi.js │ │ ├── angular-locale_fil-ph.js │ │ ├── angular-locale_fil.js │ │ ├── angular-locale_fo-fo.js │ │ ├── angular-locale_fo.js │ │ ├── angular-locale_fr-be.js │ │ ├── angular-locale_fr-bf.js │ │ ├── angular-locale_fr-bi.js │ │ ├── angular-locale_fr-bj.js │ │ ├── angular-locale_fr-bl.js │ │ ├── angular-locale_fr-ca.js │ │ ├── angular-locale_fr-cd.js │ │ ├── angular-locale_fr-cf.js │ │ ├── angular-locale_fr-cg.js │ │ ├── angular-locale_fr-ch.js │ │ ├── angular-locale_fr-ci.js │ │ ├── angular-locale_fr-cm.js │ │ ├── angular-locale_fr-dj.js │ │ ├── angular-locale_fr-dz.js │ │ ├── angular-locale_fr-fr.js │ │ ├── angular-locale_fr-ga.js │ │ ├── angular-locale_fr-gf.js │ │ ├── angular-locale_fr-gn.js │ │ ├── angular-locale_fr-gp.js │ │ ├── angular-locale_fr-gq.js │ │ ├── angular-locale_fr-ht.js │ │ ├── angular-locale_fr-km.js │ │ ├── angular-locale_fr-lu.js │ │ ├── angular-locale_fr-ma.js │ │ ├── angular-locale_fr-mc.js │ │ ├── angular-locale_fr-mf.js │ │ ├── angular-locale_fr-mg.js │ │ ├── angular-locale_fr-ml.js │ │ ├── angular-locale_fr-mq.js │ │ ├── angular-locale_fr-mr.js │ │ ├── angular-locale_fr-mu.js │ │ ├── angular-locale_fr-nc.js │ │ ├── angular-locale_fr-ne.js │ │ ├── angular-locale_fr-pf.js │ │ ├── angular-locale_fr-pm.js │ │ ├── angular-locale_fr-re.js │ │ ├── angular-locale_fr-rw.js │ │ ├── angular-locale_fr-sc.js │ │ ├── angular-locale_fr-sn.js │ │ ├── angular-locale_fr-sy.js │ │ ├── angular-locale_fr-td.js │ │ ├── angular-locale_fr-tg.js │ │ ├── angular-locale_fr-tn.js │ │ ├── angular-locale_fr-vu.js │ │ ├── angular-locale_fr-wf.js │ │ ├── angular-locale_fr-yt.js │ │ ├── angular-locale_fr.js │ │ ├── angular-locale_fur-it.js │ │ ├── angular-locale_fur.js │ │ ├── angular-locale_fy-nl.js │ │ ├── angular-locale_fy.js │ │ ├── angular-locale_ga-ie.js │ │ ├── angular-locale_ga.js │ │ ├── angular-locale_gd-gb.js │ │ ├── angular-locale_gd.js │ │ ├── angular-locale_gl-es.js │ │ ├── angular-locale_gl.js │ │ ├── angular-locale_gsw-ch.js │ │ ├── angular-locale_gsw-fr.js │ │ ├── angular-locale_gsw-li.js │ │ ├── angular-locale_gsw.js │ │ ├── angular-locale_gu-in.js │ │ ├── angular-locale_gu.js │ │ ├── angular-locale_guz-ke.js │ │ ├── angular-locale_guz.js │ │ ├── angular-locale_gv-im.js │ │ ├── angular-locale_gv.js │ │ ├── angular-locale_ha-latn-gh.js │ │ ├── angular-locale_ha-latn-ne.js │ │ ├── angular-locale_ha-latn-ng.js │ │ ├── angular-locale_ha-latn.js │ │ ├── angular-locale_ha.js │ │ ├── angular-locale_haw-us.js │ │ ├── angular-locale_haw.js │ │ ├── angular-locale_he-il.js │ │ ├── angular-locale_he.js │ │ ├── angular-locale_hi-in.js │ │ ├── angular-locale_hi.js │ │ ├── angular-locale_hr-ba.js │ │ ├── angular-locale_hr-hr.js │ │ ├── angular-locale_hr.js │ │ ├── angular-locale_hsb-de.js │ │ ├── angular-locale_hsb.js │ │ ├── angular-locale_hu-hu.js │ │ ├── angular-locale_hu.js │ │ ├── angular-locale_hy-am.js │ │ ├── angular-locale_hy.js │ │ ├── angular-locale_ia-fr.js │ │ ├── angular-locale_ia.js │ │ ├── angular-locale_id-id.js │ │ ├── angular-locale_id.js │ │ ├── angular-locale_ig-ng.js │ │ ├── angular-locale_ig.js │ │ ├── angular-locale_ii-cn.js │ │ ├── angular-locale_ii.js │ │ ├── angular-locale_in.js │ │ ├── angular-locale_is-is.js │ │ ├── angular-locale_is.js │ │ ├── angular-locale_it-ch.js │ │ ├── angular-locale_it-it.js │ │ ├── angular-locale_it-sm.js │ │ ├── angular-locale_it.js │ │ ├── angular-locale_iw.js │ │ ├── angular-locale_ja-jp.js │ │ ├── angular-locale_ja.js │ │ ├── angular-locale_jgo-cm.js │ │ ├── angular-locale_jgo.js │ │ ├── angular-locale_jmc-tz.js │ │ ├── angular-locale_jmc.js │ │ ├── angular-locale_ka-ge.js │ │ ├── angular-locale_ka.js │ │ ├── angular-locale_kab-dz.js │ │ ├── angular-locale_kab.js │ │ ├── angular-locale_kam-ke.js │ │ ├── angular-locale_kam.js │ │ ├── angular-locale_kde-tz.js │ │ ├── angular-locale_kde.js │ │ ├── angular-locale_kea-cv.js │ │ ├── angular-locale_kea.js │ │ ├── angular-locale_khq-ml.js │ │ ├── angular-locale_khq.js │ │ ├── angular-locale_ki-ke.js │ │ ├── angular-locale_ki.js │ │ ├── angular-locale_kk-cyrl-kz.js │ │ ├── angular-locale_kk-cyrl.js │ │ ├── angular-locale_kk.js │ │ ├── angular-locale_kkj-cm.js │ │ ├── angular-locale_kkj.js │ │ ├── angular-locale_kl-gl.js │ │ ├── angular-locale_kl.js │ │ ├── angular-locale_kln-ke.js │ │ ├── angular-locale_kln.js │ │ ├── angular-locale_km-kh.js │ │ ├── angular-locale_km.js │ │ ├── angular-locale_kn-in.js │ │ ├── angular-locale_kn.js │ │ ├── angular-locale_ko-kp.js │ │ ├── angular-locale_ko-kr.js │ │ ├── angular-locale_ko.js │ │ ├── angular-locale_kok-in.js │ │ ├── angular-locale_kok.js │ │ ├── angular-locale_ks-arab-in.js │ │ ├── angular-locale_ks-arab.js │ │ ├── angular-locale_ks.js │ │ ├── angular-locale_ksb-tz.js │ │ ├── angular-locale_ksb.js │ │ ├── angular-locale_ksf-cm.js │ │ ├── angular-locale_ksf.js │ │ ├── angular-locale_ksh-de.js │ │ ├── angular-locale_ksh.js │ │ ├── angular-locale_kw-gb.js │ │ ├── angular-locale_kw.js │ │ ├── angular-locale_ky-cyrl-kg.js │ │ ├── angular-locale_ky-cyrl.js │ │ ├── angular-locale_ky.js │ │ ├── angular-locale_lag-tz.js │ │ ├── angular-locale_lag.js │ │ ├── angular-locale_lb-lu.js │ │ ├── angular-locale_lb.js │ │ ├── angular-locale_lg-ug.js │ │ ├── angular-locale_lg.js │ │ ├── angular-locale_lkt-us.js │ │ ├── angular-locale_lkt.js │ │ ├── angular-locale_ln-ao.js │ │ ├── angular-locale_ln-cd.js │ │ ├── angular-locale_ln-cf.js │ │ ├── angular-locale_ln-cg.js │ │ ├── angular-locale_ln.js │ │ ├── angular-locale_lo-la.js │ │ ├── angular-locale_lo.js │ │ ├── angular-locale_lt-lt.js │ │ ├── angular-locale_lt.js │ │ ├── angular-locale_lu-cd.js │ │ ├── angular-locale_lu.js │ │ ├── angular-locale_luo-ke.js │ │ ├── angular-locale_luo.js │ │ ├── angular-locale_luy-ke.js │ │ ├── angular-locale_luy.js │ │ ├── angular-locale_lv-lv.js │ │ ├── angular-locale_lv.js │ │ ├── angular-locale_mas-ke.js │ │ ├── angular-locale_mas-tz.js │ │ ├── angular-locale_mas.js │ │ ├── angular-locale_mer-ke.js │ │ ├── angular-locale_mer.js │ │ ├── angular-locale_mfe-mu.js │ │ ├── angular-locale_mfe.js │ │ ├── angular-locale_mg-mg.js │ │ ├── angular-locale_mg.js │ │ ├── angular-locale_mgh-mz.js │ │ ├── angular-locale_mgh.js │ │ ├── angular-locale_mgo-cm.js │ │ ├── angular-locale_mgo.js │ │ ├── angular-locale_mk-mk.js │ │ ├── angular-locale_mk.js │ │ ├── angular-locale_ml-in.js │ │ ├── angular-locale_ml.js │ │ ├── angular-locale_mn-cyrl-mn.js │ │ ├── angular-locale_mn-cyrl.js │ │ ├── angular-locale_mn.js │ │ ├── angular-locale_mr-in.js │ │ ├── angular-locale_mr.js │ │ ├── angular-locale_ms-latn-bn.js │ │ ├── angular-locale_ms-latn-my.js │ │ ├── angular-locale_ms-latn-sg.js │ │ ├── angular-locale_ms-latn.js │ │ ├── angular-locale_ms.js │ │ ├── angular-locale_mt-mt.js │ │ ├── angular-locale_mt.js │ │ ├── angular-locale_mua-cm.js │ │ ├── angular-locale_mua.js │ │ ├── angular-locale_my-mm.js │ │ ├── angular-locale_my.js │ │ ├── angular-locale_naq-na.js │ │ ├── angular-locale_naq.js │ │ ├── angular-locale_nb-no.js │ │ ├── angular-locale_nb-sj.js │ │ ├── angular-locale_nb.js │ │ ├── angular-locale_nd-zw.js │ │ ├── angular-locale_nd.js │ │ ├── angular-locale_ne-in.js │ │ ├── angular-locale_ne-np.js │ │ ├── angular-locale_ne.js │ │ ├── angular-locale_nl-aw.js │ │ ├── angular-locale_nl-be.js │ │ ├── angular-locale_nl-bq.js │ │ ├── angular-locale_nl-cw.js │ │ ├── angular-locale_nl-nl.js │ │ ├── angular-locale_nl-sr.js │ │ ├── angular-locale_nl-sx.js │ │ ├── angular-locale_nl.js │ │ ├── angular-locale_nmg-cm.js │ │ ├── angular-locale_nmg.js │ │ ├── angular-locale_nn-no.js │ │ ├── angular-locale_nn.js │ │ ├── angular-locale_nnh-cm.js │ │ ├── angular-locale_nnh.js │ │ ├── angular-locale_no-no.js │ │ ├── angular-locale_no.js │ │ ├── angular-locale_nr-za.js │ │ ├── angular-locale_nr.js │ │ ├── angular-locale_nso-za.js │ │ ├── angular-locale_nso.js │ │ ├── angular-locale_nus-sd.js │ │ ├── angular-locale_nus.js │ │ ├── angular-locale_nyn-ug.js │ │ ├── angular-locale_nyn.js │ │ ├── angular-locale_om-et.js │ │ ├── angular-locale_om-ke.js │ │ ├── angular-locale_om.js │ │ ├── angular-locale_or-in.js │ │ ├── angular-locale_or.js │ │ ├── angular-locale_os-ge.js │ │ ├── angular-locale_os-ru.js │ │ ├── angular-locale_os.js │ │ ├── angular-locale_pa-arab-pk.js │ │ ├── angular-locale_pa-arab.js │ │ ├── angular-locale_pa-guru-in.js │ │ ├── angular-locale_pa-guru.js │ │ ├── angular-locale_pa.js │ │ ├── angular-locale_pl-pl.js │ │ ├── angular-locale_pl.js │ │ ├── angular-locale_ps-af.js │ │ ├── angular-locale_ps.js │ │ ├── angular-locale_pt-ao.js │ │ ├── angular-locale_pt-br.js │ │ ├── angular-locale_pt-cv.js │ │ ├── angular-locale_pt-gw.js │ │ ├── angular-locale_pt-mo.js │ │ ├── angular-locale_pt-mz.js │ │ ├── angular-locale_pt-pt.js │ │ ├── angular-locale_pt-st.js │ │ ├── angular-locale_pt-tl.js │ │ ├── angular-locale_pt.js │ │ ├── angular-locale_qu-bo.js │ │ ├── angular-locale_qu-ec.js │ │ ├── angular-locale_qu-pe.js │ │ ├── angular-locale_qu.js │ │ ├── angular-locale_rm-ch.js │ │ ├── angular-locale_rm.js │ │ ├── angular-locale_rn-bi.js │ │ ├── angular-locale_rn.js │ │ ├── angular-locale_ro-md.js │ │ ├── angular-locale_ro-ro.js │ │ ├── angular-locale_ro.js │ │ ├── angular-locale_rof-tz.js │ │ ├── angular-locale_rof.js │ │ ├── angular-locale_ru-by.js │ │ ├── angular-locale_ru-kg.js │ │ ├── angular-locale_ru-kz.js │ │ ├── angular-locale_ru-md.js │ │ ├── angular-locale_ru-ru.js │ │ ├── angular-locale_ru-ua.js │ │ ├── angular-locale_ru.js │ │ ├── angular-locale_rw-rw.js │ │ ├── angular-locale_rw.js │ │ ├── angular-locale_rwk-tz.js │ │ ├── angular-locale_rwk.js │ │ ├── angular-locale_sah-ru.js │ │ ├── angular-locale_sah.js │ │ ├── angular-locale_saq-ke.js │ │ ├── angular-locale_saq.js │ │ ├── angular-locale_sbp-tz.js │ │ ├── angular-locale_sbp.js │ │ ├── angular-locale_se-fi.js │ │ ├── angular-locale_se-no.js │ │ ├── angular-locale_se-se.js │ │ ├── angular-locale_se.js │ │ ├── angular-locale_seh-mz.js │ │ ├── angular-locale_seh.js │ │ ├── angular-locale_ses-ml.js │ │ ├── angular-locale_ses.js │ │ ├── angular-locale_sg-cf.js │ │ ├── angular-locale_sg.js │ │ ├── angular-locale_shi-latn-ma.js │ │ ├── angular-locale_shi-latn.js │ │ ├── angular-locale_shi-tfng-ma.js │ │ ├── angular-locale_shi-tfng.js │ │ ├── angular-locale_shi.js │ │ ├── angular-locale_si-lk.js │ │ ├── angular-locale_si.js │ │ ├── angular-locale_sk-sk.js │ │ ├── angular-locale_sk.js │ │ ├── angular-locale_sl-si.js │ │ ├── angular-locale_sl.js │ │ ├── angular-locale_smn-fi.js │ │ ├── angular-locale_smn.js │ │ ├── angular-locale_sn-zw.js │ │ ├── angular-locale_sn.js │ │ ├── angular-locale_so-dj.js │ │ ├── angular-locale_so-et.js │ │ ├── angular-locale_so-ke.js │ │ ├── angular-locale_so-so.js │ │ ├── angular-locale_so.js │ │ ├── angular-locale_sq-al.js │ │ ├── angular-locale_sq-mk.js │ │ ├── angular-locale_sq-xk.js │ │ ├── angular-locale_sq.js │ │ ├── angular-locale_sr-cyrl-ba.js │ │ ├── angular-locale_sr-cyrl-me.js │ │ ├── angular-locale_sr-cyrl-rs.js │ │ ├── angular-locale_sr-cyrl-xk.js │ │ ├── angular-locale_sr-cyrl.js │ │ ├── angular-locale_sr-latn-ba.js │ │ ├── angular-locale_sr-latn-me.js │ │ ├── angular-locale_sr-latn-rs.js │ │ ├── angular-locale_sr-latn-xk.js │ │ ├── angular-locale_sr-latn.js │ │ ├── angular-locale_sr.js │ │ ├── angular-locale_ss-sz.js │ │ ├── angular-locale_ss-za.js │ │ ├── angular-locale_ss.js │ │ ├── angular-locale_ssy-er.js │ │ ├── angular-locale_ssy.js │ │ ├── angular-locale_st-ls.js │ │ ├── angular-locale_st-za.js │ │ ├── angular-locale_st.js │ │ ├── angular-locale_sv-ax.js │ │ ├── angular-locale_sv-fi.js │ │ ├── angular-locale_sv-se.js │ │ ├── angular-locale_sv.js │ │ ├── angular-locale_sw-ke.js │ │ ├── angular-locale_sw-tz.js │ │ ├── angular-locale_sw-ug.js │ │ ├── angular-locale_sw.js │ │ ├── angular-locale_swc-cd.js │ │ ├── angular-locale_swc.js │ │ ├── angular-locale_ta-in.js │ │ ├── angular-locale_ta-lk.js │ │ ├── angular-locale_ta-my.js │ │ ├── angular-locale_ta-sg.js │ │ ├── angular-locale_ta.js │ │ ├── angular-locale_te-in.js │ │ ├── angular-locale_te.js │ │ ├── angular-locale_teo-ke.js │ │ ├── angular-locale_teo-ug.js │ │ ├── angular-locale_teo.js │ │ ├── angular-locale_tg-cyrl-tj.js │ │ ├── angular-locale_tg-cyrl.js │ │ ├── angular-locale_tg.js │ │ ├── angular-locale_th-th.js │ │ ├── angular-locale_th.js │ │ ├── angular-locale_ti-er.js │ │ ├── angular-locale_ti-et.js │ │ ├── angular-locale_ti.js │ │ ├── angular-locale_tig-er.js │ │ ├── angular-locale_tig.js │ │ ├── angular-locale_tl.js │ │ ├── angular-locale_tn-bw.js │ │ ├── angular-locale_tn-za.js │ │ ├── angular-locale_tn.js │ │ ├── angular-locale_to-to.js │ │ ├── angular-locale_to.js │ │ ├── angular-locale_tr-cy.js │ │ ├── angular-locale_tr-tr.js │ │ ├── angular-locale_tr.js │ │ ├── angular-locale_ts-za.js │ │ ├── angular-locale_ts.js │ │ ├── angular-locale_twq-ne.js │ │ ├── angular-locale_twq.js │ │ ├── angular-locale_tzm-latn-ma.js │ │ ├── angular-locale_tzm-latn.js │ │ ├── angular-locale_tzm.js │ │ ├── angular-locale_ug-arab-cn.js │ │ ├── angular-locale_ug-arab.js │ │ ├── angular-locale_ug.js │ │ ├── angular-locale_uk-ua.js │ │ ├── angular-locale_uk.js │ │ ├── angular-locale_ur-in.js │ │ ├── angular-locale_ur-pk.js │ │ ├── angular-locale_ur.js │ │ ├── angular-locale_uz-arab-af.js │ │ ├── angular-locale_uz-arab.js │ │ ├── angular-locale_uz-cyrl-uz.js │ │ ├── angular-locale_uz-cyrl.js │ │ ├── angular-locale_uz-latn-uz.js │ │ ├── angular-locale_uz-latn.js │ │ ├── angular-locale_uz.js │ │ ├── angular-locale_vai-latn-lr.js │ │ ├── angular-locale_vai-latn.js │ │ ├── angular-locale_vai-vaii-lr.js │ │ ├── angular-locale_vai-vaii.js │ │ ├── angular-locale_vai.js │ │ ├── angular-locale_ve-za.js │ │ ├── angular-locale_ve.js │ │ ├── angular-locale_vi-vn.js │ │ ├── angular-locale_vi.js │ │ ├── angular-locale_vo-001.js │ │ ├── angular-locale_vo.js │ │ ├── angular-locale_vun-tz.js │ │ ├── angular-locale_vun.js │ │ ├── angular-locale_wae-ch.js │ │ ├── angular-locale_wae.js │ │ ├── angular-locale_wal-et.js │ │ ├── angular-locale_wal.js │ │ ├── angular-locale_xh-za.js │ │ ├── angular-locale_xh.js │ │ ├── angular-locale_xog-ug.js │ │ ├── angular-locale_xog.js │ │ ├── angular-locale_yav-cm.js │ │ ├── angular-locale_yav.js │ │ ├── angular-locale_yi-001.js │ │ ├── angular-locale_yi.js │ │ ├── angular-locale_yo-bj.js │ │ ├── angular-locale_yo-ng.js │ │ ├── angular-locale_yo.js │ │ ├── angular-locale_zgh-ma.js │ │ ├── angular-locale_zgh.js │ │ ├── angular-locale_zh-cn.js │ │ ├── angular-locale_zh-hans-cn.js │ │ ├── angular-locale_zh-hans-hk.js │ │ ├── angular-locale_zh-hans-mo.js │ │ ├── angular-locale_zh-hans-sg.js │ │ ├── angular-locale_zh-hans.js │ │ ├── angular-locale_zh-hant-hk.js │ │ ├── angular-locale_zh-hant-mo.js │ │ ├── angular-locale_zh-hant-tw.js │ │ ├── angular-locale_zh-hant.js │ │ ├── angular-locale_zh-hk.js │ │ ├── angular-locale_zh-tw.js │ │ ├── angular-locale_zh.js │ │ ├── angular-locale_zu-za.js │ │ └── angular-locale_zu.js │ ├── jquery-1.9.1.intellisense.js │ ├── jquery-1.9.1.js │ ├── jquery-1.9.1.min.js │ ├── jquery-1.9.1.min.map │ ├── npm.js │ └── version.json ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── index.html └── packages.config └── ContactsList.MVC ├── App_Start ├── BundleConfig.cs ├── FilterConfig.cs └── RouteConfig.cs ├── ContactsList.API ├── Contacts.cs ├── ContactsExtensions.cs ├── ContactsListAPI.cs ├── ContactsListAPIAppServiceExtensions.cs ├── ContactsListAPIExtensions.cs ├── IContacts.cs ├── IContactsListAPI.cs └── Models │ ├── Contact.cs │ └── ContactCollection.cs ├── ContactsList.MVC.csproj ├── Content ├── Site.css ├── bootstrap.css └── bootstrap.min.css ├── Controllers ├── ContactsController.cs └── HomeController.cs ├── Global.asax ├── Global.asax.cs ├── Project_Readme.html ├── Properties └── AssemblyInfo.cs ├── Scripts ├── _references.js ├── bootstrap.js ├── bootstrap.min.js ├── jquery-1.10.2.intellisense.js ├── jquery-1.10.2.js ├── jquery-1.10.2.min.js ├── jquery-1.10.2.min.map ├── jquery.validate-vsdoc.js ├── jquery.validate.js ├── jquery.validate.min.js ├── jquery.validate.unobtrusive.js ├── jquery.validate.unobtrusive.min.js ├── modernizr-2.6.2.js ├── respond.js └── respond.min.js ├── Views ├── Contacts │ ├── Create.cshtml │ ├── Delete.cshtml │ ├── Details.cshtml │ ├── Edit.cshtml │ └── Index.cshtml ├── Home │ ├── About.cshtml │ ├── Contact.cshtml │ └── Index.cshtml ├── Shared │ ├── Error.cshtml │ └── _Layout.cshtml ├── Web.config └── _ViewStart.cshtml ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── favicon.ico ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff └── packages.config /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Azure samples 2 | 3 | Thank you for your interest in contributing to Azure samples! 4 | 5 | ## Ways to contribute 6 | 7 | You can contribute to [Azure samples](https://azure.microsoft.com/documentation/samples/) in a few different ways: 8 | 9 | - Submit feedback on [this sample page](https://azure.microsoft.com/documentation/samples/app-service-api-dotnet-contact-list/) whether it was helpful or not. 10 | - Submit issues through [issue tracker](https://github.com/Azure-Samples/app-service-api-dotnet-contact-list/issues) on GitHub. We are actively monitoring the issues and improving our samples. 11 | - If you wish to make code changes to samples, or contribute something new, please follow the [GitHub Forks / Pull requests model](https://help.github.com/articles/fork-a-repo/): Fork the sample repo, make the change and propose it back by submitting a pull request. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Microsoft Corporation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | --- 2 | services: app-service\api 3 | platforms: dotnet 4 | author: bradygaster 5 | --- 6 | 7 | # Contact List Azure API app sample # 8 | 9 | Contact List is a simple application that shows how to consume an [Azure App Service API app](http://azure.microsoft.com/en-us/documentation/articles/app-service-api-apps-why-best-platform/ "What are API Apps?") from AngularJS and ASP.NET MVC 5 clients. 10 | 11 | For a step-by-step tutorial that guides you through creating, deploying, and consuming API apps and shows how to handle authentication as well, see [Get started with API Apps and ASP.NET in Azure App Service](https://azure.microsoft.com/documentation/articles/app-service-api-dotnet-get-started/). 12 | -------------------------------------------------------------------------------- /src/ContactList.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ContactsList.Angular", "ContactsList.Angular\ContactsList.Angular.csproj", "{19451DDD-3325-4542-B017-D1BB483C51DA}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ContactsList.MVC", "ContactsList.MVC\ContactsList.MVC.csproj", "{40442A63-AD89-4901-B9C8-6B2278344679}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ContactsList.API", "ContactsList.API\ContactsList.API.csproj", "{22F0D517-5574-4282-B458-8D0223C0CCAE}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {19451DDD-3325-4542-B017-D1BB483C51DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {19451DDD-3325-4542-B017-D1BB483C51DA}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {19451DDD-3325-4542-B017-D1BB483C51DA}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {19451DDD-3325-4542-B017-D1BB483C51DA}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {40442A63-AD89-4901-B9C8-6B2278344679}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {40442A63-AD89-4901-B9C8-6B2278344679}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {40442A63-AD89-4901-B9C8-6B2278344679}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {40442A63-AD89-4901-B9C8-6B2278344679}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {22F0D517-5574-4282-B458-8D0223C0CCAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {22F0D517-5574-4282-B458-8D0223C0CCAE}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {22F0D517-5574-4282-B458-8D0223C0CCAE}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {22F0D517-5574-4282-B458-8D0223C0CCAE}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | EndGlobal 35 | -------------------------------------------------------------------------------- /src/ContactsList.API/App_Start/GenericStorage.cs: -------------------------------------------------------------------------------- 1 | using ContactsList.API.Models; 2 | using Newtonsoft.Json; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Reflection; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | 11 | namespace ContactsList.API 12 | { 13 | public class GenericStorage 14 | { 15 | private string _filePath; 16 | 17 | public GenericStorage() 18 | { 19 | var webAppsHome = Environment.GetEnvironmentVariable("HOME")?.ToString(); 20 | if (String.IsNullOrEmpty(webAppsHome)) 21 | { 22 | _filePath = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) + "\\"; 23 | } 24 | else 25 | { 26 | _filePath = webAppsHome + "\\site\\wwwroot\\"; 27 | } 28 | } 29 | 30 | public async Task> Save(IEnumerable target, string filename) 31 | { 32 | var json = JsonConvert.SerializeObject(target); 33 | File.WriteAllText(_filePath + filename, json); 34 | return target; 35 | } 36 | 37 | public async Task> Get(string filename) 38 | { 39 | var contactsText = String.Empty; 40 | if (File.Exists(_filePath + filename)) 41 | { 42 | contactsText = File.ReadAllText(_filePath + filename); 43 | } 44 | 45 | var contacts = JsonConvert.DeserializeObject(contactsText); 46 | return contacts; 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/ContactsList.API/App_Start/WebApiConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web.Http; 5 | 6 | namespace ContactsList.API 7 | { 8 | public static class WebApiConfig 9 | { 10 | public static void Register(HttpConfiguration config) 11 | { 12 | // Web API configuration and services 13 | 14 | // Uncomment the following line to control CORS by using Web API code 15 | //config.EnableCors(); 16 | 17 | // Web API routes 18 | config.MapHttpAttributeRoutes(); 19 | 20 | config.Routes.MapHttpRoute( 21 | name: "DefaultApi", 22 | routeTemplate: "api/{controller}/{id}", 23 | defaults: new { id = RouteParameter.Optional } 24 | ); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/ContactsList.API/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="ContactsList.API.WebApiApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /src/ContactsList.API/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Http; 6 | using System.Web.Routing; 7 | 8 | namespace ContactsList.API 9 | { 10 | public class WebApiApplication : System.Web.HttpApplication 11 | { 12 | protected void Application_Start() 13 | { 14 | GlobalConfiguration.Configure(WebApiConfig.Register); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/ContactsList.API/Models/Contact.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace ContactsList.API.Models 3 | { 4 | public class Contact 5 | { 6 | public int Id { get; set; } 7 | public string Name { get; set; } 8 | public string EmailAddress { get; set; } 9 | public string CreatedBy { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/ContactsList.API/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ContactsList.API")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ContactsList.API")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("22f0d517-5574-4282-b458-8d0223c0ccae")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /src/ContactsList.API/ServicePrincipal.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.IdentityModel.Clients.ActiveDirectory; 2 | using System.Configuration; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Web; 7 | 8 | namespace ContactsList.API 9 | { 10 | public static class ServicePrincipal 11 | { 12 | // The authority is the issuer URL of the tenant. 13 | static string authority = ConfigurationManager.AppSettings["ida:Authority"]; 14 | 15 | // The resource is the Client ID of the "data web api" AAD app. 16 | static string resource = ConfigurationManager.AppSettings["ida:Resource"]; 17 | 18 | // The Client ID of the "client" AAD app (i.e. this app). 19 | static string clientId = ConfigurationManager.AppSettings["ida:ClientId"]; 20 | 21 | // The key that was created for the "client" app (i.e. this app). 22 | static string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"]; 23 | 24 | public static AuthenticationResult GetS2SAccessTokenForProdMSA() 25 | { 26 | return GetS2SAccessToken(authority, resource, clientId, clientSecret); 27 | } 28 | 29 | 30 | /// 31 | /// Gets an application token used for service-to-service (S2S) API calls. 32 | /// 33 | static AuthenticationResult GetS2SAccessToken(string authority, string resource, string clientId, string clientSecret) 34 | { 35 | // Client credential consists of the "client" AAD web application's Client ID 36 | // and the key that was generated for the application in the AAD Azure portal extension. 37 | var clientCredential = new ClientCredential(clientId, clientSecret); 38 | 39 | // The authentication context represents the AAD directory. 40 | AuthenticationContext context = new AuthenticationContext(authority, false); 41 | 42 | // Fetch an access token from AAD. 43 | AuthenticationResult authenticationResult = context.AcquireToken( 44 | resource, 45 | clientCredential); 46 | return authenticationResult; 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /src/ContactsList.API/Web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /src/ContactsList.API/Web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /src/ContactsList.API/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ContactsList.Angular")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ContactsList.Angular")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("19451ddd-3325-4542-b017-d1bb483c51da")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/angular-cookies.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.3.15 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore", 7 | ["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular); 8 | //# sourceMappingURL=angular-cookies.min.js.map 9 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/angular-cookies.min.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version":3, 3 | "file":"angular-cookies.min.js", 4 | "lineCount":7, 5 | "mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA0BW,UA1BX,CA0BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACvEC,EAAU,EAD6D,CAEvEC,EAAc,EAFyD,CAGvEC,CAHuE,CAIvEC,EAAU,CAAA,CAJ6D,CAKvEC,EAAOV,CAAAU,KALgE,CAMvEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CASAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAKgB,CAAL,GAAaX,EAAb,CACEY,CAKA,CALQZ,CAAA,CAAQW,CAAR,CAKR,CAJKjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAIL,GAHEA,CACA,CADQ,EACR,CADaA,CACb,CAAAZ,CAAA,CAAQW,CAAR,CAAA,CAAgBC,CAElB,EAAIA,CAAJ,GAAcX,CAAA,CAAYU,CAAZ,CAAd,GACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CAFZ,CAOF,IAAIA,CAAJ,CAIE,IAAKF,CAAL,GAFAI,EAEaf,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBI,CAAA,CAAeJ,CAAf,CAAtB,GAEMN,CAAA,CAAYU,CAAA,CAAeJ,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBI,CAAA,CAAeJ,CAAf,CALpB,CAhCU,CAThB,CAEA,OAAOX,EA1BoE,CAA1D,CA1BvB,CAAAH,QAAA,CAoIW,cApIX;AAoI2B,CAAC,UAAD,CAAa,QAAQ,CAACmB,CAAD,CAAW,CAErD,MAAO,CAWLC,IAAKA,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHN,CACG,CADKI,CAAA,CAASE,CAAT,CACL,EAAQxB,CAAAyB,SAAA,CAAiBP,CAAjB,CAAR,CAAkCA,CAFxB,CAXd,CA0BLQ,IAAKA,QAAQ,CAACF,CAAD,CAAMN,CAAN,CAAa,CACxBI,CAAA,CAASE,CAAT,CAAA,CAAgBxB,CAAA2B,OAAA,CAAeT,CAAf,CADQ,CA1BrB,CAuCLU,OAAQA,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CAvCjB,CAF8C,CAAhC,CApI3B,CAnBsC,CAArC,CAAD,CAwMGzB,MAxMH,CAwMWA,MAAAC,QAxMX;", 6 | "sources":["angular-cookies.js"], 7 | "names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"] 8 | } 9 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/angular-loader.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.3.15 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(){'use strict';function d(b){return function(){var c=arguments[0],e;e="["+(b?b+":":"")+c+"] http://errors.angularjs.org/1.3.15/"+(b?b+"/":"")+c;for(c=1;c").html(a);f.forEach(a.children(), 8 | function(a){a=f.element(a);h?h.after(a):d.prepend(a);h=a;q(a)(b)});c.renderMessages(e,g)})}}}]).directive("ngMessage",["$animate",function(f){return{require:"^ngMessages",transclude:"element",terminal:!0,restrict:"AE",link:function(k,l,b,d,a){for(var c,g,e=l[0],n=e.parentNode,h=0,p=0;h= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_sq-al.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "paradite", 8 | "pasdite" 9 | ], 10 | "DAY": [ 11 | "e diel", 12 | "e h\u00ebn\u00eb", 13 | "e mart\u00eb", 14 | "e m\u00ebrkur\u00eb", 15 | "e enjte", 16 | "e premte", 17 | "e shtun\u00eb" 18 | ], 19 | "ERANAMES": [ 20 | "para er\u00ebs s\u00eb re", 21 | "er\u00ebs s\u00eb re" 22 | ], 23 | "ERAS": [ 24 | "p.e.r.", 25 | "e.r." 26 | ], 27 | "MONTH": [ 28 | "janar", 29 | "shkurt", 30 | "mars", 31 | "prill", 32 | "maj", 33 | "qershor", 34 | "korrik", 35 | "gusht", 36 | "shtator", 37 | "tetor", 38 | "n\u00ebntor", 39 | "dhjetor" 40 | ], 41 | "SHORTDAY": [ 42 | "Die", 43 | "H\u00ebn", 44 | "Mar", 45 | "M\u00ebr", 46 | "Enj", 47 | "Pre", 48 | "Sht" 49 | ], 50 | "SHORTMONTH": [ 51 | "Jan", 52 | "Shk", 53 | "Mar", 54 | "Pri", 55 | "Maj", 56 | "Qer", 57 | "Kor", 58 | "Gsh", 59 | "Sht", 60 | "Tet", 61 | "N\u00ebn", 62 | "Dhj" 63 | ], 64 | "fullDate": "EEEE, d MMMM y", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d.M.yy HH:mm", 70 | "shortDate": "d.M.yy", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "Lek", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "sq-al", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_sq-mk.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "paradite", 8 | "pasdite" 9 | ], 10 | "DAY": [ 11 | "e diel", 12 | "e h\u00ebn\u00eb", 13 | "e mart\u00eb", 14 | "e m\u00ebrkur\u00eb", 15 | "e enjte", 16 | "e premte", 17 | "e shtun\u00eb" 18 | ], 19 | "ERANAMES": [ 20 | "para er\u00ebs s\u00eb re", 21 | "er\u00ebs s\u00eb re" 22 | ], 23 | "ERAS": [ 24 | "p.e.r.", 25 | "e.r." 26 | ], 27 | "MONTH": [ 28 | "janar", 29 | "shkurt", 30 | "mars", 31 | "prill", 32 | "maj", 33 | "qershor", 34 | "korrik", 35 | "gusht", 36 | "shtator", 37 | "tetor", 38 | "n\u00ebntor", 39 | "dhjetor" 40 | ], 41 | "SHORTDAY": [ 42 | "Die", 43 | "H\u00ebn", 44 | "Mar", 45 | "M\u00ebr", 46 | "Enj", 47 | "Pre", 48 | "Sht" 49 | ], 50 | "SHORTMONTH": [ 51 | "Jan", 52 | "Shk", 53 | "Mar", 54 | "Pri", 55 | "Maj", 56 | "Qer", 57 | "Kor", 58 | "Gsh", 59 | "Sht", 60 | "Tet", 61 | "N\u00ebn", 62 | "Dhj" 63 | ], 64 | "fullDate": "EEEE, d MMMM y", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d.M.yy HH:mm", 70 | "shortDate": "d.M.yy", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "din", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "sq-mk", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_sq-xk.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "paradite", 8 | "pasdite" 9 | ], 10 | "DAY": [ 11 | "e diel", 12 | "e h\u00ebn\u00eb", 13 | "e mart\u00eb", 14 | "e m\u00ebrkur\u00eb", 15 | "e enjte", 16 | "e premte", 17 | "e shtun\u00eb" 18 | ], 19 | "ERANAMES": [ 20 | "para er\u00ebs s\u00eb re", 21 | "er\u00ebs s\u00eb re" 22 | ], 23 | "ERAS": [ 24 | "p.e.r.", 25 | "e.r." 26 | ], 27 | "MONTH": [ 28 | "janar", 29 | "shkurt", 30 | "mars", 31 | "prill", 32 | "maj", 33 | "qershor", 34 | "korrik", 35 | "gusht", 36 | "shtator", 37 | "tetor", 38 | "n\u00ebntor", 39 | "dhjetor" 40 | ], 41 | "SHORTDAY": [ 42 | "Die", 43 | "H\u00ebn", 44 | "Mar", 45 | "M\u00ebr", 46 | "Enj", 47 | "Pre", 48 | "Sht" 49 | ], 50 | "SHORTMONTH": [ 51 | "Jan", 52 | "Shk", 53 | "Mar", 54 | "Pri", 55 | "Maj", 56 | "Qer", 57 | "Kor", 58 | "Gsh", 59 | "Sht", 60 | "Tet", 61 | "N\u00ebn", 62 | "Dhj" 63 | ], 64 | "fullDate": "EEEE, d MMMM y", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d.M.yy HH:mm", 70 | "shortDate": "d.M.yy", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "\u20ac", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "sq-xk", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_sq.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "paradite", 8 | "pasdite" 9 | ], 10 | "DAY": [ 11 | "e diel", 12 | "e h\u00ebn\u00eb", 13 | "e mart\u00eb", 14 | "e m\u00ebrkur\u00eb", 15 | "e enjte", 16 | "e premte", 17 | "e shtun\u00eb" 18 | ], 19 | "ERANAMES": [ 20 | "para er\u00ebs s\u00eb re", 21 | "er\u00ebs s\u00eb re" 22 | ], 23 | "ERAS": [ 24 | "p.e.r.", 25 | "e.r." 26 | ], 27 | "MONTH": [ 28 | "janar", 29 | "shkurt", 30 | "mars", 31 | "prill", 32 | "maj", 33 | "qershor", 34 | "korrik", 35 | "gusht", 36 | "shtator", 37 | "tetor", 38 | "n\u00ebntor", 39 | "dhjetor" 40 | ], 41 | "SHORTDAY": [ 42 | "Die", 43 | "H\u00ebn", 44 | "Mar", 45 | "M\u00ebr", 46 | "Enj", 47 | "Pre", 48 | "Sht" 49 | ], 50 | "SHORTMONTH": [ 51 | "Jan", 52 | "Shk", 53 | "Mar", 54 | "Pri", 55 | "Maj", 56 | "Qer", 57 | "Kor", 58 | "Gsh", 59 | "Sht", 60 | "Tet", 61 | "N\u00ebn", 62 | "Dhj" 63 | ], 64 | "fullDate": "EEEE, d MMMM y", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d.M.yy HH:mm", 70 | "shortDate": "d.M.yy", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "Lek", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "sq", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_tr-cy.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "\u00d6\u00d6", 8 | "\u00d6S" 9 | ], 10 | "DAY": [ 11 | "Pazar", 12 | "Pazartesi", 13 | "Sal\u0131", 14 | "\u00c7ar\u015famba", 15 | "Per\u015fembe", 16 | "Cuma", 17 | "Cumartesi" 18 | ], 19 | "ERANAMES": [ 20 | "Milattan \u00d6nce", 21 | "Milattan Sonra" 22 | ], 23 | "ERAS": [ 24 | "M\u00d6", 25 | "MS" 26 | ], 27 | "MONTH": [ 28 | "Ocak", 29 | "\u015eubat", 30 | "Mart", 31 | "Nisan", 32 | "May\u0131s", 33 | "Haziran", 34 | "Temmuz", 35 | "A\u011fustos", 36 | "Eyl\u00fcl", 37 | "Ekim", 38 | "Kas\u0131m", 39 | "Aral\u0131k" 40 | ], 41 | "SHORTDAY": [ 42 | "Paz", 43 | "Pzt", 44 | "Sal", 45 | "\u00c7ar", 46 | "Per", 47 | "Cum", 48 | "Cmt" 49 | ], 50 | "SHORTMONTH": [ 51 | "Oca", 52 | "\u015eub", 53 | "Mar", 54 | "Nis", 55 | "May", 56 | "Haz", 57 | "Tem", 58 | "A\u011fu", 59 | "Eyl", 60 | "Eki", 61 | "Kas", 62 | "Ara" 63 | ], 64 | "fullDate": "d MMMM y EEEE", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d MM y HH:mm", 70 | "shortDate": "d MM y", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "\u20ac", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": ".", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "tr-cy", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_tr-tr.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "\u00d6\u00d6", 8 | "\u00d6S" 9 | ], 10 | "DAY": [ 11 | "Pazar", 12 | "Pazartesi", 13 | "Sal\u0131", 14 | "\u00c7ar\u015famba", 15 | "Per\u015fembe", 16 | "Cuma", 17 | "Cumartesi" 18 | ], 19 | "ERANAMES": [ 20 | "Milattan \u00d6nce", 21 | "Milattan Sonra" 22 | ], 23 | "ERAS": [ 24 | "M\u00d6", 25 | "MS" 26 | ], 27 | "MONTH": [ 28 | "Ocak", 29 | "\u015eubat", 30 | "Mart", 31 | "Nisan", 32 | "May\u0131s", 33 | "Haziran", 34 | "Temmuz", 35 | "A\u011fustos", 36 | "Eyl\u00fcl", 37 | "Ekim", 38 | "Kas\u0131m", 39 | "Aral\u0131k" 40 | ], 41 | "SHORTDAY": [ 42 | "Paz", 43 | "Pzt", 44 | "Sal", 45 | "\u00c7ar", 46 | "Per", 47 | "Cum", 48 | "Cmt" 49 | ], 50 | "SHORTMONTH": [ 51 | "Oca", 52 | "\u015eub", 53 | "Mar", 54 | "Nis", 55 | "May", 56 | "Haz", 57 | "Tem", 58 | "A\u011fu", 59 | "Eyl", 60 | "Eki", 61 | "Kas", 62 | "Ara" 63 | ], 64 | "fullDate": "d MMMM y EEEE", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d MM y HH:mm", 70 | "shortDate": "d MM y", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "TL", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": ".", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "tr-tr", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_tr.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "\u00d6\u00d6", 8 | "\u00d6S" 9 | ], 10 | "DAY": [ 11 | "Pazar", 12 | "Pazartesi", 13 | "Sal\u0131", 14 | "\u00c7ar\u015famba", 15 | "Per\u015fembe", 16 | "Cuma", 17 | "Cumartesi" 18 | ], 19 | "ERANAMES": [ 20 | "Milattan \u00d6nce", 21 | "Milattan Sonra" 22 | ], 23 | "ERAS": [ 24 | "M\u00d6", 25 | "MS" 26 | ], 27 | "MONTH": [ 28 | "Ocak", 29 | "\u015eubat", 30 | "Mart", 31 | "Nisan", 32 | "May\u0131s", 33 | "Haziran", 34 | "Temmuz", 35 | "A\u011fustos", 36 | "Eyl\u00fcl", 37 | "Ekim", 38 | "Kas\u0131m", 39 | "Aral\u0131k" 40 | ], 41 | "SHORTDAY": [ 42 | "Paz", 43 | "Pzt", 44 | "Sal", 45 | "\u00c7ar", 46 | "Per", 47 | "Cum", 48 | "Cmt" 49 | ], 50 | "SHORTMONTH": [ 51 | "Oca", 52 | "\u015eub", 53 | "Mar", 54 | "Nis", 55 | "May", 56 | "Haz", 57 | "Tem", 58 | "A\u011fu", 59 | "Eyl", 60 | "Eki", 61 | "Kas", 62 | "Ara" 63 | ], 64 | "fullDate": "d MMMM y EEEE", 65 | "longDate": "d MMMM y", 66 | "medium": "d MMM y HH:mm:ss", 67 | "mediumDate": "d MMM y", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "d MM y HH:mm", 70 | "shortDate": "d MM y", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "TL", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": ".", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "-", 96 | "negSuf": "\u00a0\u00a4", 97 | "posPre": "", 98 | "posSuf": "\u00a0\u00a4" 99 | } 100 | ] 101 | }, 102 | "id": "tr", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_uz-latn-uz.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "TO", 8 | "TK" 9 | ], 10 | "DAY": [ 11 | "yakshanba", 12 | "dushanba", 13 | "seshanba", 14 | "chorshanba", 15 | "payshanba", 16 | "juma", 17 | "shanba" 18 | ], 19 | "ERANAMES": [ 20 | "M.A.", 21 | "E" 22 | ], 23 | "ERAS": [ 24 | "M.A.", 25 | "E" 26 | ], 27 | "MONTH": [ 28 | "Yanvar", 29 | "Fevral", 30 | "Mart", 31 | "Aprel", 32 | "May", 33 | "Iyun", 34 | "Iyul", 35 | "Avgust", 36 | "Sentabr", 37 | "Oktabr", 38 | "Noyabr", 39 | "Dekabr" 40 | ], 41 | "SHORTDAY": [ 42 | "Yaksh", 43 | "Dush", 44 | "Sesh", 45 | "Chor", 46 | "Pay", 47 | "Jum", 48 | "Shan" 49 | ], 50 | "SHORTMONTH": [ 51 | "Yanv", 52 | "Fev", 53 | "Mar", 54 | "Apr", 55 | "May", 56 | "Iyun", 57 | "Iyul", 58 | "Avg", 59 | "Sen", 60 | "Okt", 61 | "Noya", 62 | "Dek" 63 | ], 64 | "fullDate": "EEEE, y MMMM dd", 65 | "longDate": "y MMMM d", 66 | "medium": "y MMM d HH:mm:ss", 67 | "mediumDate": "y MMM d", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "yy/MM/dd HH:mm", 70 | "shortDate": "yy/MM/dd", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "so\u02bcm", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "\u00a4\u00a0-", 96 | "negSuf": "", 97 | "posPre": "\u00a4\u00a0", 98 | "posSuf": "" 99 | } 100 | ] 101 | }, 102 | "id": "uz-latn-uz", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_uz-latn.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "TO", 8 | "TK" 9 | ], 10 | "DAY": [ 11 | "yakshanba", 12 | "dushanba", 13 | "seshanba", 14 | "chorshanba", 15 | "payshanba", 16 | "juma", 17 | "shanba" 18 | ], 19 | "ERANAMES": [ 20 | "M.A.", 21 | "E" 22 | ], 23 | "ERAS": [ 24 | "M.A.", 25 | "E" 26 | ], 27 | "MONTH": [ 28 | "Yanvar", 29 | "Fevral", 30 | "Mart", 31 | "Aprel", 32 | "May", 33 | "Iyun", 34 | "Iyul", 35 | "Avgust", 36 | "Sentabr", 37 | "Oktabr", 38 | "Noyabr", 39 | "Dekabr" 40 | ], 41 | "SHORTDAY": [ 42 | "Yaksh", 43 | "Dush", 44 | "Sesh", 45 | "Chor", 46 | "Pay", 47 | "Jum", 48 | "Shan" 49 | ], 50 | "SHORTMONTH": [ 51 | "Yanv", 52 | "Fev", 53 | "Mar", 54 | "Apr", 55 | "May", 56 | "Iyun", 57 | "Iyul", 58 | "Avg", 59 | "Sen", 60 | "Okt", 61 | "Noya", 62 | "Dek" 63 | ], 64 | "fullDate": "EEEE, y MMMM dd", 65 | "longDate": "y MMMM d", 66 | "medium": "y MMM d HH:mm:ss", 67 | "mediumDate": "y MMM d", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "yy/MM/dd HH:mm", 70 | "shortDate": "yy/MM/dd", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "\u20ac", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "\u00a4\u00a0-", 96 | "negSuf": "", 97 | "posPre": "\u00a4\u00a0", 98 | "posSuf": "" 99 | } 100 | ] 101 | }, 102 | "id": "uz-latn", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_uz.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "TO", 8 | "TK" 9 | ], 10 | "DAY": [ 11 | "yakshanba", 12 | "dushanba", 13 | "seshanba", 14 | "chorshanba", 15 | "payshanba", 16 | "juma", 17 | "shanba" 18 | ], 19 | "ERANAMES": [ 20 | "M.A.", 21 | "E" 22 | ], 23 | "ERAS": [ 24 | "M.A.", 25 | "E" 26 | ], 27 | "MONTH": [ 28 | "Yanvar", 29 | "Fevral", 30 | "Mart", 31 | "Aprel", 32 | "May", 33 | "Iyun", 34 | "Iyul", 35 | "Avgust", 36 | "Sentabr", 37 | "Oktabr", 38 | "Noyabr", 39 | "Dekabr" 40 | ], 41 | "SHORTDAY": [ 42 | "Yaksh", 43 | "Dush", 44 | "Sesh", 45 | "Chor", 46 | "Pay", 47 | "Jum", 48 | "Shan" 49 | ], 50 | "SHORTMONTH": [ 51 | "Yanv", 52 | "Fev", 53 | "Mar", 54 | "Apr", 55 | "May", 56 | "Iyun", 57 | "Iyul", 58 | "Avg", 59 | "Sen", 60 | "Okt", 61 | "Noya", 62 | "Dek" 63 | ], 64 | "fullDate": "EEEE, y MMMM dd", 65 | "longDate": "y MMMM d", 66 | "medium": "y MMM d HH:mm:ss", 67 | "mediumDate": "y MMM d", 68 | "mediumTime": "HH:mm:ss", 69 | "short": "yy/MM/dd HH:mm", 70 | "shortDate": "yy/MM/dd", 71 | "shortTime": "HH:mm" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "so\u02bcm", 75 | "DECIMAL_SEP": ",", 76 | "GROUP_SEP": "\u00a0", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "\u00a4\u00a0-", 96 | "negSuf": "", 97 | "posPre": "\u00a4\u00a0", 98 | "posSuf": "" 99 | } 100 | ] 101 | }, 102 | "id": "uz", 103 | "pluralCat": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_zu-za.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "Ekuseni", 8 | "Ntambama" 9 | ], 10 | "DAY": [ 11 | "Sonto", 12 | "Msombuluko", 13 | "Lwesibili", 14 | "Lwesithathu", 15 | "Lwesine", 16 | "Lwesihlanu", 17 | "Mgqibelo" 18 | ], 19 | "ERANAMES": [ 20 | "BC", 21 | "AD" 22 | ], 23 | "ERAS": [ 24 | "BC", 25 | "AD" 26 | ], 27 | "MONTH": [ 28 | "Januwari", 29 | "Februwari", 30 | "Mashi", 31 | "Apreli", 32 | "Meyi", 33 | "Juni", 34 | "Julayi", 35 | "Agasti", 36 | "Septhemba", 37 | "Okthoba", 38 | "Novemba", 39 | "Disemba" 40 | ], 41 | "SHORTDAY": [ 42 | "Son", 43 | "Mso", 44 | "Bil", 45 | "Tha", 46 | "Sin", 47 | "Hla", 48 | "Mgq" 49 | ], 50 | "SHORTMONTH": [ 51 | "Jan", 52 | "Feb", 53 | "Mas", 54 | "Apr", 55 | "Mey", 56 | "Jun", 57 | "Jul", 58 | "Aga", 59 | "Sep", 60 | "Okt", 61 | "Nov", 62 | "Dis" 63 | ], 64 | "fullDate": "EEEE, MMMM d, y", 65 | "longDate": "MMMM d, y", 66 | "medium": "MMM d, y h:mm:ss a", 67 | "mediumDate": "MMM d, y", 68 | "mediumTime": "h:mm:ss a", 69 | "short": "M/d/yy h:mm a", 70 | "shortDate": "M/d/yy", 71 | "shortTime": "h:mm a" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "R", 75 | "DECIMAL_SEP": ".", 76 | "GROUP_SEP": ",", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "\u00a4-", 96 | "negSuf": "", 97 | "posPre": "\u00a4", 98 | "posSuf": "" 99 | } 100 | ] 101 | }, 102 | "id": "zu-za", 103 | "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/i18n/angular-locale_zu.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | angular.module("ngLocale", [], ["$provide", function($provide) { 3 | var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; 4 | $provide.value("$locale", { 5 | "DATETIME_FORMATS": { 6 | "AMPMS": [ 7 | "Ekuseni", 8 | "Ntambama" 9 | ], 10 | "DAY": [ 11 | "Sonto", 12 | "Msombuluko", 13 | "Lwesibili", 14 | "Lwesithathu", 15 | "Lwesine", 16 | "Lwesihlanu", 17 | "Mgqibelo" 18 | ], 19 | "ERANAMES": [ 20 | "BC", 21 | "AD" 22 | ], 23 | "ERAS": [ 24 | "BC", 25 | "AD" 26 | ], 27 | "MONTH": [ 28 | "Januwari", 29 | "Februwari", 30 | "Mashi", 31 | "Apreli", 32 | "Meyi", 33 | "Juni", 34 | "Julayi", 35 | "Agasti", 36 | "Septhemba", 37 | "Okthoba", 38 | "Novemba", 39 | "Disemba" 40 | ], 41 | "SHORTDAY": [ 42 | "Son", 43 | "Mso", 44 | "Bil", 45 | "Tha", 46 | "Sin", 47 | "Hla", 48 | "Mgq" 49 | ], 50 | "SHORTMONTH": [ 51 | "Jan", 52 | "Feb", 53 | "Mas", 54 | "Apr", 55 | "Mey", 56 | "Jun", 57 | "Jul", 58 | "Aga", 59 | "Sep", 60 | "Okt", 61 | "Nov", 62 | "Dis" 63 | ], 64 | "fullDate": "EEEE, MMMM d, y", 65 | "longDate": "MMMM d, y", 66 | "medium": "MMM d, y h:mm:ss a", 67 | "mediumDate": "MMM d, y", 68 | "mediumTime": "h:mm:ss a", 69 | "short": "M/d/yy h:mm a", 70 | "shortDate": "M/d/yy", 71 | "shortTime": "h:mm a" 72 | }, 73 | "NUMBER_FORMATS": { 74 | "CURRENCY_SYM": "R", 75 | "DECIMAL_SEP": ".", 76 | "GROUP_SEP": ",", 77 | "PATTERNS": [ 78 | { 79 | "gSize": 3, 80 | "lgSize": 3, 81 | "maxFrac": 3, 82 | "minFrac": 0, 83 | "minInt": 1, 84 | "negPre": "-", 85 | "negSuf": "", 86 | "posPre": "", 87 | "posSuf": "" 88 | }, 89 | { 90 | "gSize": 3, 91 | "lgSize": 3, 92 | "maxFrac": 2, 93 | "minFrac": 2, 94 | "minInt": 1, 95 | "negPre": "\u00a4-", 96 | "negSuf": "", 97 | "posPre": "\u00a4", 98 | "posSuf": "" 99 | } 100 | ] 101 | }, 102 | "id": "zu", 103 | "pluralCat": function(n, opt_precision) { var i = n | 0; if (i == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} 104 | }); 105 | }]); 106 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/ContactsList.Angular/Scripts/version.json: -------------------------------------------------------------------------------- 1 | {"raw":"v1.3.15","major":1,"minor":3,"patch":15,"prerelease":[],"build":[],"version":"1.3.15","codeName":"locality-filtration","full":"1.3.15","branch":"v1.3.x","cdn":{"raw":"v1.3.14","major":1,"minor":3,"patch":14,"prerelease":[],"build":[],"version":"1.3.14","docsUrl":"http://code.angularjs.org/1.3.14/docs"}} -------------------------------------------------------------------------------- /src/ContactsList.Angular/Web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/ContactsList.Angular/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/App_Start/BundleConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Optimization; 3 | 4 | namespace ContactsList.MVC 5 | { 6 | public class BundleConfig 7 | { 8 | // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 9 | public static void RegisterBundles(BundleCollection bundles) 10 | { 11 | bundles.Add(new ScriptBundle("~/bundles/jquery").Include( 12 | "~/Scripts/jquery-{version}.js")); 13 | 14 | bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( 15 | "~/Scripts/jquery.validate*")); 16 | 17 | // Use the development version of Modernizr to develop with and learn from. Then, when you're 18 | // ready for production, use the build tool at http://modernizr.com to pick only the tests you need. 19 | bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( 20 | "~/Scripts/modernizr-*")); 21 | 22 | bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( 23 | "~/Scripts/bootstrap.js", 24 | "~/Scripts/respond.js")); 25 | 26 | bundles.Add(new StyleBundle("~/Content/css").Include( 27 | "~/Content/bootstrap.css", 28 | "~/Content/site.css")); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/App_Start/FilterConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Mvc; 3 | 4 | namespace ContactsList.MVC 5 | { 6 | public class FilterConfig 7 | { 8 | public static void RegisterGlobalFilters(GlobalFilterCollection filters) 9 | { 10 | filters.Add(new HandleErrorAttribute()); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | using System.Web.Routing; 7 | 8 | namespace ContactsList.MVC 9 | { 10 | public class RouteConfig 11 | { 12 | public static void RegisterRoutes(RouteCollection routes) 13 | { 14 | routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 15 | 16 | routes.MapRoute( 17 | name: "Default", 18 | url: "{controller}/{action}/{id}", 19 | defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 20 | ); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/ContactsList.API/ContactsListAPIAppServiceExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net.Http; 3 | using Microsoft.Azure.AppService; 4 | 5 | namespace ContactsList.MVC 6 | { 7 | public static class ContactsListAPIAppServiceExtensions 8 | { 9 | public static ContactsListAPI CreateContactsListAPI(this IAppServiceClient client) 10 | { 11 | return new ContactsListAPI(client.CreateHandler()); 12 | } 13 | 14 | public static ContactsListAPI CreateContactsListAPI(this IAppServiceClient client, params DelegatingHandler[] handlers) 15 | { 16 | return new ContactsListAPI(client.CreateHandler(handlers)); 17 | } 18 | 19 | public static ContactsListAPI CreateContactsListAPI(this IAppServiceClient client, Uri uri, params DelegatingHandler[] handlers) 20 | { 21 | return new ContactsListAPI(uri, client.CreateHandler(handlers)); 22 | } 23 | 24 | public static ContactsListAPI CreateContactsListAPI(this IAppServiceClient client, HttpClientHandler rootHandler, params DelegatingHandler[] handlers) 25 | { 26 | return new ContactsListAPI(rootHandler, client.CreateHandler(handlers)); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/ContactsList.API/ContactsListAPIExtensions.cs: -------------------------------------------------------------------------------- 1 | // Code generated by Microsoft (R) AutoRest Code Generator 0.9.7.0 2 | // Changes may cause incorrect behavior and will be lost if the code is regenerated. 3 | 4 | using System; 5 | using System.Linq; 6 | using System.Threading; 7 | using System.Threading.Tasks; 8 | using ContactsList.MVC; 9 | using Microsoft.Rest; 10 | 11 | namespace ContactsList.MVC 12 | { 13 | public static partial class ContactsListAPIExtensions 14 | { 15 | /// 16 | /// Reference to the ContactsList.MVC.IContactsListAPI. 17 | /// 18 | /// 19 | /// Required. 20 | /// 21 | public static object GetContactById(this IContactsListAPI operations, int id) 22 | { 23 | return Task.Factory.StartNew((object s) => 24 | { 25 | return ((IContactsListAPI)s).GetContactByIdAsync(id); 26 | } 27 | , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); 28 | } 29 | 30 | /// 31 | /// Reference to the ContactsList.MVC.IContactsListAPI. 32 | /// 33 | /// 34 | /// Required. 35 | /// 36 | /// 37 | /// Cancellation token. 38 | /// 39 | public static async Task GetContactByIdAsync(this IContactsListAPI operations, int id, CancellationToken cancellationToken = default(System.Threading.CancellationToken)) 40 | { 41 | Microsoft.Rest.HttpOperationResponse result = await operations.GetContactByIdWithOperationResponseAsync(id, cancellationToken).ConfigureAwait(false); 42 | return result.Body; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/ContactsList.API/IContacts.cs: -------------------------------------------------------------------------------- 1 | // Code generated by Microsoft (R) AutoRest Code Generator 0.9.7.0 2 | // Changes may cause incorrect behavior and will be lost if the code is regenerated. 3 | 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Threading; 8 | using System.Threading.Tasks; 9 | using ContactsList.MVC.Models; 10 | using Microsoft.Rest; 11 | 12 | namespace ContactsList.MVC 13 | { 14 | public partial interface IContacts 15 | { 16 | /// 17 | /// Required. 18 | /// 19 | /// 20 | /// Cancellation token. 21 | /// 22 | Task> DeleteWithOperationResponseAsync(int id, CancellationToken cancellationToken = default(System.Threading.CancellationToken)); 23 | 24 | /// 25 | /// Cancellation token. 26 | /// 27 | Task>> GetWithOperationResponseAsync(CancellationToken cancellationToken = default(System.Threading.CancellationToken)); 28 | 29 | /// 30 | /// Required. 31 | /// 32 | /// 33 | /// Cancellation token. 34 | /// 35 | Task> PostWithOperationResponseAsync(Contact contact, CancellationToken cancellationToken = default(System.Threading.CancellationToken)); 36 | 37 | /// 38 | /// Required. 39 | /// 40 | /// 41 | /// Cancellation token. 42 | /// 43 | Task> PutWithOperationResponseAsync(Contact contact, CancellationToken cancellationToken = default(System.Threading.CancellationToken)); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/ContactsList.API/IContactsListAPI.cs: -------------------------------------------------------------------------------- 1 | // Code generated by Microsoft (R) AutoRest Code Generator 0.9.7.0 2 | // Changes may cause incorrect behavior and will be lost if the code is regenerated. 3 | 4 | using System; 5 | using System.Linq; 6 | using System.Threading; 7 | using System.Threading.Tasks; 8 | using ContactsList.MVC; 9 | using Microsoft.Rest; 10 | 11 | namespace ContactsList.MVC 12 | { 13 | public partial interface IContactsListAPI : IDisposable 14 | { 15 | /// 16 | /// The base URI of the service. 17 | /// 18 | Uri BaseUri 19 | { 20 | get; set; 21 | } 22 | 23 | /// 24 | /// Credentials for authenticating with the service. 25 | /// 26 | ServiceClientCredentials Credentials 27 | { 28 | get; set; 29 | } 30 | 31 | IContacts Contacts 32 | { 33 | get; 34 | } 35 | 36 | /// 37 | /// Required. 38 | /// 39 | /// 40 | /// Cancellation token. 41 | /// 42 | Task> GetContactByIdWithOperationResponseAsync(int id, CancellationToken cancellationToken = default(System.Threading.CancellationToken)); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/ContactsList.API/Models/ContactCollection.cs: -------------------------------------------------------------------------------- 1 | // Code generated by Microsoft (R) AutoRest Code Generator 0.9.7.0 2 | // Changes may cause incorrect behavior and will be lost if the code is regenerated. 3 | 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using ContactsList.MVC.Models; 8 | using Newtonsoft.Json.Linq; 9 | 10 | namespace ContactsList.MVC.Models 11 | { 12 | public static partial class ContactCollection 13 | { 14 | /// 15 | /// Deserialize the object 16 | /// 17 | public static IList DeserializeJson(JToken inputObject) 18 | { 19 | IList deserializedObject = new List(); 20 | foreach (JToken iListValue in ((JArray)inputObject)) 21 | { 22 | Contact contact = new Contact(); 23 | contact.DeserializeJson(iListValue); 24 | deserializedObject.Add(contact); 25 | } 26 | return deserializedObject; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Content/Site.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | /* Set padding to keep content from hitting the edges */ 7 | .body-content { 8 | padding-left: 15px; 9 | padding-right: 15px; 10 | } 11 | 12 | /* Override the default bootstrap behavior where horizontal description lists 13 | will truncate terms that are too long to fit in the left column 14 | */ 15 | .dl-horizontal dt { 16 | white-space: normal; 17 | } 18 | 19 | /* Set width on the form input elements since they're 100% wide by default */ 20 | input, 21 | select, 22 | textarea { 23 | max-width: 280px; 24 | } 25 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | 7 | namespace ContactsList.MVC.Controllers 8 | { 9 | public class HomeController : Controller 10 | { 11 | public ActionResult Index() 12 | { 13 | return View(); 14 | } 15 | 16 | public ActionResult About() 17 | { 18 | ViewBag.Message = "Your application description page."; 19 | 20 | return View(); 21 | } 22 | 23 | public ActionResult Contact() 24 | { 25 | ViewBag.Message = "Your contact page."; 26 | 27 | return View(); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/ContactsList.MVC/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="ContactsList.MVC.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | using System.Web.Optimization; 7 | using System.Web.Routing; 8 | 9 | namespace ContactsList.MVC 10 | { 11 | public class MvcApplication : System.Web.HttpApplication 12 | { 13 | protected void Application_Start() 14 | { 15 | AreaRegistration.RegisterAllAreas(); 16 | FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 17 | RouteConfig.RegisterRoutes(RouteTable.Routes); 18 | BundleConfig.RegisterBundles(BundleTable.Bundles); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ContactsList.MVC")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ContactsList.MVC")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("c3d2dfa8-eb52-431c-8311-b9e0235427da")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Scripts/_references.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure-Samples/app-service-api-dotnet-contact-list/3797ada8fe8191b1e2e6c7710e119ca7c8225db5/src/ContactsList.MVC/Scripts/_references.js -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Contacts/Create.cshtml: -------------------------------------------------------------------------------- 1 | @model ContactsList.MVC.Models.Contact 2 | 3 | @{ 4 | ViewBag.Title = "Create"; 5 | } 6 | 7 |

Create

8 | 9 | 10 | @using (Html.BeginForm()) 11 | { 12 | @Html.AntiForgeryToken() 13 | 14 |
15 |

Contact

16 |
17 | @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 18 |
19 | @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 20 |
21 | @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 22 | @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 23 |
24 |
25 | 26 |
27 | @Html.LabelFor(model => model.EmailAddress, htmlAttributes: new { @class = "control-label col-md-2" }) 28 |
29 | @Html.EditorFor(model => model.EmailAddress, new { htmlAttributes = new { @class = "form-control" } }) 30 | @Html.ValidationMessageFor(model => model.EmailAddress, "", new { @class = "text-danger" }) 31 |
32 |
33 | 34 |
35 |
36 | 37 |
38 |
39 |
40 | } 41 | 42 |
43 | @Html.ActionLink("Back to List", "Index") 44 |
45 | 46 | @section Scripts { 47 | @Scripts.Render("~/bundles/jqueryval") 48 | } 49 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Contacts/Delete.cshtml: -------------------------------------------------------------------------------- 1 | @model ContactsList.MVC.Models.Contact 2 | 3 | @{ 4 | ViewBag.Title = "Delete"; 5 | } 6 | 7 |

Delete

8 | 9 |

Are you sure you want to delete this?

10 |
11 |

Contact

12 |
13 |
14 |
15 | @Html.DisplayNameFor(model => model.Name) 16 |
17 | 18 |
19 | @Html.DisplayFor(model => model.Name) 20 |
21 | 22 |
23 | @Html.DisplayNameFor(model => model.EmailAddress) 24 |
25 | 26 |
27 | @Html.DisplayFor(model => model.EmailAddress) 28 |
29 | 30 |
31 | 32 | @using (Html.BeginForm()) { 33 | @Html.AntiForgeryToken() 34 | 35 |
36 | | 37 | @Html.ActionLink("Back to List", "Index") 38 |
39 | } 40 |
41 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Contacts/Details.cshtml: -------------------------------------------------------------------------------- 1 | @model ContactsList.MVC.Models.Contact 2 | 3 | @{ 4 | ViewBag.Title = "Details"; 5 | } 6 | 7 |

Details

8 | 9 |
10 |

Contact

11 |
12 |
13 |
14 | @Html.DisplayNameFor(model => model.Name) 15 |
16 | 17 |
18 | @Html.DisplayFor(model => model.Name) 19 |
20 | 21 |
22 | @Html.DisplayNameFor(model => model.EmailAddress) 23 |
24 | 25 |
26 | @Html.DisplayFor(model => model.EmailAddress) 27 |
28 | 29 |
30 |
31 |

32 | @Html.ActionLink("Edit", "Edit", new { id = Model.Id }) | 33 | @Html.ActionLink("Back to List", "Index") 34 |

35 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Contacts/Edit.cshtml: -------------------------------------------------------------------------------- 1 | @model ContactsList.MVC.Models.Contact 2 | 3 | @{ 4 | ViewBag.Title = "Edit"; 5 | } 6 | 7 |

Edit

8 | 9 | 10 | @using (Html.BeginForm()) 11 | { 12 | @Html.AntiForgeryToken() 13 | 14 |
15 |

Contact

16 |
17 | @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 18 | @Html.HiddenFor(model => model.Id) 19 | 20 |
21 | @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 22 |
23 | @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 24 | @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 25 |
26 |
27 | 28 |
29 | @Html.LabelFor(model => model.EmailAddress, htmlAttributes: new { @class = "control-label col-md-2" }) 30 |
31 | @Html.EditorFor(model => model.EmailAddress, new { htmlAttributes = new { @class = "form-control" } }) 32 | @Html.ValidationMessageFor(model => model.EmailAddress, "", new { @class = "text-danger" }) 33 |
34 |
35 | 36 |
37 |
38 | 39 |
40 |
41 |
42 | } 43 | 44 |
45 | @Html.ActionLink("Back to List", "Index") 46 |
47 | 48 | @section Scripts { 49 | @Scripts.Render("~/bundles/jqueryval") 50 | } 51 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Contacts/Index.cshtml: -------------------------------------------------------------------------------- 1 | @model IEnumerable 2 | 3 | @{ 4 | ViewBag.Title = "Index"; 5 | } 6 | 7 |

Index

8 | 9 |

10 | @Html.ActionLink("Create New", "Create") 11 |

12 | 13 | 14 | 17 | 20 | 21 | 22 | 23 | @foreach (var item in Model) { 24 | 25 | 28 | 31 | 36 | 37 | } 38 | 39 |
15 | @Html.DisplayNameFor(model => model.Name) 16 | 18 | @Html.DisplayNameFor(model => model.EmailAddress) 19 |
26 | @Html.DisplayFor(modelItem => item.Name) 27 | 29 | @Html.DisplayFor(modelItem => item.EmailAddress) 30 | 32 | @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | 33 | @Html.ActionLink("Details", "Details", new { id=item.Id }) | 34 | @Html.ActionLink("Delete", "Delete", new { id=item.Id }) 35 |
40 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Home/About.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "About"; 3 | } 4 |

@ViewBag.Title.

5 |

@ViewBag.Message

6 | 7 |

Use this area to provide additional information.

8 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Home/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Contact"; 3 | } 4 |

@ViewBag.Title.

5 |

@ViewBag.Message

6 | 7 |
8 | One Microsoft Way
9 | Redmond, WA 98052-6399
10 | P: 11 | 425.555.0100 12 |
13 | 14 |
15 | Support: Support@example.com
16 | Marketing: Marketing@example.com 17 |
-------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Home Page"; 3 | } 4 | 5 |
6 |

Contacts List

7 |

Contacts List is a sample that demonstrates how to build and consume Azure API Apps.

8 |
9 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Error 6 | 7 | 8 |
9 |

Error.

10 |

An error occurred while processing your request.

11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | @ViewBag.Title - Contacts List 7 | @Styles.Render("~/Content/css") 8 | @Scripts.Render("~/bundles/modernizr") 9 | 10 | 11 | 29 |
30 | @RenderBody() 31 |
32 |
33 |

© @DateTime.Now.Year

34 |
35 |
36 | 37 | @Scripts.Render("~/bundles/jquery") 38 | @Scripts.Render("~/bundles/bootstrap") 39 | @RenderSection("scripts", required: false) 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 |
7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Web.Debug.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/Web.Release.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/ContactsList.MVC/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure-Samples/app-service-api-dotnet-contact-list/3797ada8fe8191b1e2e6c7710e119ca7c8225db5/src/ContactsList.MVC/favicon.ico -------------------------------------------------------------------------------- /src/ContactsList.MVC/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure-Samples/app-service-api-dotnet-contact-list/3797ada8fe8191b1e2e6c7710e119ca7c8225db5/src/ContactsList.MVC/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/ContactsList.MVC/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure-Samples/app-service-api-dotnet-contact-list/3797ada8fe8191b1e2e6c7710e119ca7c8225db5/src/ContactsList.MVC/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/ContactsList.MVC/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure-Samples/app-service-api-dotnet-contact-list/3797ada8fe8191b1e2e6c7710e119ca7c8225db5/src/ContactsList.MVC/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/ContactsList.MVC/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | --------------------------------------------------------------------------------