diff --git a/Extensions/Common/Misc/ReleaseNotes-v2.5.rtf b/Extensions/Common/Misc/ReleaseNotes-v2.5.rtf index 544febbd..01f744cb 100644 --- a/Extensions/Common/Misc/ReleaseNotes-v2.5.rtf +++ b/Extensions/Common/Misc/ReleaseNotes-v2.5.rtf @@ -1,382 +1,139 @@ -{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} -{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} -{\f39\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;} -{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f60\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f61\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f63\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f64\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f65\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f66\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f67\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f68\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f430\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f431\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;} -{\f433\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;}{\f434\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f437\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f438\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);} -{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;} -{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;} -{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} -{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} -{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} -{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; -\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red5\green99\blue193;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 -\f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{ -\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs21\alang1025 \ltrch\fcs0 \f39\fs21\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 \slink16 \sunhideused Plain Text;}{\* -\cs16 \additive \rtlch\fcs1 \af0\afs21 \ltrch\fcs0 \f39\fs21 \sbasedon10 \slink15 \slocked Plain Text Char;}{\*\cs17 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid11027155 Hyperlink;}}{\*\listtable -{\list\listtemplateid943739076\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 } -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative -\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0 -{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} -\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 } -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid88501739} -{\list\listtemplateid71101204\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 } -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative -\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext -\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689 -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 -\fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 } -{\listname ;}\listid1230967698}{\list\listtemplateid-431717044\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} -\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 } -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23 -\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative -\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0 -{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext -\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid1371539679}{\list\listtemplateid1084891972\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0 -{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691 -\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} -\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 -\fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 -\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 -\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid1822576936}{\list\listtemplateid2141622444\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 -\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext -\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689 -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 -\fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 } -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid1983148117}{\list\listtemplateid-503033022\listhybrid{\listlevel\levelnfc23 -\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360 -\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext -\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691 -\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} -\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 -\fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid2145460083}} -{\*\listoverridetable{\listoverride\listid1822576936\listoverridecount0\ls1}{\listoverride\listid88501739\listoverridecount0\ls2}{\listoverride\listid1983148117\listoverridecount0\ls3}{\listoverride\listid1371539679\listoverridecount0\ls4} -{\listoverride\listid2145460083\listoverridecount0\ls5}{\listoverride\listid1230967698\listoverridecount0\ls6}}{\*\rsidtbl \rsid359115\rsid873348\rsid997444\rsid1195069\rsid1268416\rsid1330538\rsid1534914\rsid1586566\rsid1912482\rsid2167200\rsid2192352 -\rsid2247598\rsid2304070\rsid2318635\rsid2585396\rsid2627700\rsid2777785\rsid3037705\rsid3240334\rsid3291068\rsid3687342\rsid3816617\rsid3817275\rsid4462593\rsid4527348\rsid4597367\rsid4599157\rsid4605300\rsid5188996\rsid5391391\rsid5602717\rsid5782343 -\rsid5984038\rsid6424161\rsid6432287\rsid6830848\rsid7169509\rsid7489731\rsid7565510\rsid7944273\rsid7957720\rsid8020035\rsid8192016\rsid8264159\rsid8941150\rsid10106450\rsid10170423\rsid10236398\rsid10367884\rsid10696016\rsid10780149\rsid10886434 -\rsid10890557\rsid11027155\rsid11216542\rsid11343446\rsid11369235\rsid11958472\rsid12198470\rsid12405453\rsid12547575\rsid12725058\rsid12861562\rsid13185841\rsid13370379\rsid13520373\rsid13653587\rsid13763530\rsid13795126\rsid13853403\rsid14746735 -\rsid14972208\rsid15087776\rsid15553279\rsid15605216\rsid15628306\rsid15760738\rsid15794386\rsid16009121\rsid16138059\rsid16141147\rsid16197880}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440 -\mintLim0\mnaryLim1}{\info{\author Anthony Sneed}{\operator Anthony Sneed}{\creatim\yr2014\mo4\dy26\hr8\min31}{\revtim\yr2015\mo5\dy14\hr9\min36}{\version74}{\edmins191}{\nofpages2}{\nofwords529}{\nofchars3020}{\nofcharsws3542}{\vern57439}} -{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1501\margr1502\margt1440\margb1440\gutter0\ltrsect -\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen -\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1501\dgvorigin1440\dghshow1\dgvshow1 -\jexpand\viewkind1\viewscale130\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct -\asianbrkrule\rsidroot4605300\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 -{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3816617\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 -\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 -\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15605216 \rtlch\fcs1 \af0\afs21\alang1025 \ltrch\fcs0 \f39\fs21\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { -\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid15605216\charrsid8020035 Release N}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid16138059 otes for Trackable Entities v 2}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid1586566 .5}{\rtlch\fcs1 \af2 \ltrch\fcs0 -\b\f2\insrsid15605216 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid16197880 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16197880 Updated release notes for v 2.5 can be found here:\line }{\field{\*\fldinst {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11343446 -HYPERLINK "https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.0" }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11343446 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba0000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0074006f006e00790073006e006500650064002f0074007200610063006b00610062006c0065002d0065006e00 -7400690074006900650073002f00720065006c00650061007300650073002f007400610067002f00760032002e0035002e0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00000000}}}{\fldrslt {\rtlch\fcs1 \af2 \ltrch\fcs0 \cs17\f2\ul\cf17\insrsid11343446\charrsid11343446 -https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.0}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3816617\sftnbj {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid16197880 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13795126 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid15605216\charrsid8020035 1. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid1586566 Trackab}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid2318635 le Entities NuGet packages v 2.5}{\rtlch\fcs1 \af2 \ltrch\fcs0 -\b\f2\insrsid15605216\charrsid8020035 .}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8020035 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13795126 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid2318635 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid2247598 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 New }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\insrsid2318635\charrsid10106450 EntityBase} -{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 class for trackable entities}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2247598 . -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2318635 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\adjustright\rin0\lin1440\itap0\pararsid2318635 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 Improved implement}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16197880 -ation of INotifyPropertyChanged: Allows parameterless version of NotifyPropertyChanged }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid10886434 (.Net}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16197880 4.5).}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 - -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid2318635 \hich\af2\dbch\af0\loch\f2 o\tab}Implements interface}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16197880 s}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 }{ -\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16197880 needed }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 for change tracking}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13185841 and merging}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 . -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13185841 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\adjustright\rin0\lin1440\itap0\pararsid13185841 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13185841 EntityBase is non-generic in order to support inheritance. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3687342 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\adjustright\rin0\lin1440\itap0\pararsid2318635 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3687342 ModelBase has been deprecated and marked as obsolete. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid3687342 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid3687342 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3687342 Support for }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\insrsid3687342\charrsid5602717 -inheritance}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3687342 . -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13185841 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\adjustright\rin0\lin1440\itap0\pararsid3687342 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13185841 Trackable entity classes can now derive from other entities.}{\rtlch\fcs1 -\af2 \ltrch\fcs0 \f2\insrsid3687342 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid13185841 \hich\af2\dbch\af0\loch\f2 o\tab}}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13185841 Client and service libraries both support inheritance. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid2304070 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid6432287 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 C}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid6432287 ompatibility }{\rtlch\fcs1 \af2 -\ltrch\fcs0 \f2\insrsid2304070 has been enabled for}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid6432287 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\insrsid6432287\charrsid5602717 Windows Phone 8.1}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid6432287 . -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid2304070 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid16197880 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 M}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2318635 inor bug fixes.}{\rtlch\fcs1 -\af2 \ltrch\fcs0 \f2\insrsid2318635\charrsid16197880 -\par }\pard \ltrpar\s15\ql \li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid3817275 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3817275\charrsid12198470 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12405453 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid12405453\charrsid8020035 2. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid3687342 -Updated code generation templates}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid12405453 .}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid12405453 -\par -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid3687342 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid12405453 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3687342 T4 templates now use EntityBase}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7169509 - instead of ModelBase}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid12405453 . -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid7169509 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7169509 Json and DataContract serialization attributes have been removed. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7169509 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\ilvl1\adjustright\rin0\lin1440\itap0\pararsid3240334 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7169509 Project templates }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid5188996 -include packages and code }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7169509 to configure Json and DataContract serializers to handle cyclical references.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid5188996\charrsid3240334 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid13763530 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13763530 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13763530 T4 templates are now deployed as NuGet packages. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid3240334 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\ilvl1\adjustright\rin0\lin1440\itap0\pararsid3291068 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3240334 EF Power Tools and EF 6.x Tools for Visual Studio are both supported}{ -\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3291068 . -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10886434 \hich\af2\dbch\af0\loch\f2 o\tab}}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid10886434 -Versions for separate client and service entities, shared entities, with portable and .Net 4.5 targets.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid3291068 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid2167200 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13763530 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2167200 T4 templates support both the Entity Framework Power Tools and the Entity Framew}{ -\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid5188996 ork 6.x Tools for Visual Studio}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2167200 . -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14746735 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid15628306 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13763530 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13763530 3}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13763530\charrsid8020035 . }{ -\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid15760738 Project templates for }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid2777785 S}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid15760738 hared }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid2777785 E}{\rtlch\fcs1 -\af2 \ltrch\fcs0 \b\f2\insrsid15760738 ntities between client and service}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13763530 .}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13763530 -\par -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid15760738 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13763530 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid15760738 Project templates }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 -for Visual Studio 2013 and later }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid15760738 now offer }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2167200 an}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid15760738 option to create }{\rtlch\fcs1 \af2 \ltrch\fcs0 -\f2\ul\insrsid15760738\charrsid10106450 shared entities}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid15760738 in a single project that is referenced both by client and service projects.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13763530 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14972208 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\ilvl1\adjustright\rin0\lin1440\itap0\pararsid14972208 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid14972208 A Shared Entities template has been added for }{\rtlch\fcs1 \af2 -\ltrch\fcs0 \f2\ul\insrsid14972208\charrsid14972208 EDMX-based}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid14972208 models. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid14972208 \hich\af2\dbch\af0\loch\f2 o\tab}Visual Studio 2012 projects may be manually updated by installing a code generation NuGet package and re-gener -ating entities which derive from EntityBase. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid7565510 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid7565510 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 When creating a Trackable Entities}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 - project}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 ,}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 a}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 }{\rtlch\fcs1 \af2 \ltrch\fcs0 -\f2\ul\insrsid2304070\charrsid14972208 wizard}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 will prompt}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 for an entity format selection:}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7565510 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\ilvl1\adjustright\rin0\lin1440\itap0\pararsid7565510 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 Separate Client / Service Entities vs Shared Entities -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid7565510 \hich\af2\dbch\af0\loch\f2 o\tab}Portable vs .Net 4.5 Target -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid7565510 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13763530 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7565510 Individual entities proj -ects may be added to a solution, or a multi-project solution may be selected (WCF, Web API, Web API with Repo and Unit of Work Patterns).}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2304070 -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f2\fs21\insrsid10236398 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar -\s15\ql \fi-360\li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\ilvl1\adjustright\rin0\lin1440\itap0\pararsid10236398 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid10236398 -For convenience all service projects include the TrackableEntities.Client NuGet package to support shared entities, but you may wish to remove it if you are using separate client and service entities. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid2777785 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid14746735 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2777785 Shared entities allow WCF clients t}{\rtlch\fcs1 \af2 \ltrch\fcs0 -\f2\insrsid14972208 o use "}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\insrsid14972208\charrsid14972208 Add Service Reference}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid14972208 "}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid2777785 - instead of a client channel factory.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid14746735 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11343446 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11343446 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid11343446\charrsid8020035 Release N}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid11343446 otes for Trackable Entities v 2.5.1 -\par -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11343446 Updated release notes for v 2.5.1 can be found here:\line }{\field{\*\fldinst {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 - HYPERLINK "https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.1" }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba0000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0074006f006e00790073006e006500650064002f0074007200610063006b00610062006c0065002d0065006e00 -7400690074006900650073002f00720065006c00650061007300650073002f007400610067002f00760032002e0035002e0031000000795881f43b1d7f48af2c825dc485276300000000a5ab00000000}}}{\fldrslt {\rtlch\fcs1 \af2 \ltrch\fcs0 \cs17\f2\ul\cf17\insrsid13370379\charrsid13370379 -https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.1}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3816617\sftnbj {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11343446 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13370379 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379\charrsid8020035 1. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379 -Miscellaneous bug fixes.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 -\par -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid13370379 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid11343446 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 Fixed bugs in MergeChanges and ApplyChanges methods.}{\rtlch\fcs1 \af2 \ltrch\fcs0 -\f2\insrsid13370379\charrsid13370379 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11343446 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13370379 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379\charrsid8020035 Release N}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379 -otes for Trackable Entities v 2.5.2 -\par -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 Updated release notes for v 2.5.2 can be found here:\line }{\field{\*\fldinst {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 - HYPERLINK "https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.2" }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba0000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0074006f006e00790073006e006500650064002f0074007200610063006b00610062006c0065002d0065006e00 -7400690074006900650073002f00720065006c00650061007300650073002f007400610067002f00760032002e0035002e0032000000795881f43b1d7f48af2c825dc485276300000000a5ab0000db00}}}{\fldrslt {\rtlch\fcs1 \af2 \ltrch\fcs0 \cs17\f2\ul\cf17\insrsid13370379\charrsid13370379 -https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.2}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3816617\sftnbj {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 -\par -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379\charrsid8020035 1. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379 Miscellaneous bug fixes.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 -\par -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid13370379 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid13370379 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 Fixed bugs in SetTracking and ApplyChanges methods.}{\rtlch\fcs1 \af2 \ltrch\fcs0 -\f2\insrsid13370379\charrsid13370379 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13370379 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379 -\par 2}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid13370379\charrsid8020035 . }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\insrsid997444 Visual Studio extension.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 -\par -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid13370379 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar -\s15\ql \fi-360\li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid13370379 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid13370379 Updated }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid997444 WCF }{\rtlch\fcs1 \af2 -\ltrch\fcs0 \f2\insrsid13370379 service entities project to use T4 templates for shared entities. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid997444 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid997444 -Updated NuGet packages for Trackable Entities in project templates and installer. -\par {\listtext\pard\plain\ltrpar \s15 \rtlch\fcs1 \af2\afs21 \ltrch\fcs0 \f3\fs21\insrsid16141147 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16141147 Corrected folder structure - for TrackableEntities.Common NuGet package v2.5.2.1, and updated templates to use it.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid16141147\charrsid13370379 -\par }\pard \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11343446 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11343446 -\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid997444\charrsid15087776 -\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a -9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad -5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 -b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 -0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 -a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f -c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 -0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 -a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 -6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b -4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b -4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100aa5225dfc60600008b1a0000160000007468656d652f7468656d652f -7468656d65312e786d6cec595d8bdb46147d2ff43f08bd3bfe92fcb1c41b6cd9ceb6d94d42eca4e4716c8fadc98e344633de8d0981923c160aa569e943037deb -43691b48a02fe9afd936a54d217fa17746b63c638fbb9b2585a5640d8b343af7ce997bafce1d4997afdc8fa87384134e58dc708b970aae83e3211b9178d2706f -f7bbb99aeb7081e211a22cc60d778eb97b65f7c30f2ea31d11e2083b601ff31dd4704321a63bf93c1fc230e297d814c7706dcc920809384d26f951828ec16f44 -f3a542a1928f10895d274611b8bd311e932176fad2a5bbbb74dea1701a0b2e078634e949d7d8b050d8d1615122f89c0734718e106db830cf881df7f17de13a14 -7101171a6e41fdb9f9ddcb79b4b330a2628bad66d7557f0bbb85c1e8b0a4e64c26836c52cff3bd4a33f3af00546ce23ad54ea553c9fc29001a0e61a52917dda7 -dfaab7dafe02ab81d2438bef76b55d2e1a78cd7f798373d3973f03af40a97f6f03dfed06104503af4029dedfc07b5eb51478065e81527c65035f2d34db5ed5c0 -2b5048497cb8812ef89572b05c6d061933ba6785d77daf5b2d2d9caf50500d5975c929c62c16db6a2d42f758d2058004522448ec88f9148fd110aa3840940c12 -e2ec93490885374531e3305c2815ba8532fc973f4f1da988a01d8c346bc90b98f08d21c9c7e1c3844c45c3fd18bcba1ae4cdcb1fdfbc7cee9c3c7a71f2e89793 -c78f4f1efd9c3a32acf6503cd1ad5e7fffc5df4f3f75fe7afeddeb275fd9f15cc7fffed367bffdfaa51d082b5d85e0d5d7cffe78f1ecd5379ffff9c3130bbc99 -a0810eef930873e73a3e766eb10816a6426032c783e4ed2cfa2122ba45339e701423398bc57f478406fafa1c5164c1b5b019c13b09488c0d787576cf20dc0b93 -9920168fd7c2c8001e30465b2cb146e19a9c4b0b737f164fec9327331d770ba123dbdc018a8dfc766653d05662731984d8a07993a258a0098eb170e4357688b1 -6575770931e27a408609e36c2c9cbbc46921620d499f0c8c6a5a19ed9108f232b711847c1bb139b8e3b418b5adba8d8f4c24dc15885ac8f73135c27815cd048a -6c2efb28a27ac0f791086d247bf364a8e33a5c40a6279832a733c29cdb6c6e24b05e2de9d7405eec693fa0f3c84426821cda7cee23c674649b1d06218aa6366c -8fc4a18efd881f428922e7261336f80133ef10790e7940f1d674df21d848f7e96a701b9455a7b42a107965965872791533a37e7b733a4658490d08bfa1e71189 -4f15f73559f7ff5b5907217df5ed53cbaa2eaaa0371362bda3f6d6647c1b6e5dbc03968cc8c5d7ee369ac53731dc2e9b0decbd74bf976ef77f2fdddbeee7772f -d82b8d06f9965bc574abae36eed1d67dfb9850da13738af7b9daba73e84ca32e0c4a3bf5cc8ab3e7b8690887f24e86090cdc2441cac64998f88488b017a229ec -ef8bae7432e10bd713ee4c19876dbf1ab6fa96783a8b0ed8287d5c2d16e5a3692a1e1c89d578c1cfc6e15143a4e84a75f50896b9576c27ea51794940dabe0d09 -6d329344d942a2ba1c9441520fe610340b09b5b277c2a26e615193ee97a9da6001d4b2acc0d6c9810d57c3f53d30012378a242148f649ed2542fb3ab92f92e33 -bd2d984605c03e625901ab4cd725d7adcb93ab4b4bed0c99364868e566925091513d8c87688417d52947cf42e36d735d5fa5d4a02743a1e683d25ad1a8d6fe8d -c579730d76ebda40635d2968ec1c37dc4ad9879219a269c31dc3633f1c4653a81d2eb7bc884ee0ddd95024e90d7f1e6599265cb4110fd3802bd149d520220227 -0e2551c395cbcfd24063a5218a5bb104827061c9d541562e1a3948ba99643c1ee3a1d0d3ae8dc848a7a7a0f0a95658af2af3f383a5259b41ba7be1e8d819d059 -720b4189f9d5a20ce0887078fb534ca33922f03a3313b255fdad35a685eceaef13550da5e3884e43b4e828ba98a77025e5191d7596c5403b5bac1902aa8564d1 -080713d960f5a01add34eb1a2987ad5df7742319394d34573dd35015d935ed2a66ccb06c036bb13c5f93d7582d430c9aa677f854bad725b7bed4bab57d42d625 -20e059fc2c5df70c0d41a3b69acca026196fcab0d4ecc5a8d93b960b3c85da599a84a6fa95a5dbb5b8653dc23a1d0c9eabf383dd7ad5c2d078b9af549156df3d -f44f136c700fc4a30d2f81675470954af8f09020d810f5d49e24950db845ee8bc5ad0147ce2c210df741c16f7a41c90f72859adfc97965af90abf9cd72aee9fb -e562c72f16daadd243682c228c8a7efacda50bafa2e87cf1e5458d6f7c7d89966fdb2e0d599467eaeb4a5e11575f5f8aa5ed5f5f1c02a2f3a052ead6cbf55625 -572f37bb39afddaae5ea41a5956b57826abbdb0efc5abdfbd0758e14d86b9603afd2a9e52ac520c8799582a45fabe7aa5ea9d4f4aacd5ac76b3e5c6c6360e5a9 -7c2c6201e155bc76ff010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f -7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be -9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980 -ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5b -babac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e -745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f -2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f74 -68656d654d616e616765722e786d6c504b01022d0014000600080000002100aa5225dfc60600008b1a00001600000000000000000000000000d6020000746865 -6d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000d00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cb0a00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; -\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid; -\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid; -\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2; -\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1; -\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; -\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; -\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; -\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; -\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; -\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; -\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; -\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; -\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; -\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; -\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; -\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; -\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; -\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; -\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; -\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; -\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; -\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; -\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; -\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; -\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; -\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; -\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; -\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; -\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; -\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; -\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; -\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; -\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; -\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; -\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; -\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 -4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000030ac -8db3188ed001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe1033{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fnil\fcharset2 Symbol;}} +{\colortbl ;\red0\green0\blue255;} +{\*\listtable +{\list\listhybrid +{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f1\jclisttab\tx0} +{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f1\jclisttab\tx0}\listid1 } +{\list\listhybrid +{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f1\jclisttab\tx0} +{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f1\jclisttab\tx0}\listid2 } +{\list\listhybrid +{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f1\jclisttab\tx0} +{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f1\jclisttab\tx0}\listid3 }} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}} +{\*\generator Riched20 10.0.10240}{\*\mmathPr\mdispDef1\mwrapIndent1440 }\viewkind4\uc1 +\pard\widctlpar\b\f0\fs21 Release Notes for Trackable Entities v 2.5.2.1\par +\par +\b0 Updated release notes for v 2.5.2.1 can be found here:\line {{\field{\*\fldinst{HYPERLINK https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.2.1 }}{\fldrslt{https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.2.1\ul0\cf0}}}}\b\f0\fs21\par +\par +1. Visual Studio Project Templates.\b0\par +\par + +\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Fixed an issue with the Entities project template wizard which placed the generated project directory one level too high.\par +{\pntext\f1\'B7\tab}Removed packages.config from all VS project templates to accommodate a change in behavior of the NuGet VS Wizard, which now required packages.config to be omitted.\par + +\pard\widctlpar\b\par +2. VSIX Installer for VS2015.\b0\par +\par + +\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Corrected problems with \ul WCF template\ulnone for VS 2013 to set default namespace in client and service entities projects to match\par + +\pard\widctlpar\b\par +Release Notes for Trackable Entities v 2.5.2\par +\par +\b0 Updated release notes for v 2.5.2 can be found here:\line {{\field{\*\fldinst{HYPERLINK https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.2 }}{\fldrslt{https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.2\ul0\cf0}}}}\b\f0\fs21\par +\par +1. Trackable Entities NuGet packages v 2.5.2.\b0\par +\par + +\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Fixed \ul ApplyChanges\ulnone to include check for 0/1-M relations in cascade Adds.\par +{\pntext\f1\'B7\tab}Fixed \ul Remove\ulnone and \ul SetTracking\ulnone method so that change-tracking is only disabled on deletes for 1-M relations.\par + +\pard\widctlpar\b\par +2. VSIX installer for VS2013.\b0\par +\par + +\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Updated WCF service entities project to use T4 templates for shared entities.\par +{\pntext\f1\'B7\tab}Updated NuGet packages for Trackable Entities in project templates and installer.\par +{\pntext\f1\'B7\tab}Corrected folder structure for TrackableEntities.Common NuGet package v2.5.2.1, and updated templates to use it.\par + +\pard\widctlpar\b\par +Release Notes for Trackable Entities v 2.5.1\par +\par +\b0 Updated release notes for v 2.5.1 can be found here:\line {{\field{\*\fldinst{HYPERLINK https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.1 }}{\fldrslt{https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.1\ul0\cf0}}}}\f0\fs21\par +\par +\b 1. Miscellaneous bug fixes.\b0\par +\par + +\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Fixed bugs in MergeChanges and ApplyChanges methods.\par + +\pard\widctlpar\par +\b Release Notes for Trackable Entities v 2.5\par +\par +\b0 Updated release notes for v 2.5 can be found here:\line {{\field{\*\fldinst{HYPERLINK https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.0 }}{\fldrslt{https://github.com/tonysneed/trackable-entities/releases/tag/v2.5.0\ul0\cf0}}}}\b\f0\fs21\par +\par +1. Trackable Entities NuGet packages v 2.5.\b0\par +\par + +\pard +{\listtext\f0\u10625?\tab}\ls1\fi-360\li720 New \ul EntityBase\ulnone class for trackable entities.\par + +\pard +{\listtext\f0\u10625?\tab}\ls1\ilvl1\fi-360\li1440 Improved implementation of INotifyPropertyChanged: Allows parameterless version of NotifyPropertyChanged (.Net 4.5).\par +{\listtext\f0 1\tab}Implements interfaces needed for change tracking and merging.\par +{\listtext\f0 2\tab}EntityBase is non-generic in order to support inheritance.\par +{\listtext\f0 3\tab}ModelBase has been deprecated and marked as obsolete.\par + +\pard +{\listtext\f0\u10625?\tab}\ls1\fi-360\li720 Support for \ul inheritance\ulnone .\par + +\pard +{\listtext\f0\u10625?\tab}\ls1\ilvl1\fi-360\li1440 Trackable entity classes can now derive from other entities.\par +{\listtext\f0 1\tab}Client and service libraries both support inheritance.\par + +\pard +{\listtext\f0\u10625?\tab}\ls1\fi-360\li720 Compatibility has been enabled for \ul Windows Phone 8.1\ulnone .\par +{\listtext\f0 1\tab}Minor bug fixes.\par + +\pard\widctlpar\li720\par + +\pard\widctlpar\b 2. Updated code generation templates.\b0\par +\par + +\pard +{\listtext\f0\u10625?\tab}\ls2\fi-360\li720 T4 templates now use EntityBase instead of ModelBase.\par +{\listtext\f0 1\tab}Json and DataContract serialization attributes have been removed.\par + +\pard +{\listtext\f0\u10625?\tab}\ls2\ilvl1\fi-360\li1440 Project templates include packages and code to configure Json and DataContract serializers to handle cyclical references.\par + +\pard +{\listtext\f0\u10625?\tab}\ls2\fi-360\li720 T4 templates are now deployed as NuGet packages.\par + +\pard +{\listtext\f0\u10625?\tab}\ls2\ilvl1\fi-360\li1440 EF Power Tools and EF 6.x Tools for Visual Studio are both supported.\par +{\listtext\f0 1\tab}Versions for separate client and service entities, shared entities, with portable and .Net 4.5 targets.\par + +\pard +{\listtext\f0\u10625?\tab}\ls2\fi-360\li720 T4 templates support both the Entity Framework Power Tools and the Entity Framework 6.x Tools for Visual Studio.\par + +\pard\widctlpar\par +\b 3. Project templates for Shared Entities between client and service.\b0\par +\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\fi-360\li720 Project templates for Visual Studio 2013 and later now offer an option to create \ul shared entities\ulnone in a single project that is referenced both by client and service projects.\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\ilvl1\fi-360\li1440 A Shared Entities template has been added for \ul EDMX-based\ulnone models.\par +{\listtext\f0 1\tab}Visual Studio 2012 projects may be manually updated by installing a code generation NuGet package and re-generating entities which derive from EntityBase.\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\fi-360\li720 When creating a Trackable Entities project, a \ul wizard\ulnone will prompt for an entity format selection:\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\ilvl1\fi-360\li1440 Separate Client / Service Entities vs Shared Entities\par +{\listtext\f0 1\tab}Portable vs .Net 4.5 Target\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\fi-360\li720 Individual entities projects may be added to a solution, or a multi-project solution may be selected (WCF, Web API, Web API with Repo and Unit of Work Patterns).\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\ilvl1\fi-360\li1440 For convenience all service projects include the TrackableEntities.Client NuGet package to support shared entities, but you may wish to remove it if you are using separate client and service entities.\par + +\pard +{\listtext\f0\u10625?\tab}\ls3\fi-360\li720 Shared entities allow WCF clients to use "\ul Add Service Reference\ulnone " instead of a client channel factory.\par + +\pard\widctlpar\b\par +} + \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/App.config b/Extensions/Common/Wizards/EntitiesSelectionHarness/App.config similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/App.config rename to Extensions/Common/Wizards/EntitiesSelectionHarness/App.config diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/EntitiesSelectionHarness.csproj b/Extensions/Common/Wizards/EntitiesSelectionHarness/EntitiesSelectionHarness.csproj similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/EntitiesSelectionHarness.csproj rename to Extensions/Common/Wizards/EntitiesSelectionHarness/EntitiesSelectionHarness.csproj diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/Program.cs b/Extensions/Common/Wizards/EntitiesSelectionHarness/Program.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/Program.cs rename to Extensions/Common/Wizards/EntitiesSelectionHarness/Program.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/AssemblyInfo.cs b/Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/AssemblyInfo.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/AssemblyInfo.cs rename to Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/AssemblyInfo.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Resources.Designer.cs b/Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Resources.Designer.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Resources.Designer.cs rename to Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Resources.Designer.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Resources.resx b/Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Resources.resx similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Resources.resx rename to Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Resources.resx diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Settings.Designer.cs b/Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Settings.Designer.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Settings.Designer.cs rename to Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Settings.Designer.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Settings.settings b/Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Settings.settings similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionHarness/Properties/Settings.settings rename to Extensions/Common/Wizards/EntitiesSelectionHarness/Properties/Settings.settings diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/Constants.cs b/Extensions/Common/Wizards/EntitiesSelectionWizard/Constants.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/Constants.cs rename to Extensions/Common/Wizards/EntitiesSelectionWizard/Constants.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelection.cs b/Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelection.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelection.cs rename to Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelection.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionDialog.Designer.cs b/Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionDialog.Designer.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionDialog.Designer.cs rename to Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionDialog.Designer.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionDialog.cs b/Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionDialog.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionDialog.cs rename to Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionDialog.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionDialog.resx b/Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionDialog.resx similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionDialog.resx rename to Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionDialog.resx diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionWizard.csproj b/Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionWizard.csproj similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/EntitiesSelectionWizard.csproj rename to Extensions/Common/Wizards/EntitiesSelectionWizard/EntitiesSelectionWizard.csproj diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/Properties/AssemblyInfo.cs b/Extensions/Common/Wizards/EntitiesSelectionWizard/Properties/AssemblyInfo.cs similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/Properties/AssemblyInfo.cs rename to Extensions/Common/Wizards/EntitiesSelectionWizard/Properties/AssemblyInfo.cs diff --git a/Extensions/VS2013/Deploy/EntitiesSelectionWizard/key.snk b/Extensions/Common/Wizards/EntitiesSelectionWizard/key.snk similarity index 100% rename from Extensions/VS2013/Deploy/EntitiesSelectionWizard/key.snk rename to Extensions/Common/Wizards/EntitiesSelectionWizard/key.snk diff --git a/Extensions/Common/Wizards/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj b/Extensions/Common/Wizards/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj index 972d8460..9ef417c9 100644 --- a/Extensions/Common/Wizards/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj +++ b/Extensions/Common/Wizards/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj @@ -40,12 +40,12 @@ key.snk - - ..\..\..\VS2013\Deploy\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll True - ..\..\..\VS2013\Deploy\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll True @@ -59,7 +59,7 @@ - ..\..\..\VS2013\Deploy\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll True diff --git a/Extensions/Common/Wizards/TemplateWizard.Service.Entities/TemplateWizard.Service.Entities.csproj b/Extensions/Common/Wizards/TemplateWizard.Service.Entities/TemplateWizard.Service.Entities.csproj index 338a857f..ee177d33 100644 --- a/Extensions/Common/Wizards/TemplateWizard.Service.Entities/TemplateWizard.Service.Entities.csproj +++ b/Extensions/Common/Wizards/TemplateWizard.Service.Entities/TemplateWizard.Service.Entities.csproj @@ -32,16 +32,17 @@ 4 - + ..\packages\EntityFramework.6.1.0\lib\net45\EntityFramework.dll True - + ..\packages\EntityFramework.6.1.0\lib\net45\EntityFramework.SqlServer.dll + True - False ..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll + True @@ -52,11 +53,13 @@ - + ..\packages\TrackableEntities.Common.2.0.0.0\lib\portable-net40+sl5+win8+windowsphone8\TrackableEntities.Common.dll + True - + ..\packages\TrackableEntities.EF.6.2.0.0.0\lib\net45\TrackableEntities.EF.6.dll + True diff --git a/Extensions/Common/Wizards/TemplateWizardHarness/App.config b/Extensions/Common/Wizards/TemplateWizardHarness/App.config index 8a536dba..f2c4f6bd 100644 --- a/Extensions/Common/Wizards/TemplateWizardHarness/App.config +++ b/Extensions/Common/Wizards/TemplateWizardHarness/App.config @@ -7,7 +7,7 @@ - + diff --git a/Extensions/Common/Wizards/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj b/Extensions/Common/Wizards/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj index e64bd151..eb785c6c 100644 --- a/Extensions/Common/Wizards/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj +++ b/Extensions/Common/Wizards/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj @@ -41,11 +41,11 @@ - ..\..\..\VS2013\Deploy\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll True - ..\..\..\VS2013\Deploy\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll True @@ -72,7 +72,7 @@ - ..\..\..\VS2013\Deploy\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll True diff --git a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/ChildWizard.cs b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/ChildWizard.cs similarity index 90% rename from Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/ChildWizard.cs rename to Extensions/Common/Wizards/TrackableEntities.TemplateWizard/ChildWizard.cs index 7608bc50..d44a826e 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/ChildWizard.cs +++ b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/ChildWizard.cs @@ -47,28 +47,25 @@ public void RunStarted(object automationObject, public void BeforeOpeningFile(ProjectItem projectItem) { - Wizard.BeforeOpeningFile(projectItem); } public void ProjectFinishedGenerating(Project project) { + MoveGeneratedProject(ref project); Wizard.ProjectFinishedGenerating(project); - PostProjectFinishedGenerating(project); } public void ProjectItemFinishedGenerating(ProjectItem projectItem) { - Wizard.ProjectItemFinishedGenerating(projectItem); } public void RunFinished() { - Wizard.RunFinished(); } public bool ShouldAddProjectItem(string filePath) { - return Wizard.ShouldAddProjectItem(filePath); + return true; } protected virtual void ProcessEntitiesTemplate( @@ -76,7 +73,7 @@ protected virtual void ProcessEntitiesTemplate( { } - protected virtual void PostProjectFinishedGenerating(Project project) + protected virtual void MoveGeneratedProject(ref Project project) { } diff --git a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/Constants.cs b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/Constants.cs similarity index 100% rename from Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/Constants.cs rename to Extensions/Common/Wizards/TrackableEntities.TemplateWizard/Constants.cs diff --git a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/EntitiesChildWizard.cs b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/EntitiesChildWizard.cs similarity index 78% rename from Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/EntitiesChildWizard.cs rename to Extensions/Common/Wizards/TrackableEntities.TemplateWizard/EntitiesChildWizard.cs index d5c1aee5..6bf1d4c0 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/EntitiesChildWizard.cs +++ b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/EntitiesChildWizard.cs @@ -39,20 +39,24 @@ protected override void ProcessEntitiesTemplate( } } - // Store destination directory info - string solutionPath = replacementsDictionary[Constants.DictionaryEntries.SolutionDirectory]; - string projectName = replacementsDictionary[Constants.DictionaryEntries.SafeProjectName]; - var destDirectory = new DirectoryInfo(Path.Combine(solutionPath, projectName)); + // Set root dictionary values + var projectName = replacementsDictionary[Constants.DictionaryEntries.SafeProjectName]; EntitiesWizard.RootDictionary[Constants.DictionaryEntries.SafeProjectName] = projectName; EntitiesWizard.RootDictionary[Constants.DictionaryEntries.OriginalDestinationDirectory] = replacementsDictionary[Constants.DictionaryEntries.DestinationDirectory]; - EntitiesWizard.RootDictionary[Constants.DictionaryEntries.DestinationDirectory] = destDirectory.FullName; - // Set $destinationdirectory$ in replacements dictionary - replacementsDictionary[Constants.DictionaryEntries.DestinationDirectory] = destDirectory.FullName; + // Set destination directory + var directoryInfo = new DirectoryInfo(replacementsDictionary + [Constants.DictionaryEntries.DestinationDirectory]).Parent; + if (directoryInfo != null && directoryInfo.Parent != null) + { + string destDirectory = Path.Combine(directoryInfo.Parent.FullName, projectName); + EntitiesWizard.RootDictionary[Constants.DictionaryEntries.DestinationDirectory] = destDirectory; + replacementsDictionary[Constants.DictionaryEntries.DestinationDirectory] = destDirectory; + } } - protected override void PostProjectFinishedGenerating(Project project) + protected override void MoveGeneratedProject(ref Project project) { // Return if parent is root wizard if (RootWizard.RootDictionary[Constants.DictionaryEntries.ParentWizardName] == @@ -72,6 +76,8 @@ protected override void PostProjectFinishedGenerating(Project project) Directory.Move(origDestDirectory, newDestDirectory); string newDestProject = Path.Combine(newDestDirectory, projectName + ".csproj"); Dte2.Solution.AddFromFile(newDestProject); + project = Dte2.Solution.Projects.Cast() + .Single(p => p.Name == projectName); } } } diff --git a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/EntitiesWizard.cs b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/EntitiesWizard.cs similarity index 100% rename from Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/EntitiesWizard.cs rename to Extensions/Common/Wizards/TrackableEntities.TemplateWizard/EntitiesWizard.cs diff --git a/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/Properties/AssemblyInfo.cs b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ea1b6b46 --- /dev/null +++ b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TrackableTemplateWizard")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TrackableTemplateWizard")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6fbb1a5e-d865-4d6b-8ac3-578a1b34b51d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/RootWizard.cs b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/RootWizard.cs similarity index 97% rename from Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/RootWizard.cs rename to Extensions/Common/Wizards/TrackableEntities.TemplateWizard/RootWizard.cs index de21c5ba..b7d4789a 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/RootWizard.cs +++ b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/RootWizard.cs @@ -90,7 +90,7 @@ public bool ShouldAddProjectItem(string filePath) private Project GetProject(string extension) { - string projectName = RootDictionary["$saferootprojectname$"] + extension; + string projectName = RootDictionary[Constants.DictionaryEntries.SafeRootProjectName] + extension; foreach (Project project in _dte2.Solution.Projects) { if (Path.GetFileNameWithoutExtension(project.FullName).Equals(projectName)) diff --git a/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj new file mode 100644 index 00000000..6c087d5d --- /dev/null +++ b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj @@ -0,0 +1,97 @@ + + + + + Debug + AnyCPU + {C9646BE1-E999-47BD-8A9D-083017E6269A} + Library + Properties + TrackableEntities.TemplateWizard + TrackableEntities.TemplateWizard + v4.5.1 + 512 + ..\ + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + true + + + key.snk + + + + False + + + True + + + False + ..\..\..\Common\Wizards\lib\Microsoft.VisualStudio.ComponentModelHost.dll + + + + False + ..\..\..\Common\Wizards\lib\Microsoft.VisualStudio.Shell.11.0.dll + + + + ..\packages\NuGet.VisualStudio.2.8.6\lib\net45\NuGet.VisualStudio.dll + True + True + + + + + + + + + + + + + + + + + + + + + {a1dc5d35-b381-4a89-9922-e83923d4ad2f} + EntitiesSelectionWizard + + + + + + \ No newline at end of file diff --git a/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/key.snk b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/key.snk new file mode 100644 index 00000000..ebba93de Binary files /dev/null and b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/key.snk differ diff --git a/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/packages.config b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/packages.config new file mode 100644 index 00000000..fc977ff2 --- /dev/null +++ b/Extensions/Common/Wizards/TrackableEntities.TemplateWizard/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Extensions/Common/Wizards/TrackableItemTemplateWizard.sln b/Extensions/Common/Wizards/TrackableItemTemplateWizard.sln index 5bdeaa0b..fe5ea2e1 100644 --- a/Extensions/Common/Wizards/TrackableItemTemplateWizard.sln +++ b/Extensions/Common/Wizards/TrackableItemTemplateWizard.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.30110.0 +VisualStudioVersion = 12.0.40629.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TemplateWizard.Service.Entities", "TemplateWizard.Service.Entities\TemplateWizard.Service.Entities.csproj", "{8556C7C8-72A6-4857-BAFD-489E42A2A453}" EndProject @@ -18,6 +18,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.ItemWizar EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplateParametersWizard", "ItemTemplateParametersWizard\ItemTemplateParametersWizard.csproj", "{046940FE-CC75-43E2-9C41-346AEBBBB03B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.TemplateWizard", "TrackableEntities.TemplateWizard\TrackableEntities.TemplateWizard.csproj", "{C9646BE1-E999-47BD-8A9D-083017E6269A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionWizard", "EntitiesSelectionWizard\EntitiesSelectionWizard.csproj", "{A1DC5D35-B381-4A89-9922-E83923D4AD2F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionHarness", "EntitiesSelectionHarness\EntitiesSelectionHarness.csproj", "{A784F6D4-D974-4E5C-9DE1-FA571C9214C9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -40,6 +46,18 @@ Global {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.Build.0 = Debug|Any CPU {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.ActiveCfg = Release|Any CPU {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.Build.0 = Release|Any CPU + {C9646BE1-E999-47BD-8A9D-083017E6269A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9646BE1-E999-47BD-8A9D-083017E6269A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9646BE1-E999-47BD-8A9D-083017E6269A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9646BE1-E999-47BD-8A9D-083017E6269A}.Release|Any CPU.Build.0 = Release|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Release|Any CPU.Build.0 = Release|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/NuGet.VisualStudio.2.8.3.nupkg b/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/NuGet.VisualStudio.2.8.3.nupkg deleted file mode 100644 index 2fc129ea..00000000 Binary files a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/NuGet.VisualStudio.2.8.3.nupkg and /dev/null differ diff --git a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/lib/net40/NuGet.VisualStudio.XML b/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/lib/net40/NuGet.VisualStudio.XML deleted file mode 100644 index a50115dd..00000000 --- a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/lib/net40/NuGet.VisualStudio.XML +++ /dev/null @@ -1,1547 +0,0 @@ - - - - NuGet.VisualStudio - - - - - Adds an Import element to this project file if it doesn't already exist. - - The project file. - The path to the imported file. - The location where the Import is added. - - - - Removes the Import element from the project file. - - The project file. - The path to the imported file. - - - - Install a package with locking to allow multiple concurrent extractions to work without disk contention. - - - - - We want to base the lock name off of the full path of the package, however, the Mutex looks for files on disk if a path is given. - Additionally, it also fails if the string is longer than 256 characters. Therefore we obtain a base-64 encoded hash of the path. - - - - - - Gets the list of package directories that are still need to be deleted in the - local package repository. - - - - - Marks package directory for future removal if it was not fully deleted during the normal uninstall process - if the directory does not contain any added or modified files. - - - - - Attempts to remove marked package directories that were unable to be fully deleted during the original uninstall. - - - - - Marks package directory for future removal if it was not fully deleted during the normal uninstall process - if the directory does not contain any added or modified files. - The package directory will be marked by an adjacent *directory name*.deleteme file. - - - - - Attempts to remove package directories that were unable to be fully deleted during the original uninstall. - These directories will be marked by an adjacent *directory name*.deleteme files in the local package repository. - If the directory removal is successful, the .deleteme file will also be removed. - - - - - Interaction logic for RestartRequestBar.xaml - - - RestartRequestBar - - - - - InitializeComponent - - - - - Contains methods to restore packages installed in a project within the current solution. - - - - - Returns a value indicating whether the user consent to download NuGet packages - has been granted. - - true if the user consent has been granted; otherwise, false. - - - - Restores NuGet packages installed in the given project within the current solution. - - The project whose NuGet packages to restore. - - - - Returns true if the package is already installed in the local repository. - - The file system of the local repository. - The package id. - The package version - True if the package is installed in the local repository. - - - - Contains methods to uninstall packages from a project within the current solution. - - - - - Uninstall the specified package from a project and specify whether to uninstall its dependency packages too. - - The project from which the package is uninstalled. - The package to be uninstalled - A boolean to indicate whether the dependency packages should be uninstalled too. - - - - Contains information about an installed package. - - - - - Id of the package. - - - - - Version of the package. - - - Do not use this property because it will require referencing NuGet.Core.dll assembly. Use the VersionString property instead. - - - - - Title of the package. - - - - - Description of the package. - - - - - The authors of the package. - - - - - The location where the package is installed on disk. - - - - - The version of the package. - - - Use this property instead of the Version property becase with the type string, - it doesn't require referencing NuGet.Core.dll assembly. - - - - - Creates a .refresh file in bin directory of the IFileSystem that points to the assembly being installed. - This works around issues in DTE's AddReference method when dealing with GACed binaries. - - The project system the assembly is being referenced by. - The relative path to the assembly being added - - - - Represents a package repository that implements a dependency provider. - - - - - This function checks if there is a framework assembly of assemblyName and of version > availableVersion - in targetFramework. NOTE that this function is only applicable for .NETFramework and returns false for - all the other targetFrameworks - - - - - This function checks if there is a framework assembly of assemblyName and of version > availableVersion - in targetFramework. NOTE that this function is only applicable for .NETFramework and returns false for - all the other targetFrameworks - - - - - Returns the list of framework assemblies as specified in frameworklist.xml under the ReferenceAssemblies - for .NETFramework. If the file is not present, an empty list is returned - - - - - Given a fileSystem to the path containing RedistList\Frameworklist.xml file - return the list of assembly names read out from the xml file - - - - - Contains events which are raised when packages are installed or uninstalled from projects and the current solution. - - - - - Raised when a package is about to be installed into the current solution. - - - - - Raised after a package has been installed into the current solution. - - - - - Raised when a package is about to be uninstalled from the current solution. - - - - - Raised after a package has been uninstalled from the current solution. - - - - - Raised after a package has been installed into a project within the current solution. - - - - - Raised after a package has been uninstalled from a project within the current solution. - - - - - Contains methods to query for installed packages within the current solution. - - - - - Get the list of NuGet packages installed in the current solution. - - - - - Checks if a NuGet package with the specified Id is installed in the specified project. - - The project to check for NuGet package. - The id of the package to check. - true if the package is install. false otherwise. - - - - Checks if a NuGet package with the specified Id and version is installed in the specified project. - - The project to check for NuGet package. - The id of the package to check. - The version of the package to check. - true if the package is install. false otherwise. - - - - Checks if a NuGet package with the specified Id and version is installed in the specified project. - - The project to check for NuGet package. - The id of the package to check. - The version of the package to check. - true if the package is install. false otherwise. - - The reason this method is named IsPackageInstalledEx, instead of IsPackageInstalled, is that - when client project compiles against this assembly, the compiler would attempt to bind against - the other overload which accepts SemanticVersion and would require client project to reference NuGet.Core. - - - - - Get the list of NuGet packages installed in the specified project. - - The project to get NuGet packages from. - - - - Adds refresh files to the specified project for all assemblies references belonging to the packages specified by packageNames. - - The project. - The file system pointing to 'packages' folder under the solution. - The package names. - - - - Copies the native binaries to the project's bin folder. - - The project. - The packages file system. - The package names. - - - - Sets NuGetPackageImportStamp to a new random guid. This is a hack to let the project system know it is out of date. - The value does not matter, it just needs to change. - - - - - This class is used by functional tests to change NuGet user settings. - - - - - Sets a NuGet user settings property. - - The name of the settings property to set. - The value of the settings property. - If null, the settings property will be deleted. - - - - Gets the VsSettings singleton object. - - The VsSettings object in the system. - - - - Adds a new package source. - - Name of the new source. - Value (uri) of the new source. - - - - Removes a new package source. - - Name of the source. - - - - Configures the current solution for Package Restore mode. - - if set to false, the method will not show any error message, and will not set package restore consent. - - - - Checks the current solution if there is any package missing. - - - - - - Restores the missing packages for the current solution. - - - - - Gets a value indicating whether the current solution is configured for Package Restore mode. - - - - - Occurs when it is detected that the packages are missing or restored for the current solution. - - - - - Interaction logic for PackageRestoreBar.xaml - - - PackageRestoreBar - - - - - InitializeComponent - - - - - Try to retrieve the package with the specified Id from machine cache first. - If not found, download it from the specified repository and add to machine cache. - - - - - Gets all package references in all projects of the current solution plus package - references specified in the solution packages.config - - - - - Gets the package references of the specified project. - - - - - Invokes the action on the UI thread if one exists. - - - - - Provides functionality for installing packages already on disk from an installer (MSI or VSIX). - - - - - Gets the folder location where packages have been laid down for the specified extension. - - The installed extension. - The VS Extension manager instance. - An error handler that accepts the error message string and then throws the appropriate exception. - The absolute path to the extension's packages folder. - - - - Gets the folder location where packages have been laid down in a registry-specified location. - - The registry key name that specifies the packages location. - The optional list of parent registry keys to look in (used for unit tests). - An error handler that accepts the error message string and then throws the appropriate exception. - The absolute path to the packages folder specified in the registry. - - - - Installs one or more packages into the specified project. - - The package installer service that performs the actual package installation. - The target project for installation. - The packages to install, where to install them from, and additional options for their installation. - The repository settings for the packages being installed. - An action that accepts a warning message and presents it to the user, allowing execution to continue. - An action that accepts an error message and presents it to the user, allowing execution to continue. - - - - For Website projects, adds necessary "refresh" files in the bin folder for added references. - - The target Website project. - The local repository path. - The packages that were installed. - - - - By convention, we copy all files under the NativeBinaries folder under package root to the bin folder of the Website. - - The target Website project. - The local repository path. - The packages that were installed. - - - - ProductUpdateBar - - - - - InitializeComponent - - - - - Cache that stores project based on multiple names. i.e. Project can be retrieved by name (if non conflicting), unique name and custom unique name. - - - - - Finds a project by short name, unique name or custom unique name. - - name of the project to retrieve. - project instance - true if the project with the specified name is cached. - - - - Finds a project name by short name, unique name or custom unique name. - - name of the project - project name instance - true if the project name with the specified name is found. - - - - Removes a project and returns the project name instance of the removed project. - - name of the project to remove. - - - - Returns all cached projects. - - - - - Determines if a short name is ambiguous - - short name of the project - true if there are multiple projects with the specified short name. - - - - Add a project to the cache. - - project to add to the cache. - The project name of the added project. - - - - Tries to find a project by short name. Returns the project name if and only if it is non-ambiguous. - - - - - Adds an entry to the short name cache returning any conflicting project name. - - The first conflicting short name. - - - - Removes a project from the short name cache. - - The short name of the project. - - - - Removes a project from the project name dictionary. - - - - - Represents a project name in the solution manager. - - - - - Two projects are equal if they share the same FullNames. - - - - - This project system represents the JavaScript project in Windows8 - - - - - Represent a particular tree node in the SolutionExplorer window. - - - - - Delete all parent, grand parent, etc. of this file if they are empty, after deleting this file. - - - - - Get the filter that is represented by the specified path - - - - - Returns an ICredentials instance that the consumer would need in order - to properly authenticate to the given Uri. - - - - - THIS IS KINDA HACKISH: we are forcing the static property just so that the VsWebProxy can pick up the Uri. - This method is responsible for initializing the WebRequest.DefaultWebProxy to the correct - Uri based on the type of request that credentials are needed for before we prompt for credentials - because the VsWebProxy uses that static property as a way to display the Uri that we are connecting to. - - - - - This method is responsible for retrieving either cached credentials - or forcing a prompt if we need the user to give us new credentials. - - - - - Cache location relative to the template (inside the same folder as the vstemplate file) - - - - - Cache location relative to the VSIX that packages the project template - - - - - Cache location stored in the registry - - - - - Represents all necessary configuration for installing a list of preinstalled packages. - - - - - Creates a preinstalled package configuration. - - The absolute path to the packages repository on disk. - The list of packages to be installed. - A boolean indicating whether the packages are preunzipped within the repository path. - - - - The information that represents a single preinstalled package (already on disk). - - - - - Information for a single preinstalled package that will have its assembly references added and its dependencies ignored. - - The package Id. - The package version. - - - - Information for a single preinstalled package. - - The package Id. - The package version. - A boolean indicating whether assembly references from the package should be skipped. - A boolean indicating whether dependencies from the package should be ignored. - - - - Returns the full path of the project directory. - - The project. - The full path of the project directory. - - - - Gets the EnvDTE.Project instance from IVsHierarchy - - pHierarchy is the IVsHierarchy instance from which the project instance is obtained - - - - Gets the path to .nuget folder present in the solution - - Solution from which .nuget folder's path is obtained - - - - Returns true if the project has the packages.config file - - Project under whose directory packages.config is searched for - - - - Returns the full path of the packages config file associated with the project. - - The project. - A tuple contains full path to packages.project_name.config and packages.config files. - - - - This method is different from the GetName() method above in that for Website project, - it will always return the project name, instead of the full path to the website, when it uses Casini server. - - - - - This constructor is used by unit tests to inject custom IVsProjectSystem implementation - - - - - Adds refresh files to the specified project for all assemblies references belonging to the packages specified by packageNames. - - The project. - The file system pointing to 'packages' folder under the solution. - The package names. - - - - Copies the native binaries to the project's bin folder. - - The project. - The packages file system. - The package names. - - - - Gets all assembly references for a package - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to {0} cannot be null or an empty string. - - - - - Looks up a localized string similar to {0} must be between {1} and {2}. - - - - - Looks up a localized string similar to {0} must be a valid value from the {1} enumeration. - - - - - Looks up a localized string similar to {0} must be greater than {1}. - - - - - Looks up a localized string similar to {0} must be greater than or equal to {1}. - - - - - Looks up a localized string similar to {0} must be less than {1}. - - - - - Looks up a localized string similar to {0} must be less than or equal to {1}. - - - - - Looks up a localized string similar to {0} cannot be an empty string, it must either be null or a non-empty string. - - - - - Looks up a localized string similar to This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - Contains methods to install packages into a project within the current solution. - - - - - Installs a single package from the specified package source. - - The package source to install the package from. - The target project for package installation. - The package id of the package to install. - The version of the package to install - A boolean indicating whether or not to ignore the package's dependencies during installation. - - - - Installs a single package from the specified package source. - - The package source to install the package from. - The target project for package installation. - The package id of the package to install. - The version of the package to install - A boolean indicating whether or not to ignore the package's dependencies during installation. - - - - Installs a single package from the specified package source. - - The package repository to install the package from. - The target project for package installation. - The package id of the package to install. - The version of the package to install - A boolean indicating whether or not to ignore the package's dependencies during installation. - A boolean indicating if assembly references from the package should be skipped. - - - - Installs one or more packages that exist on disk in a folder defined in the registry. - - The registry key name (under NuGet's repository key) that defines the folder on disk containing the packages. - A boolean indicating whether the folder contains packages that are pre-unzipped. - A boolean indicating whether the assembly references from the packages should be skipped. - The target project for package installation. - A dictionary of packages/versions to install where the key is the package id and the value is the version. - - If any version of the package is already installed, no action will be taken. - - Dependencies are always ignored. - - - - - - Installs one or more packages that exist on disk in a folder defined in the registry. - - The registry key name (under NuGet's repository key) that defines the folder on disk containing the packages. - A boolean indicating whether the folder contains packages that are pre-unzipped. - A boolean indicating whether the assembly references from the packages should be skipped. - A boolean indicating whether the package's dependencies should be ignored - The target project for package installation. - A dictionary of packages/versions to install where the key is the package id and the value is the version. - - If any version of the package is already installed, no action will be taken. - - - - - Installs one or more packages that are embedded in a Visual Studio Extension Package. - - The Id of the Visual Studio Extension Package. - A boolean indicating whether the folder contains packages that are pre-unzipped. - A boolean indicating whether the assembly references from the packages should be skipped. - The target project for package installation - A dictionary of packages/versions to install where the key is the package id and the value is the version. - - If any version of the package is already installed, no action will be taken. - - Dependencies are always ignored. - - - - - - Installs one or more packages that are embedded in a Visual Studio Extension Package. - - The Id of the Visual Studio Extension Package. - A boolean indicating whether the folder contains packages that are pre-unzipped. - A boolean indicating whether the assembly references from the packages should be skipped. - A boolean indicating whether the package's dependencies should be ignored - The target project for package installation - A dictionary of packages/versions to install where the key is the package id and the value is the version. - - If any version of the package is already installed, no action will be taken. - - - - - This class implements the IConsole interface in order to integrate with the PowerShellHost. - It sends PowerShell host outputs to the VS Output tool window. - - - - - WORKAROUND: - This override is in place to handle the case-sensitive call to Project.Object.References.Item - There are certain assemblies where the AssemblyName and Assembly file name do not match in case - And, this causes a mismatch. For more information, Refer to the RemoveReference of the base class - - - - - - Returns the configuraton path by walking the directory structure to find a nuget.config file. - - - - - Extracts the repository path from a nuget.config settings file - - Full path to the nuget.config file - - - - Returns the list of candidates for nuget config files. - - - - - Load the specified assembly using the information from the executing assembly. - If the executing assembly is strongly signed, use Assembly.Load(); Otherwise, - use Assembly.LoadFrom() - - The name of the assembly to be loaded. - The loaded Assembly instance. - - - - Clears the output in the console - - - - - Creates an instance of the package installer for unit testing of registry-based preinstalled packages. This should only be used for unit tests. - - The optional list of parent registry keys to look in (used for unit tests). - - - - Creates an instance of the package installer for unit testing of extension-based preinstalled packages. This should only be used for unit tests. - - A mock extension manager instance (used for unit tests). - - - - Creates an VsPackageManagerInstance that uses the Active Repository (the repository selected in the console drop down) and uses a fallback repository for dependencies. - - - - - Creates a VsPackageManager that is used to manage install packages. - The local repository is used as the primary source, and other active sources are - used as fall back repository. When all needed packages are available in the local - repository, which is the normal case, this package manager will not need to query - any remote sources at all. Other active sources are - used as fall back repository so that it still works even if user has used - install-package -IgnoreDependencies. - - The VsPackageManager created. - - - - Creates a FallbackRepository with an aggregate repository that also contains the primaryRepository. - - - - - Returns the user specified DependencyVersion in nuget.config. - - The user specified DependencyVersion value in nuget.config. - - - - This class unifies all the different ways of getting services within visual studio. - - - - - Get the safe name of the specified project which guarantees not to conflict with other projects. - - - It tries to return simple name if possible. Otherwise it returns the unique name. - - - - - Get the list of all supported projects in the current solution. This method - recursively iterates through all projects. - - - - - Checks whether the current solution is saved to disk, as opposed to be in memory. - - - - - Gets a list of supported projects currently loaded in the solution - - - - - - Gets a value indicating whether there is a solution open in the IDE. - - - - - Determines if NuGet is used in the project. Currently, it is determined by checking if packages.config is part of the project - - The project which is checked to see if NuGet is used in it - - - - Recursively retrieves all supported child projects of a virtual folder. - - The root container project - - - - If we didn't find the project item at the top level, then we look one more level down. - In VS files can have other nested files like foo.aspx and foo.aspx.cs or web.config and web.debug.config. - These are actually top level files in the file system but are represented as nested project items in VS. - - - - - Returns the unique name of the specified project including all solution folder names containing it. - - - This is different from the DTE Project.UniqueName property, which is the absolute path to the project file. - - - - - DO NOT delete this. This method is only called from PowerShell functional test. - - - - - This method truncates Website projects into the VS-format, e.g. C:\..\WebSite1 - This is used for displaying in the projects combo box. - - - - - This method truncates Website projects into the VS-format, e.g. C:\..\WebSite1, but it uses Name instead of SafeName from Solution Manager. - - - - - Check if the project has the SharedAssetsProject capability. This is true - for shared projects in universal apps. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to All. - - - - - Looks up a localized string similar to Unable to find '{0}' in '{1}' and found multiple versions of '{0}' installed. Please specify a version.. - - - - - Looks up a localized string similar to Found multiple versions of '{0}' installed. Please specify a version.. - - - - - Looks up a localized string similar to Unable to update '{0}'. Found multiple versions installed.. - - - - - Looks up a localized string similar to Some NuGet packages are missing from this solution. Click to restore from your online package sources.. - - - - - Looks up a localized string similar to A new version of NuGet Package Manager is available.. - - - - - Looks up a localized string similar to Each package is licensed to you by its owner. NuGet is not responsible for, nor does it grant any licenses to, third-party packages. Some packages may include dependencies which are governed by additional licenses. Follow the package source (feed) URL to determine any dependencies.. - - - - - Looks up a localized string similar to Type 'get-help NuGet' to see all available NuGet commands.. - - - - - Looks up a localized string similar to Failed to initialize the PowerShell host. If your PowerShell execution policy setting is set to AllSigned, open the Package Manager Console to initialize the host first.. - - - - - Looks up a localized string similar to Added file '{0}' to project '{1}'. - - - - - Looks up a localized string similar to Added reference '{0}' to project '{1}'. - - - - - Looks up a localized string similar to Removed file '{0}'. - - - - - Looks up a localized string similar to Removed file '{0}' from folder '{1}'. - - - - - Looks up a localized string similar to Removed folder '{0}'. - - - - - Looks up a localized string similar to Removed reference '{0}' from project '{1}'. - - - - - Looks up a localized string similar to Each package is licensed to you by its owner. NuGet is not responsible for, nor does it grant any licenses to, third-party packages.. - - - - - Looks up a localized string similar to NuGet Package Manager. - - - - - Looks up a localized string similar to Don't show again. - - - - - Looks up a localized string similar to The project is invalid. - - - - - Looks up a localized string similar to The project '{0}' is unsupported. - - - - - Looks up a localized string similar to Failed to create parent folder for file '{0}' in project {1}.. - - - - - Looks up a localized string similar to Error reading '{0}'.. - - - - - Looks up a localized string similar to Executing script file '{0}'.. - - - - - Looks up a localized string similar to Failed to add reference to '{0}'. Please make sure that it is in the Global Assembly Cache.. - - - - - Looks up a localized string similar to Failed to add reference to '{0}'.. - - - - - Looks up a localized string similar to Case insensitive search for reference '{0}', to be removed, returned more than 1 match. Request could not be performed.. - - - - - Looks up a localized string similar to File Conflict. - - - - - Looks up a localized string similar to Ignore for now. - - - - - Looks up a localized string similar to The provided version string is not a valid semantic version.. - - - - - Looks up a localized string similar to '{0}' already installed.. - - - - - Looks up a localized string similar to Unable to retrieve package list because no source was specified.. - - - - - Looks up a localized string similar to No updates available for '{0}'.. - - - - - Looks up a localized string similar to NuGet official package source. - - - - - Looks up a localized string similar to nuget.org. - - - - - Looks up a localized string similar to nuget. - - - - - Looks up a localized string similar to Search NuGet packages. - - - - - Looks up a localized string similar to NuGet Packages. - - - - - Looks up a localized string similar to NuGet Search. - - - - - Looks up a localized string similar to Search Online for NuGet Packages matching '{0}'. - - - - - Looks up a localized string similar to Operation failed.. - - - - - Looks up a localized string similar to Package Manager. - - - - - Looks up a localized string similar to '{0}' cannot be removed because it in use by '{1}'. - - - - - Looks up a localized string similar to '{0}' was not installed in any project. Update failed.. - - - - - Looks up a localized string similar to Finished configuring this solution to restore NuGet packages on build.. - - - - - Looks up a localized string similar to Do you want to configure this solution to download and restore missing NuGet packages during build? A .nuget folder will be added to the root of the solution that contains files that enable package restore. - - Packages installed into Website projects will not be restored during build. Consider converting those into Web application projects if necessary.. - - - - - Looks up a localized string similar to Downloading package '{0}' failed.. - - - - - Looks up a localized string similar to An error occurred while configuring the solution to restore NuGet packages on build. - - - - - Looks up a localized string similar to An error occurred while trying to restore packages:. - - - - - Looks up a localized string similar to Downloading missing packages.... - - - - - Looks up a localized string similar to Skipped reinstalling package '{0}' in project '{1}' because the package does not exist in the package source.. - - - - - Looks up a localized string similar to Skipped reinstalling package '{0}' because the package does not exist in the package source.. - - - - - Looks up a localized string similar to Configuring the solution to restore NuGet packages on build.... - - - - - Looks up a localized string similar to The package source does not belong to the collection of available sources.. - - - - - Looks up a localized string similar to '{0}' updated successfully.. - - - - - Looks up a localized string similar to Error accessing Extension Manager.. - - - - - Looks up a localized string similar to Could not add all required packages to the project. The following packages failed to install from '{0}':. - - - - - Looks up a localized string similar to The preinstalled packages have a reference to a missing Extension. Could not find an Extension with ID '{0}'.. - - - - - Looks up a localized string similar to The preinstalled packages have a reference to a missing Registry value. Could not find a Registry key with name '{0}' under '{1}'.. - - - - - Looks up a localized string similar to Adding {0}.{1} to project.... - - - - - Looks up a localized string similar to The preinstalled packages are configured to use a Registry-provided package repository but there was an error accessing Registry key '{0}'.. - - - - - Looks up a localized string similar to Attempting to install version '{1}' of '{0}' but the project already includes a different version. Skipping.... - - - - - Looks up a localized string similar to No project was specified.. - - - - - Looks up a localized string similar to Reinstalling '{0}' in project '{1}'.. - - - - - Looks up a localized string similar to Reinstalling '{0}'.. - - - - - Looks up a localized string similar to One or more packages could not be completely uninstalled: {0}. Restart Visual Studio to finish uninstall.. - - - - - Looks up a localized string similar to Restart Now. - - - - - Looks up a localized string similar to _Restore. - - - - - Looks up a localized string similar to Show Details. - - - - - Looks up a localized string similar to Unable to locate the solution directory. Please ensure that the solution has been saved.. - - - - - Looks up a localized string similar to The current environment does not have a solution loaded.. - - - - - Looks up a localized string similar to Package Installation Error. - - - - - Looks up a localized string similar to The project template lists one or more packages with missing, empty, or invalid values for the "id" or "version" attributes. Both attributes are required and must have valid values.. - - - - - Looks up a localized string similar to The "repository" attribute of the package element has an invalid value: '{0}'. Valid values are: 'template' or 'extension'.. - - - - - Looks up a localized string similar to This template wizard can only be applied to single-project or project-item templates.. - - - - - Looks up a localized string similar to The project template is configured to use an Extension-specific package repository but the Extension ID has not been specified. Use the "repositoryId" attribute to specify the Extension ID.. - - - - - Looks up a localized string similar to The project template is configured to use a Registry-provided package repository but the Registry value name has not been specified. Use the "keyName" attribute to specify the Registry value.. - - - - - Looks up a localized string similar to Unable to find package '{0}' version '{1}' from the source '{2}'.. - - - - - Looks up a localized string similar to Unable to find package '{0}'.. - - - - - Looks up a localized string similar to Unable to find package '{0}' in '{1}'.. - - - - - Looks up a localized string similar to Windows 8 Packages. - - - - - Looks up a localized string similar to Directory '{0}' is not empty. Skipping.... - - - - - Looks up a localized string similar to Failed to generate binding redirects for '{0}'. {1}. - - - - - Looks up a localized string similar to Failed to remove package directories that were marked for deletion on Visual Studio restart: {0}. - - - - - Looks up a localized string similar to Failed to remove package directory '{0}' that was marked for deletion on Visual Studio restart.. - - - - - Looks up a localized string similar to Failed to find match for removing reference '{0}'.. - - - - - Looks up a localized string similar to Failed to mark package directory '{0}' for deletion on Visual Studio restart: {1}. - - - - - Looks up a localized string similar to '{0}' already exists. Skipping.... - - - - - Looks up a localized string similar to No exact match found for removing reference '{0}'. Trying case-insensitive search.... - - - - - Looks up a localized string similar to Package {0} of version {1} is not referenced by any project.. - - - - - Looks up a localized string similar to Install failed. Rolling back.... - - - - - Reinstall the specified package in all projects. - - - - - Reinstall the specified package in the specified project. - - - - - Reinstall the specified package in the specified project, taking care of logging too. - - - - - Check to see if this package applies to a project based on 2 criteria: - 1. The package has project content (i.e. content that can be applied to a project lib or content files) - 2. The package is referenced by any other project - 3. The package has at least one dependecy - - This logic will probably fail in one edge case. If there is a meta package that applies to a project - that ended up not being installed in any of the projects and it only exists at solution level. - If this happens, then we think that the following operation applies to the solution instead of showing an error. - To solve that edge case we'd have to walk the graph to find out what the package applies to. - - Technically, the third condition is not totally accurate because a solution-level package can depend on another - solution-level package. However, doing that check here is expensive and we haven't seen such a package. - This condition here is more geared towards guarding against metadata packages, i.e. we shouldn't treat metadata packages - as solution-level ones. - - - - - Runs the specified action and rolls back any installed packages if on failure. - - - - - Runs the action on projects and log any error that may occur. - - - - - Runs action on the project manager and rollsback any package installs if it fails. - - - - - Determines if we need a source file to be under the App_Code folder - - - - - Removes a reference via the DTE. - - This is identical to VsProjectSystem.RemoveReference except in the way we process exceptions. - - - diff --git a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/lib/net40/NuGet.VisualStudio.dll b/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/lib/net40/NuGet.VisualStudio.dll deleted file mode 100644 index 2661c8aa..00000000 Binary files a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/lib/net40/NuGet.VisualStudio.dll and /dev/null differ diff --git a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/tools/install.ps1 b/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/tools/install.ps1 deleted file mode 100644 index afded1b3..00000000 --- a/Extensions/Common/Wizards/packages/NuGet.VisualStudio.2.8.3/tools/install.ps1 +++ /dev/null @@ -1,7 +0,0 @@ -param($installPath, $toolsPath, $package, $project) - -$vsRef = $project.Object.References.Item("NuGet.VisualStudio") -if ($vsRef -and !$vsRef.EmbedInteropTypes) -{ - $vsRef.EmbedInteropTypes = $true -} \ No newline at end of file diff --git a/Extensions/Common/Wizards/packages/repositories.config b/Extensions/Common/Wizards/packages/repositories.config index d88d2fd2..153cb9e1 100644 --- a/Extensions/Common/Wizards/packages/repositories.config +++ b/Extensions/Common/Wizards/packages/repositories.config @@ -2,5 +2,8 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/App.config b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/App.config new file mode 100644 index 00000000..01f6c9b5 --- /dev/null +++ b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/App.config @@ -0,0 +1,13 @@ + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj new file mode 100644 index 00000000..3b7e2ca5 --- /dev/null +++ b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj @@ -0,0 +1,126 @@ + + + + + Debug + AnyCPU + {046940FE-CC75-43E2-9C41-346AEBBBB03B} + Library + Properties + ItemTemplateParametersWizard + ItemTemplateParametersWizard + v4.5 + 512 + + ..\..\VS2012\Deploy\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + true + + + key.snk + + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + True + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + True + + + + + + + + + + + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + True + + + + + IModelTypes.cs + + + ModelType.cs + + + ModelTypeInfo.cs + + + ModelTypesContextDialog.cs + Form + + + ModelTypesContextDialog.Designer.cs + + + ModelTypesDialog.cs + Form + + + ModelTypesDialog.Designer.cs + + + ModelTypesDialogInfo.cs + + + ModelTypesHelper.cs + + + + + + + + + + + ModelTypesContextDialog.resx + + + ModelTypesDialog.resx + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/Properties/AssemblyInfo.cs b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5c368545 --- /dev/null +++ b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ItemTemplateParametersWizard")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ItemTemplateParametersWizard")] +[assembly: AssemblyCopyright("Copyright © Tony Sneed 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6a0b3832-4b10-47be-97b6-16ac342b84a1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/key.snk b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/key.snk new file mode 100644 index 00000000..ebba93de Binary files /dev/null and b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/key.snk differ diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/packages.config b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/packages.config similarity index 58% rename from Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/packages.config rename to Extensions/VS2013/Deploy/ItemTemplateParametersWizard/packages.config index cdbf4e9e..3ef2e967 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/packages.config +++ b/Extensions/VS2013/Deploy/ItemTemplateParametersWizard/packages.config @@ -1,7 +1,5 @@  - - \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/App.config b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/App.config new file mode 100644 index 00000000..6eb246a7 --- /dev/null +++ b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/App.config @@ -0,0 +1,17 @@ + + + + +
+ + + + + + + + + + + + diff --git a/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/Properties/AssemblyInfo.cs b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ec6c6295 --- /dev/null +++ b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TrackableEntities.ItemWizard")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TrackableEntities.ItemWizard")] +[assembly: AssemblyCopyright("Copyright © Tony Sneed 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b9029261-8d84-4e9f-a4f8-32ab0fc6b4d4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("2.0.0.0")] diff --git a/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj new file mode 100644 index 00000000..54fa8467 --- /dev/null +++ b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj @@ -0,0 +1,135 @@ + + + + + Debug + AnyCPU + {8E21F5FD-3941-45A6-B8F8-9628B8A58594} + Library + Properties + TrackableEntities.ItemWizard + TrackableEntities.ItemWizard + v4.5 + 512 + + ..\..\..\VS2013\Deploy\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + true + + + key.snk + + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + True + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + True + + + False + + + True + + + False + ..\lib\Microsoft.VisualStudio.Shell.11.0.dll + + + False + + + + + + + + + + + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + True + + + True + + + + + Dialogs.cs + + + EntityControllerWizard.cs + + + EntityRepoClassWizard.cs + + + EntityRepoInterfaceWizard.cs + + + ModelReflectionHelper.cs + + + WcfServiceTypeWizard.cs + + + WebApiControllerWizard.cs + + + WizardHelper.cs + + + + + + + + + + + {046940fe-cc75-43e2-9c41-346aebbbb03b} + ItemTemplateParametersWizard + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/key.snk b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/key.snk new file mode 100644 index 00000000..ebba93de Binary files /dev/null and b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/key.snk differ diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/packages.config b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/packages.config similarity index 58% rename from Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/packages.config rename to Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/packages.config index cdbf4e9e..3ef2e967 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/packages.config +++ b/Extensions/VS2013/Deploy/TrackableEntities.ItemWizard/packages.config @@ -1,7 +1,5 @@  - - \ No newline at end of file diff --git a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj b/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj index ec428009..ef561334 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj +++ b/Extensions/VS2013/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj @@ -67,19 +67,29 @@ - - - + + ChildWizard.cs + + + Constants.cs + + + EntitiesChildWizard.cs + + + EntitiesWizard.cs + + + RootWizard.cs + - - - + {a1dc5d35-b381-4a89-9922-e83923d4ad2f} EntitiesSelectionWizard diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy.sln b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy.sln index 7196dfe4..4adbe927 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy.sln +++ b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 +VisualStudioVersion = 12.0.40629.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.TemplateWizard", "TrackableEntities.TemplateWizard\TrackableEntities.TemplateWizard.csproj", "{C9646BE1-E999-47BD-8A9D-083017E6269A}" EndProject @@ -14,19 +14,19 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{153FAA EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.VS2013.Deploy", "TrackableEntities.VS2013.Deploy\TrackableEntities.VS2013.Deploy.csproj", "{A1F9A45C-C2A3-4129-ACD6-824A3214E4F8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplateParametersWizard", "..\..\Common\Wizards\ItemTemplateParametersWizard\ItemTemplateParametersWizard.csproj", "{046940FE-CC75-43E2-9C41-346AEBBBB03B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.ItemWizard", "..\..\Common\Wizards\TrackableEntities.ItemWizard\TrackableEntities.ItemWizard.csproj", "{8E21F5FD-3941-45A6-B8F8-9628B8A58594}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CE3D5481-3CE4-453B-BABF-600E12EE8B65}" ProjectSection(SolutionItems) = preProject ..\..\Common\Misc\DebugInfo.txt = ..\..\Common\Misc\DebugInfo.txt ..\..\Common\Misc\DevSetup.txt = ..\..\Common\Misc\DevSetup.txt EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionWizard", "EntitiesSelectionWizard\EntitiesSelectionWizard.csproj", "{A1DC5D35-B381-4A89-9922-E83923D4AD2F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionWizard", "..\..\Common\Wizards\EntitiesSelectionWizard\EntitiesSelectionWizard.csproj", "{A1DC5D35-B381-4A89-9922-E83923D4AD2F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionHarness", "..\..\Common\Wizards\EntitiesSelectionHarness\EntitiesSelectionHarness.csproj", "{A784F6D4-D974-4E5C-9DE1-FA571C9214C9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionHarness", "EntitiesSelectionHarness\EntitiesSelectionHarness.csproj", "{A784F6D4-D974-4E5C-9DE1-FA571C9214C9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplateParametersWizard", "ItemTemplateParametersWizard\ItemTemplateParametersWizard.csproj", "{046940FE-CC75-43E2-9C41-346AEBBBB03B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.ItemWizard", "TrackableEntities.ItemWizard\TrackableEntities.ItemWizard.csproj", "{8E21F5FD-3941-45A6-B8F8-9628B8A58594}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -42,14 +42,6 @@ Global {A1F9A45C-C2A3-4129-ACD6-824A3214E4F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {A1F9A45C-C2A3-4129-ACD6-824A3214E4F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {A1F9A45C-C2A3-4129-ACD6-824A3214E4F8}.Release|Any CPU.Build.0 = Release|Any CPU - {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.Build.0 = Release|Any CPU - {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Release|Any CPU.Build.0 = Release|Any CPU {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Debug|Any CPU.Build.0 = Debug|Any CPU {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -58,6 +50,14 @@ Global {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Release|Any CPU.Build.0 = Release|Any CPU + {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.Build.0 = Release|Any CPU + {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E21F5FD-3941-45A6-B8F8-9628B8A58594}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip index 255385c0..706c3064 100644 Binary files a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip and b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip differ diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip index feebdcac..a5c81973 100644 Binary files a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip and b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip differ diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip index e26143d4..c5bac704 100644 Binary files a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip and b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip differ diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip index 7c4da169..0931ddb5 100644 Binary files a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip and b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip differ diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/TrackableEntities.VS2013.Deploy.csproj b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/TrackableEntities.VS2013.Deploy.csproj index aaa905ef..39b3c758 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/TrackableEntities.VS2013.Deploy.csproj +++ b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/TrackableEntities.VS2013.Deploy.csproj @@ -330,7 +330,7 @@ {8e21f5fd-3941-45a6-b8f8-9628b8a58594} TrackableEntities.ItemWizard - + {A1DC5D35-B381-4A89-9922-E83923D4AD2F} EntitiesSelectionWizard Wizards diff --git a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/source.extension.vsixmanifest b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/source.extension.vsixmanifest index cc37333c..a6152a9c 100644 --- a/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/source.extension.vsixmanifest +++ b/Extensions/VS2013/Deploy/TrackableEntities.VS2013.Deploy/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + Trackable Entities for Visual Studio 2013 N-Tier support for Entity Framework with Visual Studio project and item templates for quickly building n-tier applications using entities that are change-tracked on the client and persisted on the server via WCF or ASP.NET Web API. http://tonysneed.github.io/trackable-entities diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate index e2d7c335..e0ead72d 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj index a5e6d821..c377ab06 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/packages.config deleted file mode 100644 index 53457749..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate index b18662ec..4cef9ba0 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj index 2c326e02..cfe8dc4c 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -38,7 +38,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/packages.config deleted file mode 100644 index d8c3bbe3..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate index 5be1aebb..c6f69b03 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj index 5187c757..8918b70c 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/packages.config deleted file mode 100644 index b8bd56e7..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate index 8d253865..786111b5 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj index 4320e67a..639eb99c 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/packages.config deleted file mode 100644 index 891823f7..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate index 7e105882..342ac6b6 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -26,7 +26,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj index adb0cc9c..ebc23d17 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -53,7 +53,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/packages.config deleted file mode 100644 index 2770f210..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj index 13553e3c..06f75f1e 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj @@ -64,7 +64,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate index c9f5e7e1..6d29a679 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config IExampleService.cs Program.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/packages.config deleted file mode 100644 index 7e617e90..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate index e2d7c335..e0ead72d 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj index a1d800d9..9f1bc57c 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/packages.config deleted file mode 100644 index 53457749..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate index b18662ec..4cef9ba0 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj index bfd07bdc..3bbe1bd1 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -38,7 +38,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/packages.config deleted file mode 100644 index d8c3bbe3..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate index d3880953..9b5403c1 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj index 85ffcbcf..6bf9be18 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj @@ -75,7 +75,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/packages.config deleted file mode 100644 index 4a11e116..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate index 8d253865..786111b5 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj index 5a8bde30..65638fec 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/packages.config deleted file mode 100644 index 4a11e116..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate index 9e75852e..48c9c2bb 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate @@ -22,7 +22,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj index 491c8902..c7965d13 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate index 7e105882..342ac6b6 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -26,7 +26,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj index 745ebac3..739c9900 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -53,7 +53,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/packages.config deleted file mode 100644 index 2770f210..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj index 69b3d1cd..3a4abe16 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj @@ -74,7 +74,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate index e065e238..f359a894 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/packages.config deleted file mode 100644 index 676ffc55..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj index 86cf1ea1..979b61f0 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj @@ -80,7 +80,6 @@ - Web.config diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate index 6cfaf336..9ee89300 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate @@ -18,7 +18,6 @@ ExampleService.svc - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj index 1d45575a..c1a9a97a 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj @@ -66,7 +66,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate index eb26ad08..99fd04df 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config Program.cs AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/packages.config deleted file mode 100644 index 7b984de1..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate index e2d7c335..e0ead72d 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj index cd3de7ce..febe92ea 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/packages.config deleted file mode 100644 index 53457749..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate index b18662ec..4cef9ba0 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj index 99a255d6..9ae26517 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -38,7 +38,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/packages.config deleted file mode 100644 index d8c3bbe3..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate index 5be1aebb..c6f69b03 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj index f453dbf0..c5490494 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/packages.config deleted file mode 100644 index b8bd56e7..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate index f8cd8fe0..0071086e 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj index 5a8bde30..65638fec 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/packages.config deleted file mode 100644 index 891823f7..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate index 9e75852e..48c9c2bb 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate @@ -22,7 +22,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj index 491c8902..c7965d13 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate index 7e105882..342ac6b6 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -26,7 +26,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj index 745ebac3..739c9900 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -53,7 +53,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/packages.config deleted file mode 100644 index 2770f210..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Scripts/jquery-2.1.1.intellisense.js b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Scripts/jquery-2.1.1.intellisense.js deleted file mode 100644 index a88b6c6e..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Scripts/jquery-2.1.1.intellisense.js +++ /dev/null @@ -1,2670 +0,0 @@ -intellisense.annotate(jQuery, { - 'ajax': function() { - /// - /// Perform an asynchronous HTTP (Ajax) request. - /// A string containing the URL to which the request is sent. - /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. - /// - /// - /// - /// Perform an asynchronous HTTP (Ajax) request. - /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). - /// - /// - }, - 'ajaxPrefilter': function() { - /// - /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). - /// An optional string containing one or more space-separated dataTypes - /// A handler to set default values for future Ajax requests. - /// - }, - 'ajaxSetup': function() { - /// - /// Set default values for future Ajax requests. Its use is not recommended. - /// A set of key/value pairs that configure the default Ajax request. All options are optional. - /// - }, - 'ajaxTransport': function() { - /// - /// Creates an object that handles the actual transmission of Ajax data. - /// A string identifying the data type to use - /// A handler to return the new transport object to use with the data type provided in the first argument. - /// - }, - 'boxModel': function() { - /// Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model. - /// - }, - 'browser': function() { - /// Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead. - /// - }, - 'browser.version': function() { - /// The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. - /// - }, - 'Callbacks': function() { - /// - /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. - /// An optional list of space-separated flags that change how the callback list behaves. - /// - /// - }, - 'contains': function() { - /// - /// Check to see if a DOM element is a descendant of another DOM element. - /// The DOM element that may contain the other element. - /// The DOM element that may be contained by (a descendant of) the other element. - /// - /// - }, - 'cssHooks': function() { - /// Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties. - /// - }, - 'data': function() { - /// - /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. - /// The DOM element to query for the data. - /// Name of the data stored. - /// - /// - /// - /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. - /// The DOM element to query for the data. - /// - /// - }, - 'Deferred': function() { - /// - /// A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function. - /// A function that is called just before the constructor returns. - /// - /// - }, - 'dequeue': function() { - /// - /// Execute the next function on the queue for the matched element. - /// A DOM element from which to remove and execute a queued function. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - }, - 'each': function() { - /// - /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. - /// The object or array to iterate over. - /// The function that will be executed on every object. - /// - /// - }, - 'error': function() { - /// - /// Takes a string and throws an exception containing it. - /// The message to send out. - /// - }, - 'extend': function() { - /// - /// Merge the contents of two or more objects together into the first object. - /// An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument. - /// An object containing additional properties to merge in. - /// Additional objects containing properties to merge in. - /// - /// - /// - /// Merge the contents of two or more objects together into the first object. - /// If true, the merge becomes recursive (aka. deep copy). - /// The object to extend. It will receive the new properties. - /// An object containing additional properties to merge in. - /// Additional objects containing properties to merge in. - /// - /// - }, - 'fn.extend': function() { - /// - /// Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. - /// An object to merge onto the jQuery prototype. - /// - /// - }, - 'get': function() { - /// - /// Load data from the server using a HTTP GET request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. - /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). - /// - /// - }, - 'getJSON': function() { - /// - /// Load JSON-encoded data from the server using a GET HTTP request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. - /// - /// - }, - 'getScript': function() { - /// - /// Load a JavaScript file from the server using a GET HTTP request, then execute it. - /// A string containing the URL to which the request is sent. - /// A callback function that is executed if the request succeeds. - /// - /// - }, - 'globalEval': function() { - /// - /// Execute some JavaScript code globally. - /// The JavaScript code to execute. - /// - }, - 'grep': function() { - /// - /// Finds the elements of an array which satisfy a filter function. The original array is not affected. - /// The array to search through. - /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. - /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. - /// - /// - }, - 'hasData': function() { - /// - /// Determine whether an element has any jQuery data associated with it. - /// A DOM element to be checked for data. - /// - /// - }, - 'holdReady': function() { - /// - /// Holds or releases the execution of jQuery's ready event. - /// Indicates whether the ready hold is being requested or released - /// - }, - 'inArray': function() { - /// - /// Search for a specified value within an array and return its index (or -1 if not found). - /// The value to search for. - /// An array through which to search. - /// The index of the array at which to begin the search. The default is 0, which will search the whole array. - /// - /// - }, - 'isArray': function() { - /// - /// Determine whether the argument is an array. - /// Object to test whether or not it is an array. - /// - /// - }, - 'isEmptyObject': function() { - /// - /// Check to see if an object is empty (contains no enumerable properties). - /// The object that will be checked to see if it's empty. - /// - /// - }, - 'isFunction': function() { - /// - /// Determine if the argument passed is a Javascript function object. - /// Object to test whether or not it is a function. - /// - /// - }, - 'isNumeric': function() { - /// - /// Determines whether its argument is a number. - /// The value to be tested. - /// - /// - }, - 'isPlainObject': function() { - /// - /// Check to see if an object is a plain object (created using "{}" or "new Object"). - /// The object that will be checked to see if it's a plain object. - /// - /// - }, - 'isWindow': function() { - /// - /// Determine whether the argument is a window. - /// Object to test whether or not it is a window. - /// - /// - }, - 'isXMLDoc': function() { - /// - /// Check to see if a DOM node is within an XML document (or is an XML document). - /// The DOM node that will be checked to see if it's in an XML document. - /// - /// - }, - 'makeArray': function() { - /// - /// Convert an array-like object into a true JavaScript array. - /// Any object to turn into a native Array. - /// - /// - }, - 'map': function() { - /// - /// Translate all items in an array or object to new array of items. - /// The Array to translate. - /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. - /// - /// - /// - /// Translate all items in an array or object to new array of items. - /// The Array or Object to translate. - /// The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object. - /// - /// - }, - 'merge': function() { - /// - /// Merge the contents of two arrays together into the first array. - /// The first array to merge, the elements of second added. - /// The second array to merge into the first, unaltered. - /// - /// - }, - 'noConflict': function() { - /// - /// Relinquish jQuery's control of the $ variable. - /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). - /// - /// - }, - 'noop': function() { - /// An empty function. - }, - 'now': function() { - /// Return a number representing the current time. - /// - }, - 'param': function() { - /// - /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. - /// An array or object to serialize. - /// - /// - /// - /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. - /// An array or object to serialize. - /// A Boolean indicating whether to perform a traditional "shallow" serialization. - /// - /// - }, - 'parseHTML': function() { - /// - /// Parses a string into an array of DOM nodes. - /// HTML string to be parsed - /// Document element to serve as the context in which the HTML fragment will be created - /// A Boolean indicating whether to include scripts passed in the HTML string - /// - /// - }, - 'parseJSON': function() { - /// - /// Takes a well-formed JSON string and returns the resulting JavaScript object. - /// The JSON string to parse. - /// - /// - }, - 'parseXML': function() { - /// - /// Parses a string into an XML document. - /// a well-formed XML string to be parsed - /// - /// - }, - 'post': function() { - /// - /// Load data from the server using a HTTP POST request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case. - /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). - /// - /// - }, - 'proxy': function() { - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The function whose context will be changed. - /// The object to which the context (this) of the function should be set. - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The object to which the context of the function should be set. - /// The name of the function whose context will be changed (should be a property of the context object). - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The function whose context will be changed. - /// The object to which the context (this) of the function should be set. - /// Any number of arguments to be passed to the function referenced in the function argument. - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The object to which the context of the function should be set. - /// The name of the function whose context will be changed (should be a property of the context object). - /// Any number of arguments to be passed to the function named in the name argument. - /// - /// - }, - 'queue': function() { - /// - /// Manipulate the queue of functions to be executed on the matched element. - /// A DOM element where the array of queued functions is attached. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// An array of functions to replace the current queue contents. - /// - /// - /// - /// Manipulate the queue of functions to be executed on the matched element. - /// A DOM element on which to add a queued function. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// The new function to add to the queue. - /// - /// - }, - 'removeData': function() { - /// - /// Remove a previously-stored piece of data. - /// A DOM element from which to remove data. - /// A string naming the piece of data to remove. - /// - /// - }, - 'sub': function() { - /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. - /// - }, - 'support': function() { - /// A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance. - /// - }, - 'trim': function() { - /// - /// Remove the whitespace from the beginning and end of a string. - /// The string to trim. - /// - /// - }, - 'type': function() { - /// - /// Determine the internal JavaScript [[Class]] of an object. - /// Object to get the internal JavaScript [[Class]] of. - /// - /// - }, - 'unique': function() { - /// - /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. - /// The Array of DOM elements. - /// - /// - }, - 'when': function() { - /// - /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. - /// One or more Deferred objects, or plain JavaScript objects. - /// - /// - }, -}); - -var _1228819969 = jQuery.Callbacks; -jQuery.Callbacks = function(flags) { -var _object = _1228819969(flags); -intellisense.annotate(_object, { - 'add': function() { - /// - /// Add a callback or a collection of callbacks to a callback list. - /// A function, or array of functions, that are to be added to the callback list. - /// - /// - }, - 'disable': function() { - /// Disable a callback list from doing anything more. - /// - }, - 'disabled': function() { - /// Determine if the callbacks list has been disabled. - /// - }, - 'empty': function() { - /// Remove all of the callbacks from a list. - /// - }, - 'fire': function() { - /// - /// Call all of the callbacks with the given arguments - /// The argument or list of arguments to pass back to the callback list. - /// - /// - }, - 'fired': function() { - /// Determine if the callbacks have already been called at least once. - /// - }, - 'fireWith': function() { - /// - /// Call all callbacks in a list with the given context and arguments. - /// A reference to the context in which the callbacks in the list should be fired. - /// An argument, or array of arguments, to pass to the callbacks in the list. - /// - /// - }, - 'has': function() { - /// - /// Determine whether a supplied callback is in a list - /// The callback to search for. - /// - /// - }, - 'lock': function() { - /// Lock a callback list in its current state. - /// - }, - 'locked': function() { - /// Determine if the callbacks list has been locked. - /// - }, - 'remove': function() { - /// - /// Remove a callback or a collection of callbacks from a callback list. - /// A function, or array of functions, that are to be removed from the callback list. - /// - /// - }, -}); - -return _object; -}; -intellisense.redirectDefinition(jQuery.Callbacks, _1228819969); - -var _731531622 = jQuery.Deferred; -jQuery.Deferred = function(func) { -var _object = _731531622(func); -intellisense.annotate(_object, { - 'always': function() { - /// - /// Add handlers to be called when the Deferred object is either resolved or rejected. - /// A function, or array of functions, that is called when the Deferred is resolved or rejected. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. - /// - /// - }, - 'done': function() { - /// - /// Add handlers to be called when the Deferred object is resolved. - /// A function, or array of functions, that are called when the Deferred is resolved. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. - /// - /// - }, - 'fail': function() { - /// - /// Add handlers to be called when the Deferred object is rejected. - /// A function, or array of functions, that are called when the Deferred is rejected. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. - /// - /// - }, - 'isRejected': function() { - /// Determine whether a Deferred object has been rejected. - /// - }, - 'isResolved': function() { - /// Determine whether a Deferred object has been resolved. - /// - }, - 'notify': function() { - /// - /// Call the progressCallbacks on a Deferred object with the given args. - /// Optional arguments that are passed to the progressCallbacks. - /// - /// - }, - 'notifyWith': function() { - /// - /// Call the progressCallbacks on a Deferred object with the given context and args. - /// Context passed to the progressCallbacks as the this object. - /// Optional arguments that are passed to the progressCallbacks. - /// - /// - }, - 'pipe': function() { - /// - /// Utility method to filter and/or chain Deferreds. - /// An optional function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// - /// - /// - /// Utility method to filter and/or chain Deferreds. - /// An optional function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// An optional function that is called when progress notifications are sent to the Deferred. - /// - /// - }, - 'progress': function() { - /// - /// Add handlers to be called when the Deferred object generates progress notifications. - /// A function, or array of functions, to be called when the Deferred generates progress notifications. - /// - /// - }, - 'promise': function() { - /// - /// Return a Deferred's Promise object. - /// Object onto which the promise methods have to be attached - /// - /// - }, - 'reject': function() { - /// - /// Reject a Deferred object and call any failCallbacks with the given args. - /// Optional arguments that are passed to the failCallbacks. - /// - /// - }, - 'rejectWith': function() { - /// - /// Reject a Deferred object and call any failCallbacks with the given context and args. - /// Context passed to the failCallbacks as the this object. - /// An optional array of arguments that are passed to the failCallbacks. - /// - /// - }, - 'resolve': function() { - /// - /// Resolve a Deferred object and call any doneCallbacks with the given args. - /// Optional arguments that are passed to the doneCallbacks. - /// - /// - }, - 'resolveWith': function() { - /// - /// Resolve a Deferred object and call any doneCallbacks with the given context and args. - /// Context passed to the doneCallbacks as the this object. - /// An optional array of arguments that are passed to the doneCallbacks. - /// - /// - }, - 'state': function() { - /// Determine the current state of a Deferred object. - /// - }, - 'then': function() { - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// An optional function that is called when progress notifications are sent to the Deferred. - /// - /// - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function, or array of functions, called when the Deferred is resolved. - /// A function, or array of functions, called when the Deferred is rejected. - /// - /// - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function, or array of functions, called when the Deferred is resolved. - /// A function, or array of functions, called when the Deferred is rejected. - /// A function, or array of functions, called when the Deferred notifies progress. - /// - /// - }, -}); - -return _object; -}; -intellisense.redirectDefinition(jQuery.Callbacks, _731531622); - -intellisense.annotate(jQuery.Event.prototype, { - 'currentTarget': function() { - /// The current DOM element within the event bubbling phase. - /// - }, - 'data': function() { - /// An optional object of data passed to an event method when the current executing handler is bound. - /// - }, - 'delegateTarget': function() { - /// The element where the currently-called jQuery event handler was attached. - /// - }, - 'isDefaultPrevented': function() { - /// Returns whether event.preventDefault() was ever called on this event object. - /// - }, - 'isImmediatePropagationStopped': function() { - /// Returns whether event.stopImmediatePropagation() was ever called on this event object. - /// - }, - 'isPropagationStopped': function() { - /// Returns whether event.stopPropagation() was ever called on this event object. - /// - }, - 'metaKey': function() { - /// Indicates whether the META key was pressed when the event fired. - /// - }, - 'namespace': function() { - /// The namespace specified when the event was triggered. - /// - }, - 'pageX': function() { - /// The mouse position relative to the left edge of the document. - /// - }, - 'pageY': function() { - /// The mouse position relative to the top edge of the document. - /// - }, - 'preventDefault': function() { - /// If this method is called, the default action of the event will not be triggered. - }, - 'relatedTarget': function() { - /// The other DOM element involved in the event, if any. - /// - }, - 'result': function() { - /// The last value returned by an event handler that was triggered by this event, unless the value was undefined. - /// - }, - 'stopImmediatePropagation': function() { - /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. - }, - 'stopPropagation': function() { - /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. - }, - 'target': function() { - /// The DOM element that initiated the event. - /// - }, - 'timeStamp': function() { - /// The difference in milliseconds between the time the browser created the event and January 1, 1970. - /// - }, - 'type': function() { - /// Describes the nature of the event. - /// - }, - 'which': function() { - /// For key or mouse events, this property indicates the specific key or button that was pressed. - /// - }, -}); - -intellisense.annotate(jQuery.fn, { - 'add': function() { - /// - /// Add elements to the set of matched elements. - /// A string representing a selector expression to find additional elements to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// One or more elements to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// An HTML fragment to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// An existing jQuery object to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// A string representing a selector expression to find additional elements to add to the set of matched elements. - /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. - /// - /// - }, - 'addBack': function() { - /// - /// Add the previous set of elements on the stack to the current set, optionally filtered by a selector. - /// A string containing a selector expression to match the current set of elements against. - /// - /// - }, - 'addClass': function() { - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// One or more space-separated classes to be added to the class attribute of each matched element. - /// - /// - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'after': function() { - /// - /// Insert content, specified by the parameter, after each element in the set of matched elements. - /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, after each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'ajaxComplete': function() { - /// - /// Register a handler to be called when Ajax requests complete. This is an AjaxEvent. - /// The function to be invoked. - /// - /// - }, - 'ajaxError': function() { - /// - /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxSend': function() { - /// - /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxStart': function() { - /// - /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxStop': function() { - /// - /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxSuccess': function() { - /// - /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'all': function() { - /// Selects all elements. - }, - 'andSelf': function() { - /// Add the previous set of elements on the stack to the current set. - /// - }, - 'animate': function() { - /// - /// Perform a custom animation of a set of CSS properties. - /// An object of CSS properties and values that the animation will move toward. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Perform a custom animation of a set of CSS properties. - /// An object of CSS properties and values that the animation will move toward. - /// A map of additional options to pass to the method. - /// - /// - }, - 'animated': function() { - /// Select all elements that are in the progress of an animation at the time the selector is run. - }, - 'append': function() { - /// - /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. - /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'appendTo': function() { - /// - /// Insert every element in the set of matched elements to the end of the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. - /// - /// - }, - 'attr': function() { - /// - /// Set one or more attributes for the set of matched elements. - /// The name of the attribute to set. - /// A value to set for the attribute. - /// - /// - /// - /// Set one or more attributes for the set of matched elements. - /// An object of attribute-value pairs to set. - /// - /// - /// - /// Set one or more attributes for the set of matched elements. - /// The name of the attribute to set. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments. - /// - /// - }, - 'attributeContains': function() { - /// - /// Selects elements that have the specified attribute with a value containing the a given substring. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeContainsPrefix': function() { - /// - /// Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-). - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeContainsWord': function() { - /// - /// Selects elements that have the specified attribute with a value containing a given word, delimited by spaces. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeEndsWith': function() { - /// - /// Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeEquals': function() { - /// - /// Selects elements that have the specified attribute with a value exactly equal to a certain value. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeHas': function() { - /// - /// Selects elements that have the specified attribute, with any value. - /// An attribute name. - /// - }, - 'attributeMultiple': function() { - /// - /// Matches elements that match all of the specified attribute filters. - /// An attribute filter. - /// Another attribute filter, reducing the selection even more - /// As many more attribute filters as necessary - /// - }, - 'attributeNotEqual': function() { - /// - /// Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeStartsWith': function() { - /// - /// Selects elements that have the specified attribute with a value beginning exactly with a given string. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'before': function() { - /// - /// Insert content, specified by the parameter, before each element in the set of matched elements. - /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, before each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'bind': function() { - /// - /// Attach a handler to an event for the elements. - /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Attach a handler to an event for the elements. - /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true. - /// - /// - /// - /// Attach a handler to an event for the elements. - /// An object containing one or more DOM event types and functions to execute for them. - /// - /// - }, - 'blur': function() { - /// - /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'button': function() { - /// Selects all button elements and elements of type button. - }, - 'change': function() { - /// - /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'checkbox': function() { - /// Selects all elements of type checkbox. - }, - 'checked': function() { - /// Matches all elements that are checked or selected. - }, - 'child': function() { - /// - /// Selects all direct child elements specified by "child" of elements specified by "parent". - /// Any valid selector. - /// A selector to filter the child elements. - /// - }, - 'children': function() { - /// - /// Get the children of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'class': function() { - /// - /// Selects all elements with the given class. - /// A class to search for. An element can have multiple classes; only one of them must match. - /// - }, - 'clearQueue': function() { - /// - /// Remove from the queue all items that have not yet been run. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'click': function() { - /// - /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'clone': function() { - /// - /// Create a deep copy of the set of matched elements. - /// A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well. - /// - /// - /// - /// Create a deep copy of the set of matched elements. - /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. - /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). - /// - /// - }, - 'closest': function() { - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A string containing a selector expression to match elements against. - /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A jQuery object to match elements against. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// An element to match elements against. - /// - /// - }, - 'contains': function() { - /// - /// Select all elements that contain the specified text. - /// A string of text to look for. It's case sensitive. - /// - }, - 'contents': function() { - /// Get the children of each element in the set of matched elements, including text and comment nodes. - /// - }, - 'context': function() { - /// The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. - /// - }, - 'css': function() { - /// - /// Set one or more CSS properties for the set of matched elements. - /// A CSS property name. - /// A value to set for the property. - /// - /// - /// - /// Set one or more CSS properties for the set of matched elements. - /// A CSS property name. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. - /// - /// - /// - /// Set one or more CSS properties for the set of matched elements. - /// An object of property-value pairs to set. - /// - /// - }, - 'data': function() { - /// - /// Store arbitrary data associated with the matched elements. - /// A string naming the piece of data to set. - /// The new data value; it can be any Javascript type including Array or Object. - /// - /// - /// - /// Store arbitrary data associated with the matched elements. - /// An object of key-value pairs of data to update. - /// - /// - }, - 'dblclick': function() { - /// - /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'delay': function() { - /// - /// Set a timer to delay execution of subsequent items in the queue. - /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'delegate': function() { - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A plain object of one or more event types and functions to execute for them. - /// - /// - }, - 'dequeue': function() { - /// - /// Execute the next function on the queue for the matched elements. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'descendant': function() { - /// - /// Selects all elements that are descendants of a given ancestor. - /// Any valid selector. - /// A selector to filter the descendant elements. - /// - }, - 'detach': function() { - /// - /// Remove the set of matched elements from the DOM. - /// A selector expression that filters the set of matched elements to be removed. - /// - /// - }, - 'die': function() { - /// - /// Remove event handlers previously attached using .live() from the elements. - /// A string containing a JavaScript event type, such as click or keydown. - /// The function that is no longer to be executed. - /// - /// - /// - /// Remove event handlers previously attached using .live() from the elements. - /// A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed. - /// - /// - }, - 'disabled': function() { - /// Selects all elements that are disabled. - }, - 'each': function() { - /// - /// Iterate over a jQuery object, executing a function for each matched element. - /// A function to execute for each matched element. - /// - /// - }, - 'element': function() { - /// - /// Selects all elements with the given tag name. - /// An element to search for. Refers to the tagName of DOM nodes. - /// - }, - 'empty': function() { - /// Select all elements that have no children (including text nodes). - }, - 'enabled': function() { - /// Selects all elements that are enabled. - }, - 'end': function() { - /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. - /// - }, - 'eq': function() { - /// - /// Select the element at index n within the matched set. - /// Zero-based index of the element to match. - /// - /// - /// Select the element at index n within the matched set. - /// Zero-based index of the element to match, counting backwards from the last element. - /// - }, - 'error': function() { - /// - /// Bind an event handler to the "error" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "error" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'even': function() { - /// Selects even elements, zero-indexed. See also odd. - }, - 'fadeIn': function() { - /// - /// Display the matched elements by fading them to opaque. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements by fading them to opaque. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements by fading them to opaque. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeOut': function() { - /// - /// Hide the matched elements by fading them to transparent. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements by fading them to transparent. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements by fading them to transparent. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeTo': function() { - /// - /// Adjust the opacity of the matched elements. - /// A string or number determining how long the animation will run. - /// A number between 0 and 1 denoting the target opacity. - /// A function to call once the animation is complete. - /// - /// - /// - /// Adjust the opacity of the matched elements. - /// A string or number determining how long the animation will run. - /// A number between 0 and 1 denoting the target opacity. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeToggle': function() { - /// - /// Display or hide the matched elements by animating their opacity. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements by animating their opacity. - /// A map of additional options to pass to the method. - /// - /// - }, - 'file': function() { - /// Selects all elements of type file. - }, - 'filter': function() { - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// A string containing a selector expression to match the current set of elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// A function used as a test for each element in the set. this is the current DOM element. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// An element to match the current set of elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// An existing jQuery object to match the current set of elements against. - /// - /// - }, - 'find': function() { - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// A jQuery object to match elements against. - /// - /// - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// An element to match elements against. - /// - /// - }, - 'finish': function() { - /// - /// Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements. - /// The name of the queue in which to stop animations. - /// - /// - }, - 'first': function() { - /// Selects the first matched element. - }, - 'first-child': function() { - /// Selects all elements that are the first child of their parent. - }, - 'first-of-type': function() { - /// Selects all elements that are the first among siblings of the same element name. - }, - 'focus': function() { - /// - /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'focusin': function() { - /// - /// Bind an event handler to the "focusin" event. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focusin" event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'focusout': function() { - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'get': function() { - /// - /// Retrieve one of the DOM elements matched by the jQuery object. - /// A zero-based integer indicating which element to retrieve. - /// - /// - }, - 'gt': function() { - /// - /// Select all elements at an index greater than index within the matched set. - /// Zero-based index. - /// - /// - /// Select all elements at an index greater than index within the matched set. - /// Zero-based index, counting backwards from the last element. - /// - }, - 'has': function() { - /// - /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. - /// A DOM element to match elements against. - /// - /// - }, - 'hasClass': function() { - /// - /// Determine whether any of the matched elements are assigned the given class. - /// The class name to search for. - /// - /// - }, - 'header': function() { - /// Selects all elements that are headers, like h1, h2, h3 and so on. - }, - 'height': function() { - /// - /// Set the CSS height of every matched element. - /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). - /// - /// - /// - /// Set the CSS height of every matched element. - /// A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'hidden': function() { - /// Selects all elements that are hidden. - }, - 'hide': function() { - /// - /// Hide the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'hover': function() { - /// - /// Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. - /// A function to execute when the mouse pointer enters the element. - /// A function to execute when the mouse pointer leaves the element. - /// - /// - }, - 'html': function() { - /// - /// Set the HTML contents of each element in the set of matched elements. - /// A string of HTML to set as the content of each matched element. - /// - /// - /// - /// Set the HTML contents of each element in the set of matched elements. - /// A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set. - /// - /// - }, - 'id': function() { - /// - /// Selects a single element with the given id attribute. - /// An ID to search for, specified via the id attribute of an element. - /// - }, - 'image': function() { - /// Selects all elements of type image. - }, - 'index': function() { - /// - /// Search for a given element from among the matched elements. - /// A selector representing a jQuery collection in which to look for an element. - /// - /// - /// - /// Search for a given element from among the matched elements. - /// The DOM element or first element within the jQuery object to look for. - /// - /// - }, - 'init': function() { - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A string containing a selector expression - /// A DOM Element, Document, or jQuery to use as context - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A DOM element to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An array containing a set of DOM elements to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A plain object to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An existing jQuery object to clone. - /// - /// - }, - 'innerHeight': function() { - /// Get the current computed height for the first element in the set of matched elements, including padding but not border. - /// - }, - 'innerWidth': function() { - /// Get the current computed width for the first element in the set of matched elements, including padding but not border. - /// - }, - 'input': function() { - /// Selects all input, textarea, select and button elements. - }, - 'insertAfter': function() { - /// - /// Insert every element in the set of matched elements after the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. - /// - /// - }, - 'insertBefore': function() { - /// - /// Insert every element in the set of matched elements before the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. - /// - /// - }, - 'is': function() { - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// An existing jQuery object to match the current set of elements against. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// An element to match the current set of elements against. - /// - /// - }, - 'jquery': function() { - /// A string containing the jQuery version number. - /// - }, - 'keydown': function() { - /// - /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'keypress': function() { - /// - /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'keyup': function() { - /// - /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'lang': function() { - /// - /// Selects all elements of the specified language. - /// A language code. - /// - }, - 'last': function() { - /// Selects the last matched element. - }, - 'last-child': function() { - /// Selects all elements that are the last child of their parent. - }, - 'last-of-type': function() { - /// Selects all elements that are the last among siblings of the same element name. - }, - 'length': function() { - /// The number of elements in the jQuery object. - /// - }, - 'live': function() { - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A plain object of one or more JavaScript event types and functions to execute for them. - /// - /// - }, - 'load': function() { - /// - /// Bind an event handler to the "load" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "load" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'lt': function() { - /// - /// Select all elements at an index less than index within the matched set. - /// Zero-based index. - /// - /// - /// Select all elements at an index less than index within the matched set. - /// Zero-based index, counting backwards from the last element. - /// - }, - 'map': function() { - /// - /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. - /// A function object that will be invoked for each element in the current set. - /// - /// - }, - 'mousedown': function() { - /// - /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseenter': function() { - /// - /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseleave': function() { - /// - /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mousemove': function() { - /// - /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseout': function() { - /// - /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseover': function() { - /// - /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseup': function() { - /// - /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'multiple': function() { - /// - /// Selects the combined results of all the specified selectors. - /// Any valid selector. - /// Another valid selector. - /// As many more valid selectors as you like. - /// - }, - 'next': function() { - /// - /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'next adjacent': function() { - /// - /// Selects all next elements matching "next" that are immediately preceded by a sibling "prev". - /// Any valid selector. - /// A selector to match the element that is next to the first selector. - /// - }, - 'next siblings': function() { - /// - /// Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector. - /// Any valid selector. - /// A selector to filter elements that are the following siblings of the first selector. - /// - }, - 'nextAll': function() { - /// - /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'nextUntil': function() { - /// - /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. - /// A string containing a selector expression to indicate where to stop matching following sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. - /// A DOM node or jQuery object indicating where to stop matching following sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'not': function() { - /// - /// Remove elements from the set of matched elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// One or more DOM elements to remove from the matched set. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// A function used as a test for each element in the set. this is the current DOM element. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// An existing jQuery object to match the current set of elements against. - /// - /// - }, - 'nth-child': function() { - /// - /// Selects all elements that are the nth-child of their parent. - /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) ) - /// - }, - 'nth-last-child': function() { - /// - /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. - /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) ) - /// - }, - 'nth-last-of-type': function() { - /// - /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. - /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) ) - /// - }, - 'nth-of-type': function() { - /// - /// Selects all elements that are the nth child of their parent in relation to siblings with the same element name. - /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) ) - /// - }, - 'odd': function() { - /// Selects odd elements, zero-indexed. See also even. - }, - 'off': function() { - /// - /// Remove an event handler. - /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". - /// A selector which should match the one originally passed to .on() when attaching event handlers. - /// A handler function previously attached for the event(s), or the special value false. - /// - /// - /// - /// Remove an event handler. - /// An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s). - /// A selector which should match the one originally passed to .on() when attaching event handlers. - /// - /// - }, - 'offset': function() { - /// - /// Set the current coordinates of every element in the set of matched elements, relative to the document. - /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. - /// - /// - /// - /// Set the current coordinates of every element in the set of matched elements, relative to the document. - /// A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties. - /// - /// - }, - 'offsetParent': function() { - /// Get the closest ancestor element that is positioned. - /// - }, - 'on': function() { - /// - /// Attach an event handler function for one or more events to the selected elements. - /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". - /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event is triggered. - /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. - /// - /// - /// - /// Attach an event handler function for one or more events to the selected elements. - /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). - /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event occurs. - /// - /// - }, - 'one': function() { - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". - /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event is triggered. - /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. - /// - /// - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). - /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event occurs. - /// - /// - }, - 'only-child': function() { - /// Selects all elements that are the only child of their parent. - }, - 'only-of-type': function() { - /// Selects all elements that have no siblings with the same element name. - }, - 'outerHeight': function() { - /// - /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. - /// A Boolean indicating whether to include the element's margin in the calculation. - /// - /// - }, - 'outerWidth': function() { - /// - /// Get the current computed width for the first element in the set of matched elements, including padding and border. - /// A Boolean indicating whether to include the element's margin in the calculation. - /// - /// - }, - 'parent': function() { - /// - /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'parents': function() { - /// - /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'parentsUntil': function() { - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A string containing a selector expression to indicate where to stop matching ancestor elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A DOM node or jQuery object indicating where to stop matching ancestor elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'password': function() { - /// Selects all elements of type password. - }, - 'position': function() { - /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. - /// - }, - 'prepend': function() { - /// - /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. - /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'prependTo': function() { - /// - /// Insert every element in the set of matched elements to the beginning of the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. - /// - /// - }, - 'prev': function() { - /// - /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'prevAll': function() { - /// - /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'prevUntil': function() { - /// - /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A DOM node or jQuery object indicating where to stop matching preceding sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'promise': function() { - /// - /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. - /// The type of queue that needs to be observed. - /// Object onto which the promise methods have to be attached - /// - /// - }, - 'prop': function() { - /// - /// Set one or more properties for the set of matched elements. - /// The name of the property to set. - /// A value to set for the property. - /// - /// - /// - /// Set one or more properties for the set of matched elements. - /// An object of property-value pairs to set. - /// - /// - /// - /// Set one or more properties for the set of matched elements. - /// The name of the property to set. - /// A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element. - /// - /// - }, - 'pushStack': function() { - /// - /// Add a collection of DOM elements onto the jQuery stack. - /// An array of elements to push onto the stack and make into a new jQuery object. - /// - /// - /// - /// Add a collection of DOM elements onto the jQuery stack. - /// An array of elements to push onto the stack and make into a new jQuery object. - /// The name of a jQuery method that generated the array of elements. - /// The arguments that were passed in to the jQuery method (for serialization). - /// - /// - }, - 'queue': function() { - /// - /// Manipulate the queue of functions to be executed, once for each matched element. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// An array of functions to replace the current queue contents. - /// - /// - /// - /// Manipulate the queue of functions to be executed, once for each matched element. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// The new function to add to the queue, with a function to call that will dequeue the next item. - /// - /// - }, - 'radio': function() { - /// Selects all elements of type radio. - }, - 'ready': function() { - /// - /// Specify a function to execute when the DOM is fully loaded. - /// A function to execute after the DOM is ready. - /// - /// - }, - 'remove': function() { - /// - /// Remove the set of matched elements from the DOM. - /// A selector expression that filters the set of matched elements to be removed. - /// - /// - }, - 'removeAttr': function() { - /// - /// Remove an attribute from each element in the set of matched elements. - /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. - /// - /// - }, - 'removeClass': function() { - /// - /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. - /// One or more space-separated classes to be removed from the class attribute of each matched element. - /// - /// - /// - /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. - /// A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments. - /// - /// - }, - 'removeData': function() { - /// - /// Remove a previously-stored piece of data. - /// A string naming the piece of data to delete. - /// - /// - /// - /// Remove a previously-stored piece of data. - /// An array or space-separated string naming the pieces of data to delete. - /// - /// - }, - 'removeProp': function() { - /// - /// Remove a property for the set of matched elements. - /// The name of the property to remove. - /// - /// - }, - 'replaceAll': function() { - /// - /// Replace each target element with the set of matched elements. - /// A selector string, jQuery object, or DOM element reference indicating which element(s) to replace. - /// - /// - }, - 'replaceWith': function() { - /// - /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. - /// The content to insert. May be an HTML string, DOM element, or jQuery object. - /// - /// - /// - /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. - /// A function that returns content with which to replace the set of matched elements. - /// - /// - }, - 'reset': function() { - /// Selects all elements of type reset. - }, - 'resize': function() { - /// - /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'root': function() { - /// Selects the element that is the root of the document. - }, - 'scroll': function() { - /// - /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'scrollLeft': function() { - /// - /// Set the current horizontal position of the scroll bar for each of the set of matched elements. - /// An integer indicating the new position to set the scroll bar to. - /// - /// - }, - 'scrollTop': function() { - /// - /// Set the current vertical position of the scroll bar for each of the set of matched elements. - /// An integer indicating the new position to set the scroll bar to. - /// - /// - }, - 'select': function() { - /// - /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'selected': function() { - /// Selects all elements that are selected. - }, - 'selector': function() { - /// A selector representing selector passed to jQuery(), if any, when creating the original set. - /// - }, - 'serialize': function() { - /// Encode a set of form elements as a string for submission. - /// - }, - 'serializeArray': function() { - /// Encode a set of form elements as an array of names and values. - /// - }, - 'show': function() { - /// - /// Display the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'siblings': function() { - /// - /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'size': function() { - /// Return the number of elements in the jQuery object. - /// - }, - 'slice': function() { - /// - /// Reduce the set of matched elements to a subset specified by a range of indices. - /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. - /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. - /// - /// - }, - 'slideDown': function() { - /// - /// Display the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'slideToggle': function() { - /// - /// Display or hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display or hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'slideUp': function() { - /// - /// Hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'stop': function() { - /// - /// Stop the currently-running animation on the matched elements. - /// A Boolean indicating whether to remove queued animation as well. Defaults to false. - /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. - /// - /// - /// - /// Stop the currently-running animation on the matched elements. - /// The name of the queue in which to stop animations. - /// A Boolean indicating whether to remove queued animation as well. Defaults to false. - /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. - /// - /// - }, - 'submit': function() { - /// - /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'target': function() { - /// Selects the target element indicated by the fragment identifier of the document's URI. - }, - 'text': function() { - /// - /// Set the content of each element in the set of matched elements to the specified text. - /// A string of text to set as the content of each matched element. - /// - /// - /// - /// Set the content of each element in the set of matched elements to the specified text. - /// A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments. - /// - /// - }, - 'toArray': function() { - /// Retrieve all the DOM elements contained in the jQuery set, as an array. - /// - }, - 'toggle': function() { - /// - /// Display or hide the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display or hide the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements. - /// A Boolean indicating whether to show or hide the elements. - /// - /// - }, - 'toggleClass': function() { - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// One or more class names (separated by spaces) to be toggled for each element in the matched set. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// One or more class names (separated by spaces) to be toggled for each element in the matched set. - /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// A boolean value to determine whether the class should be added or removed. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments. - /// A boolean value to determine whether the class should be added or removed. - /// - /// - }, - 'trigger': function() { - /// - /// Execute all handlers and behaviors attached to the matched elements for the given event type. - /// A string containing a JavaScript event type, such as click or submit. - /// Additional parameters to pass along to the event handler. - /// - /// - /// - /// Execute all handlers and behaviors attached to the matched elements for the given event type. - /// A jQuery.Event object. - /// Additional parameters to pass along to the event handler. - /// - /// - }, - 'triggerHandler': function() { - /// - /// Execute all handlers attached to an element for an event. - /// A string containing a JavaScript event type, such as click or submit. - /// An array of additional parameters to pass along to the event handler. - /// - /// - }, - 'unbind': function() { - /// - /// Remove a previously-attached event handler from the elements. - /// A string containing a JavaScript event type, such as click or submit. - /// The function that is to be no longer executed. - /// - /// - /// - /// Remove a previously-attached event handler from the elements. - /// A string containing a JavaScript event type, such as click or submit. - /// Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ). - /// - /// - /// - /// Remove a previously-attached event handler from the elements. - /// A JavaScript event object as passed to an event handler. - /// - /// - }, - 'undelegate': function() { - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// A string containing a JavaScript event type, such as "click" or "keydown" - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// A string containing a JavaScript event type, such as "click" or "keydown" - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// An object of one or more event types and previously bound functions to unbind from them. - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A string containing a namespace to unbind all events from. - /// - /// - }, - 'unload': function() { - /// - /// Bind an event handler to the "unload" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "unload" JavaScript event. - /// A plain object of data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'unwrap': function() { - /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. - /// - }, - 'val': function() { - /// - /// Set the value of each element in the set of matched elements. - /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. - /// - /// - /// - /// Set the value of each element in the set of matched elements. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. - /// - /// - }, - 'visible': function() { - /// Selects all elements that are visible. - }, - 'width': function() { - /// - /// Set the CSS width of each element in the set of matched elements. - /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). - /// - /// - /// - /// Set the CSS width of each element in the set of matched elements. - /// A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'wrap': function() { - /// - /// Wrap an HTML structure around each element in the set of matched elements. - /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. - /// - /// - /// - /// Wrap an HTML structure around each element in the set of matched elements. - /// A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'wrapAll': function() { - /// - /// Wrap an HTML structure around all elements in the set of matched elements. - /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. - /// - /// - }, - 'wrapInner': function() { - /// - /// Wrap an HTML structure around the content of each element in the set of matched elements. - /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. - /// - /// - /// - /// Wrap an HTML structure around the content of each element in the set of matched elements. - /// A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, -}); - -intellisense.annotate(window, { - '$': function() { - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A string containing a selector expression - /// A DOM Element, Document, or jQuery to use as context - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A DOM element to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An array containing a set of DOM elements to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A plain object to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An existing jQuery object to clone. - /// - /// - }, -}); - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.csproj index 289af5ff..ff40935c 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.csproj @@ -279,7 +279,6 @@ - @@ -321,7 +320,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.vstemplate index c838e3bd..ea94e445 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/WebApi.vstemplate @@ -191,7 +191,6 @@ Global.asax Global.asax.cs - packages.config Project_Readme.html AssemblyInfo.cs @@ -200,7 +199,6 @@ _references.js bootstrap.js bootstrap.min.js - jquery-2.1.1.intellisense.js jquery-2.1.1.js jquery-2.1.1.min.js jquery-2.1.1.min.map diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/packages.config deleted file mode 100644 index 8a30166b..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/packages.config +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.csproj index a093aea2..a026aed1 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.csproj @@ -66,7 +66,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.vstemplate index eb26ad08..99fd04df 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/ConsoleClient.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config Program.cs AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/packages.config deleted file mode 100644 index 7b984de1..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/ConsoleClient/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/Entities.Client.Net45.vstemplate index e2d7c335..e0ead72d 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/Entities.Client.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj index cd3de7ce..febe92ea 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/packages.config deleted file mode 100644 index 53457749..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Net45/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/Entities.Client.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/Entities.Client.Portable.vstemplate index b18662ec..4cef9ba0 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/Entities.Client.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj index 99a255d6..9ae26517 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -38,7 +38,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/packages.config deleted file mode 100644 index d8c3bbe3..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Client.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/Entities.Service.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/Entities.Service.Net45.vstemplate index 5be1aebb..c6f69b03 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/Entities.Service.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/TrackableService.Entities.csproj index f453dbf0..c5490494 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/TrackableService.Entities.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/TrackableService.Entities.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/packages.config deleted file mode 100644 index b8bd56e7..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Service.Net45/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate index f8cd8fe0..0071086e 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -31,7 +31,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj index 5a8bde30..65638fec 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -71,7 +71,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/packages.config deleted file mode 100644 index 891823f7..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Net45/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate index 9e75852e..48c9c2bb 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate @@ -22,7 +22,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj index 491c8902..c7965d13 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj @@ -62,7 +62,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate index 7e105882..342ac6b6 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -26,7 +26,6 @@ - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj index 745ebac3..739c9900 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -53,7 +53,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/packages.config deleted file mode 100644 index 2770f210..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Entities.Shared.Portable/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.csproj index 38f27387..73d7b4b9 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.csproj @@ -87,7 +87,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.vstemplate index cfc5fc1a..c0c388ab 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/Service.EF.vstemplate @@ -19,7 +19,6 @@ App.config - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/packages.config deleted file mode 100644 index 5f515e3d..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.EF/packages.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.csproj index aa3150d1..63338676 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.csproj @@ -71,9 +71,6 @@ $saferootprojectname$.$serviceentitiestemplate$ - - - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.vstemplate index f57c07a2..d74538de 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/Service.Persistence.vstemplate @@ -20,7 +20,6 @@ UpdateConcurrencyException.cs UpdateException.cs - packages.config AssemblyInfo.cs diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/packages.config deleted file mode 100644 index 244e966f..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/Service.Persistence/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/Scripts/jquery-2.1.1.intellisense.js b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/Scripts/jquery-2.1.1.intellisense.js deleted file mode 100644 index a88b6c6e..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/Scripts/jquery-2.1.1.intellisense.js +++ /dev/null @@ -1,2670 +0,0 @@ -intellisense.annotate(jQuery, { - 'ajax': function() { - /// - /// Perform an asynchronous HTTP (Ajax) request. - /// A string containing the URL to which the request is sent. - /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. - /// - /// - /// - /// Perform an asynchronous HTTP (Ajax) request. - /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). - /// - /// - }, - 'ajaxPrefilter': function() { - /// - /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). - /// An optional string containing one or more space-separated dataTypes - /// A handler to set default values for future Ajax requests. - /// - }, - 'ajaxSetup': function() { - /// - /// Set default values for future Ajax requests. Its use is not recommended. - /// A set of key/value pairs that configure the default Ajax request. All options are optional. - /// - }, - 'ajaxTransport': function() { - /// - /// Creates an object that handles the actual transmission of Ajax data. - /// A string identifying the data type to use - /// A handler to return the new transport object to use with the data type provided in the first argument. - /// - }, - 'boxModel': function() { - /// Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model. - /// - }, - 'browser': function() { - /// Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead. - /// - }, - 'browser.version': function() { - /// The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. - /// - }, - 'Callbacks': function() { - /// - /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. - /// An optional list of space-separated flags that change how the callback list behaves. - /// - /// - }, - 'contains': function() { - /// - /// Check to see if a DOM element is a descendant of another DOM element. - /// The DOM element that may contain the other element. - /// The DOM element that may be contained by (a descendant of) the other element. - /// - /// - }, - 'cssHooks': function() { - /// Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties. - /// - }, - 'data': function() { - /// - /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. - /// The DOM element to query for the data. - /// Name of the data stored. - /// - /// - /// - /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. - /// The DOM element to query for the data. - /// - /// - }, - 'Deferred': function() { - /// - /// A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function. - /// A function that is called just before the constructor returns. - /// - /// - }, - 'dequeue': function() { - /// - /// Execute the next function on the queue for the matched element. - /// A DOM element from which to remove and execute a queued function. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - }, - 'each': function() { - /// - /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. - /// The object or array to iterate over. - /// The function that will be executed on every object. - /// - /// - }, - 'error': function() { - /// - /// Takes a string and throws an exception containing it. - /// The message to send out. - /// - }, - 'extend': function() { - /// - /// Merge the contents of two or more objects together into the first object. - /// An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument. - /// An object containing additional properties to merge in. - /// Additional objects containing properties to merge in. - /// - /// - /// - /// Merge the contents of two or more objects together into the first object. - /// If true, the merge becomes recursive (aka. deep copy). - /// The object to extend. It will receive the new properties. - /// An object containing additional properties to merge in. - /// Additional objects containing properties to merge in. - /// - /// - }, - 'fn.extend': function() { - /// - /// Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. - /// An object to merge onto the jQuery prototype. - /// - /// - }, - 'get': function() { - /// - /// Load data from the server using a HTTP GET request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. - /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). - /// - /// - }, - 'getJSON': function() { - /// - /// Load JSON-encoded data from the server using a GET HTTP request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. - /// - /// - }, - 'getScript': function() { - /// - /// Load a JavaScript file from the server using a GET HTTP request, then execute it. - /// A string containing the URL to which the request is sent. - /// A callback function that is executed if the request succeeds. - /// - /// - }, - 'globalEval': function() { - /// - /// Execute some JavaScript code globally. - /// The JavaScript code to execute. - /// - }, - 'grep': function() { - /// - /// Finds the elements of an array which satisfy a filter function. The original array is not affected. - /// The array to search through. - /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. - /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. - /// - /// - }, - 'hasData': function() { - /// - /// Determine whether an element has any jQuery data associated with it. - /// A DOM element to be checked for data. - /// - /// - }, - 'holdReady': function() { - /// - /// Holds or releases the execution of jQuery's ready event. - /// Indicates whether the ready hold is being requested or released - /// - }, - 'inArray': function() { - /// - /// Search for a specified value within an array and return its index (or -1 if not found). - /// The value to search for. - /// An array through which to search. - /// The index of the array at which to begin the search. The default is 0, which will search the whole array. - /// - /// - }, - 'isArray': function() { - /// - /// Determine whether the argument is an array. - /// Object to test whether or not it is an array. - /// - /// - }, - 'isEmptyObject': function() { - /// - /// Check to see if an object is empty (contains no enumerable properties). - /// The object that will be checked to see if it's empty. - /// - /// - }, - 'isFunction': function() { - /// - /// Determine if the argument passed is a Javascript function object. - /// Object to test whether or not it is a function. - /// - /// - }, - 'isNumeric': function() { - /// - /// Determines whether its argument is a number. - /// The value to be tested. - /// - /// - }, - 'isPlainObject': function() { - /// - /// Check to see if an object is a plain object (created using "{}" or "new Object"). - /// The object that will be checked to see if it's a plain object. - /// - /// - }, - 'isWindow': function() { - /// - /// Determine whether the argument is a window. - /// Object to test whether or not it is a window. - /// - /// - }, - 'isXMLDoc': function() { - /// - /// Check to see if a DOM node is within an XML document (or is an XML document). - /// The DOM node that will be checked to see if it's in an XML document. - /// - /// - }, - 'makeArray': function() { - /// - /// Convert an array-like object into a true JavaScript array. - /// Any object to turn into a native Array. - /// - /// - }, - 'map': function() { - /// - /// Translate all items in an array or object to new array of items. - /// The Array to translate. - /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. - /// - /// - /// - /// Translate all items in an array or object to new array of items. - /// The Array or Object to translate. - /// The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object. - /// - /// - }, - 'merge': function() { - /// - /// Merge the contents of two arrays together into the first array. - /// The first array to merge, the elements of second added. - /// The second array to merge into the first, unaltered. - /// - /// - }, - 'noConflict': function() { - /// - /// Relinquish jQuery's control of the $ variable. - /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). - /// - /// - }, - 'noop': function() { - /// An empty function. - }, - 'now': function() { - /// Return a number representing the current time. - /// - }, - 'param': function() { - /// - /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. - /// An array or object to serialize. - /// - /// - /// - /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. - /// An array or object to serialize. - /// A Boolean indicating whether to perform a traditional "shallow" serialization. - /// - /// - }, - 'parseHTML': function() { - /// - /// Parses a string into an array of DOM nodes. - /// HTML string to be parsed - /// Document element to serve as the context in which the HTML fragment will be created - /// A Boolean indicating whether to include scripts passed in the HTML string - /// - /// - }, - 'parseJSON': function() { - /// - /// Takes a well-formed JSON string and returns the resulting JavaScript object. - /// The JSON string to parse. - /// - /// - }, - 'parseXML': function() { - /// - /// Parses a string into an XML document. - /// a well-formed XML string to be parsed - /// - /// - }, - 'post': function() { - /// - /// Load data from the server using a HTTP POST request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case. - /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). - /// - /// - }, - 'proxy': function() { - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The function whose context will be changed. - /// The object to which the context (this) of the function should be set. - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The object to which the context of the function should be set. - /// The name of the function whose context will be changed (should be a property of the context object). - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The function whose context will be changed. - /// The object to which the context (this) of the function should be set. - /// Any number of arguments to be passed to the function referenced in the function argument. - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The object to which the context of the function should be set. - /// The name of the function whose context will be changed (should be a property of the context object). - /// Any number of arguments to be passed to the function named in the name argument. - /// - /// - }, - 'queue': function() { - /// - /// Manipulate the queue of functions to be executed on the matched element. - /// A DOM element where the array of queued functions is attached. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// An array of functions to replace the current queue contents. - /// - /// - /// - /// Manipulate the queue of functions to be executed on the matched element. - /// A DOM element on which to add a queued function. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// The new function to add to the queue. - /// - /// - }, - 'removeData': function() { - /// - /// Remove a previously-stored piece of data. - /// A DOM element from which to remove data. - /// A string naming the piece of data to remove. - /// - /// - }, - 'sub': function() { - /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. - /// - }, - 'support': function() { - /// A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance. - /// - }, - 'trim': function() { - /// - /// Remove the whitespace from the beginning and end of a string. - /// The string to trim. - /// - /// - }, - 'type': function() { - /// - /// Determine the internal JavaScript [[Class]] of an object. - /// Object to get the internal JavaScript [[Class]] of. - /// - /// - }, - 'unique': function() { - /// - /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. - /// The Array of DOM elements. - /// - /// - }, - 'when': function() { - /// - /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. - /// One or more Deferred objects, or plain JavaScript objects. - /// - /// - }, -}); - -var _1228819969 = jQuery.Callbacks; -jQuery.Callbacks = function(flags) { -var _object = _1228819969(flags); -intellisense.annotate(_object, { - 'add': function() { - /// - /// Add a callback or a collection of callbacks to a callback list. - /// A function, or array of functions, that are to be added to the callback list. - /// - /// - }, - 'disable': function() { - /// Disable a callback list from doing anything more. - /// - }, - 'disabled': function() { - /// Determine if the callbacks list has been disabled. - /// - }, - 'empty': function() { - /// Remove all of the callbacks from a list. - /// - }, - 'fire': function() { - /// - /// Call all of the callbacks with the given arguments - /// The argument or list of arguments to pass back to the callback list. - /// - /// - }, - 'fired': function() { - /// Determine if the callbacks have already been called at least once. - /// - }, - 'fireWith': function() { - /// - /// Call all callbacks in a list with the given context and arguments. - /// A reference to the context in which the callbacks in the list should be fired. - /// An argument, or array of arguments, to pass to the callbacks in the list. - /// - /// - }, - 'has': function() { - /// - /// Determine whether a supplied callback is in a list - /// The callback to search for. - /// - /// - }, - 'lock': function() { - /// Lock a callback list in its current state. - /// - }, - 'locked': function() { - /// Determine if the callbacks list has been locked. - /// - }, - 'remove': function() { - /// - /// Remove a callback or a collection of callbacks from a callback list. - /// A function, or array of functions, that are to be removed from the callback list. - /// - /// - }, -}); - -return _object; -}; -intellisense.redirectDefinition(jQuery.Callbacks, _1228819969); - -var _731531622 = jQuery.Deferred; -jQuery.Deferred = function(func) { -var _object = _731531622(func); -intellisense.annotate(_object, { - 'always': function() { - /// - /// Add handlers to be called when the Deferred object is either resolved or rejected. - /// A function, or array of functions, that is called when the Deferred is resolved or rejected. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. - /// - /// - }, - 'done': function() { - /// - /// Add handlers to be called when the Deferred object is resolved. - /// A function, or array of functions, that are called when the Deferred is resolved. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. - /// - /// - }, - 'fail': function() { - /// - /// Add handlers to be called when the Deferred object is rejected. - /// A function, or array of functions, that are called when the Deferred is rejected. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. - /// - /// - }, - 'isRejected': function() { - /// Determine whether a Deferred object has been rejected. - /// - }, - 'isResolved': function() { - /// Determine whether a Deferred object has been resolved. - /// - }, - 'notify': function() { - /// - /// Call the progressCallbacks on a Deferred object with the given args. - /// Optional arguments that are passed to the progressCallbacks. - /// - /// - }, - 'notifyWith': function() { - /// - /// Call the progressCallbacks on a Deferred object with the given context and args. - /// Context passed to the progressCallbacks as the this object. - /// Optional arguments that are passed to the progressCallbacks. - /// - /// - }, - 'pipe': function() { - /// - /// Utility method to filter and/or chain Deferreds. - /// An optional function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// - /// - /// - /// Utility method to filter and/or chain Deferreds. - /// An optional function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// An optional function that is called when progress notifications are sent to the Deferred. - /// - /// - }, - 'progress': function() { - /// - /// Add handlers to be called when the Deferred object generates progress notifications. - /// A function, or array of functions, to be called when the Deferred generates progress notifications. - /// - /// - }, - 'promise': function() { - /// - /// Return a Deferred's Promise object. - /// Object onto which the promise methods have to be attached - /// - /// - }, - 'reject': function() { - /// - /// Reject a Deferred object and call any failCallbacks with the given args. - /// Optional arguments that are passed to the failCallbacks. - /// - /// - }, - 'rejectWith': function() { - /// - /// Reject a Deferred object and call any failCallbacks with the given context and args. - /// Context passed to the failCallbacks as the this object. - /// An optional array of arguments that are passed to the failCallbacks. - /// - /// - }, - 'resolve': function() { - /// - /// Resolve a Deferred object and call any doneCallbacks with the given args. - /// Optional arguments that are passed to the doneCallbacks. - /// - /// - }, - 'resolveWith': function() { - /// - /// Resolve a Deferred object and call any doneCallbacks with the given context and args. - /// Context passed to the doneCallbacks as the this object. - /// An optional array of arguments that are passed to the doneCallbacks. - /// - /// - }, - 'state': function() { - /// Determine the current state of a Deferred object. - /// - }, - 'then': function() { - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// An optional function that is called when progress notifications are sent to the Deferred. - /// - /// - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function, or array of functions, called when the Deferred is resolved. - /// A function, or array of functions, called when the Deferred is rejected. - /// - /// - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function, or array of functions, called when the Deferred is resolved. - /// A function, or array of functions, called when the Deferred is rejected. - /// A function, or array of functions, called when the Deferred notifies progress. - /// - /// - }, -}); - -return _object; -}; -intellisense.redirectDefinition(jQuery.Callbacks, _731531622); - -intellisense.annotate(jQuery.Event.prototype, { - 'currentTarget': function() { - /// The current DOM element within the event bubbling phase. - /// - }, - 'data': function() { - /// An optional object of data passed to an event method when the current executing handler is bound. - /// - }, - 'delegateTarget': function() { - /// The element where the currently-called jQuery event handler was attached. - /// - }, - 'isDefaultPrevented': function() { - /// Returns whether event.preventDefault() was ever called on this event object. - /// - }, - 'isImmediatePropagationStopped': function() { - /// Returns whether event.stopImmediatePropagation() was ever called on this event object. - /// - }, - 'isPropagationStopped': function() { - /// Returns whether event.stopPropagation() was ever called on this event object. - /// - }, - 'metaKey': function() { - /// Indicates whether the META key was pressed when the event fired. - /// - }, - 'namespace': function() { - /// The namespace specified when the event was triggered. - /// - }, - 'pageX': function() { - /// The mouse position relative to the left edge of the document. - /// - }, - 'pageY': function() { - /// The mouse position relative to the top edge of the document. - /// - }, - 'preventDefault': function() { - /// If this method is called, the default action of the event will not be triggered. - }, - 'relatedTarget': function() { - /// The other DOM element involved in the event, if any. - /// - }, - 'result': function() { - /// The last value returned by an event handler that was triggered by this event, unless the value was undefined. - /// - }, - 'stopImmediatePropagation': function() { - /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. - }, - 'stopPropagation': function() { - /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. - }, - 'target': function() { - /// The DOM element that initiated the event. - /// - }, - 'timeStamp': function() { - /// The difference in milliseconds between the time the browser created the event and January 1, 1970. - /// - }, - 'type': function() { - /// Describes the nature of the event. - /// - }, - 'which': function() { - /// For key or mouse events, this property indicates the specific key or button that was pressed. - /// - }, -}); - -intellisense.annotate(jQuery.fn, { - 'add': function() { - /// - /// Add elements to the set of matched elements. - /// A string representing a selector expression to find additional elements to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// One or more elements to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// An HTML fragment to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// An existing jQuery object to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// A string representing a selector expression to find additional elements to add to the set of matched elements. - /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. - /// - /// - }, - 'addBack': function() { - /// - /// Add the previous set of elements on the stack to the current set, optionally filtered by a selector. - /// A string containing a selector expression to match the current set of elements against. - /// - /// - }, - 'addClass': function() { - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// One or more space-separated classes to be added to the class attribute of each matched element. - /// - /// - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'after': function() { - /// - /// Insert content, specified by the parameter, after each element in the set of matched elements. - /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, after each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'ajaxComplete': function() { - /// - /// Register a handler to be called when Ajax requests complete. This is an AjaxEvent. - /// The function to be invoked. - /// - /// - }, - 'ajaxError': function() { - /// - /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxSend': function() { - /// - /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxStart': function() { - /// - /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxStop': function() { - /// - /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxSuccess': function() { - /// - /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'all': function() { - /// Selects all elements. - }, - 'andSelf': function() { - /// Add the previous set of elements on the stack to the current set. - /// - }, - 'animate': function() { - /// - /// Perform a custom animation of a set of CSS properties. - /// An object of CSS properties and values that the animation will move toward. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Perform a custom animation of a set of CSS properties. - /// An object of CSS properties and values that the animation will move toward. - /// A map of additional options to pass to the method. - /// - /// - }, - 'animated': function() { - /// Select all elements that are in the progress of an animation at the time the selector is run. - }, - 'append': function() { - /// - /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. - /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'appendTo': function() { - /// - /// Insert every element in the set of matched elements to the end of the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. - /// - /// - }, - 'attr': function() { - /// - /// Set one or more attributes for the set of matched elements. - /// The name of the attribute to set. - /// A value to set for the attribute. - /// - /// - /// - /// Set one or more attributes for the set of matched elements. - /// An object of attribute-value pairs to set. - /// - /// - /// - /// Set one or more attributes for the set of matched elements. - /// The name of the attribute to set. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments. - /// - /// - }, - 'attributeContains': function() { - /// - /// Selects elements that have the specified attribute with a value containing the a given substring. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeContainsPrefix': function() { - /// - /// Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-). - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeContainsWord': function() { - /// - /// Selects elements that have the specified attribute with a value containing a given word, delimited by spaces. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeEndsWith': function() { - /// - /// Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeEquals': function() { - /// - /// Selects elements that have the specified attribute with a value exactly equal to a certain value. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeHas': function() { - /// - /// Selects elements that have the specified attribute, with any value. - /// An attribute name. - /// - }, - 'attributeMultiple': function() { - /// - /// Matches elements that match all of the specified attribute filters. - /// An attribute filter. - /// Another attribute filter, reducing the selection even more - /// As many more attribute filters as necessary - /// - }, - 'attributeNotEqual': function() { - /// - /// Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeStartsWith': function() { - /// - /// Selects elements that have the specified attribute with a value beginning exactly with a given string. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'before': function() { - /// - /// Insert content, specified by the parameter, before each element in the set of matched elements. - /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, before each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'bind': function() { - /// - /// Attach a handler to an event for the elements. - /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Attach a handler to an event for the elements. - /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true. - /// - /// - /// - /// Attach a handler to an event for the elements. - /// An object containing one or more DOM event types and functions to execute for them. - /// - /// - }, - 'blur': function() { - /// - /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'button': function() { - /// Selects all button elements and elements of type button. - }, - 'change': function() { - /// - /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'checkbox': function() { - /// Selects all elements of type checkbox. - }, - 'checked': function() { - /// Matches all elements that are checked or selected. - }, - 'child': function() { - /// - /// Selects all direct child elements specified by "child" of elements specified by "parent". - /// Any valid selector. - /// A selector to filter the child elements. - /// - }, - 'children': function() { - /// - /// Get the children of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'class': function() { - /// - /// Selects all elements with the given class. - /// A class to search for. An element can have multiple classes; only one of them must match. - /// - }, - 'clearQueue': function() { - /// - /// Remove from the queue all items that have not yet been run. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'click': function() { - /// - /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'clone': function() { - /// - /// Create a deep copy of the set of matched elements. - /// A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well. - /// - /// - /// - /// Create a deep copy of the set of matched elements. - /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. - /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). - /// - /// - }, - 'closest': function() { - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A string containing a selector expression to match elements against. - /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A jQuery object to match elements against. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// An element to match elements against. - /// - /// - }, - 'contains': function() { - /// - /// Select all elements that contain the specified text. - /// A string of text to look for. It's case sensitive. - /// - }, - 'contents': function() { - /// Get the children of each element in the set of matched elements, including text and comment nodes. - /// - }, - 'context': function() { - /// The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. - /// - }, - 'css': function() { - /// - /// Set one or more CSS properties for the set of matched elements. - /// A CSS property name. - /// A value to set for the property. - /// - /// - /// - /// Set one or more CSS properties for the set of matched elements. - /// A CSS property name. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. - /// - /// - /// - /// Set one or more CSS properties for the set of matched elements. - /// An object of property-value pairs to set. - /// - /// - }, - 'data': function() { - /// - /// Store arbitrary data associated with the matched elements. - /// A string naming the piece of data to set. - /// The new data value; it can be any Javascript type including Array or Object. - /// - /// - /// - /// Store arbitrary data associated with the matched elements. - /// An object of key-value pairs of data to update. - /// - /// - }, - 'dblclick': function() { - /// - /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'delay': function() { - /// - /// Set a timer to delay execution of subsequent items in the queue. - /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'delegate': function() { - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A plain object of one or more event types and functions to execute for them. - /// - /// - }, - 'dequeue': function() { - /// - /// Execute the next function on the queue for the matched elements. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'descendant': function() { - /// - /// Selects all elements that are descendants of a given ancestor. - /// Any valid selector. - /// A selector to filter the descendant elements. - /// - }, - 'detach': function() { - /// - /// Remove the set of matched elements from the DOM. - /// A selector expression that filters the set of matched elements to be removed. - /// - /// - }, - 'die': function() { - /// - /// Remove event handlers previously attached using .live() from the elements. - /// A string containing a JavaScript event type, such as click or keydown. - /// The function that is no longer to be executed. - /// - /// - /// - /// Remove event handlers previously attached using .live() from the elements. - /// A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed. - /// - /// - }, - 'disabled': function() { - /// Selects all elements that are disabled. - }, - 'each': function() { - /// - /// Iterate over a jQuery object, executing a function for each matched element. - /// A function to execute for each matched element. - /// - /// - }, - 'element': function() { - /// - /// Selects all elements with the given tag name. - /// An element to search for. Refers to the tagName of DOM nodes. - /// - }, - 'empty': function() { - /// Select all elements that have no children (including text nodes). - }, - 'enabled': function() { - /// Selects all elements that are enabled. - }, - 'end': function() { - /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. - /// - }, - 'eq': function() { - /// - /// Select the element at index n within the matched set. - /// Zero-based index of the element to match. - /// - /// - /// Select the element at index n within the matched set. - /// Zero-based index of the element to match, counting backwards from the last element. - /// - }, - 'error': function() { - /// - /// Bind an event handler to the "error" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "error" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'even': function() { - /// Selects even elements, zero-indexed. See also odd. - }, - 'fadeIn': function() { - /// - /// Display the matched elements by fading them to opaque. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements by fading them to opaque. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements by fading them to opaque. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeOut': function() { - /// - /// Hide the matched elements by fading them to transparent. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements by fading them to transparent. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements by fading them to transparent. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeTo': function() { - /// - /// Adjust the opacity of the matched elements. - /// A string or number determining how long the animation will run. - /// A number between 0 and 1 denoting the target opacity. - /// A function to call once the animation is complete. - /// - /// - /// - /// Adjust the opacity of the matched elements. - /// A string or number determining how long the animation will run. - /// A number between 0 and 1 denoting the target opacity. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeToggle': function() { - /// - /// Display or hide the matched elements by animating their opacity. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements by animating their opacity. - /// A map of additional options to pass to the method. - /// - /// - }, - 'file': function() { - /// Selects all elements of type file. - }, - 'filter': function() { - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// A string containing a selector expression to match the current set of elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// A function used as a test for each element in the set. this is the current DOM element. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// An element to match the current set of elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// An existing jQuery object to match the current set of elements against. - /// - /// - }, - 'find': function() { - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// A jQuery object to match elements against. - /// - /// - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// An element to match elements against. - /// - /// - }, - 'finish': function() { - /// - /// Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements. - /// The name of the queue in which to stop animations. - /// - /// - }, - 'first': function() { - /// Selects the first matched element. - }, - 'first-child': function() { - /// Selects all elements that are the first child of their parent. - }, - 'first-of-type': function() { - /// Selects all elements that are the first among siblings of the same element name. - }, - 'focus': function() { - /// - /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'focusin': function() { - /// - /// Bind an event handler to the "focusin" event. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focusin" event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'focusout': function() { - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'get': function() { - /// - /// Retrieve one of the DOM elements matched by the jQuery object. - /// A zero-based integer indicating which element to retrieve. - /// - /// - }, - 'gt': function() { - /// - /// Select all elements at an index greater than index within the matched set. - /// Zero-based index. - /// - /// - /// Select all elements at an index greater than index within the matched set. - /// Zero-based index, counting backwards from the last element. - /// - }, - 'has': function() { - /// - /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. - /// A DOM element to match elements against. - /// - /// - }, - 'hasClass': function() { - /// - /// Determine whether any of the matched elements are assigned the given class. - /// The class name to search for. - /// - /// - }, - 'header': function() { - /// Selects all elements that are headers, like h1, h2, h3 and so on. - }, - 'height': function() { - /// - /// Set the CSS height of every matched element. - /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). - /// - /// - /// - /// Set the CSS height of every matched element. - /// A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'hidden': function() { - /// Selects all elements that are hidden. - }, - 'hide': function() { - /// - /// Hide the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'hover': function() { - /// - /// Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. - /// A function to execute when the mouse pointer enters the element. - /// A function to execute when the mouse pointer leaves the element. - /// - /// - }, - 'html': function() { - /// - /// Set the HTML contents of each element in the set of matched elements. - /// A string of HTML to set as the content of each matched element. - /// - /// - /// - /// Set the HTML contents of each element in the set of matched elements. - /// A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set. - /// - /// - }, - 'id': function() { - /// - /// Selects a single element with the given id attribute. - /// An ID to search for, specified via the id attribute of an element. - /// - }, - 'image': function() { - /// Selects all elements of type image. - }, - 'index': function() { - /// - /// Search for a given element from among the matched elements. - /// A selector representing a jQuery collection in which to look for an element. - /// - /// - /// - /// Search for a given element from among the matched elements. - /// The DOM element or first element within the jQuery object to look for. - /// - /// - }, - 'init': function() { - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A string containing a selector expression - /// A DOM Element, Document, or jQuery to use as context - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A DOM element to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An array containing a set of DOM elements to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A plain object to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An existing jQuery object to clone. - /// - /// - }, - 'innerHeight': function() { - /// Get the current computed height for the first element in the set of matched elements, including padding but not border. - /// - }, - 'innerWidth': function() { - /// Get the current computed width for the first element in the set of matched elements, including padding but not border. - /// - }, - 'input': function() { - /// Selects all input, textarea, select and button elements. - }, - 'insertAfter': function() { - /// - /// Insert every element in the set of matched elements after the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. - /// - /// - }, - 'insertBefore': function() { - /// - /// Insert every element in the set of matched elements before the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. - /// - /// - }, - 'is': function() { - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// An existing jQuery object to match the current set of elements against. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// An element to match the current set of elements against. - /// - /// - }, - 'jquery': function() { - /// A string containing the jQuery version number. - /// - }, - 'keydown': function() { - /// - /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'keypress': function() { - /// - /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'keyup': function() { - /// - /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'lang': function() { - /// - /// Selects all elements of the specified language. - /// A language code. - /// - }, - 'last': function() { - /// Selects the last matched element. - }, - 'last-child': function() { - /// Selects all elements that are the last child of their parent. - }, - 'last-of-type': function() { - /// Selects all elements that are the last among siblings of the same element name. - }, - 'length': function() { - /// The number of elements in the jQuery object. - /// - }, - 'live': function() { - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A plain object of one or more JavaScript event types and functions to execute for them. - /// - /// - }, - 'load': function() { - /// - /// Bind an event handler to the "load" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "load" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'lt': function() { - /// - /// Select all elements at an index less than index within the matched set. - /// Zero-based index. - /// - /// - /// Select all elements at an index less than index within the matched set. - /// Zero-based index, counting backwards from the last element. - /// - }, - 'map': function() { - /// - /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. - /// A function object that will be invoked for each element in the current set. - /// - /// - }, - 'mousedown': function() { - /// - /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseenter': function() { - /// - /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseleave': function() { - /// - /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mousemove': function() { - /// - /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseout': function() { - /// - /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseover': function() { - /// - /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseup': function() { - /// - /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'multiple': function() { - /// - /// Selects the combined results of all the specified selectors. - /// Any valid selector. - /// Another valid selector. - /// As many more valid selectors as you like. - /// - }, - 'next': function() { - /// - /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'next adjacent': function() { - /// - /// Selects all next elements matching "next" that are immediately preceded by a sibling "prev". - /// Any valid selector. - /// A selector to match the element that is next to the first selector. - /// - }, - 'next siblings': function() { - /// - /// Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector. - /// Any valid selector. - /// A selector to filter elements that are the following siblings of the first selector. - /// - }, - 'nextAll': function() { - /// - /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'nextUntil': function() { - /// - /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. - /// A string containing a selector expression to indicate where to stop matching following sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. - /// A DOM node or jQuery object indicating where to stop matching following sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'not': function() { - /// - /// Remove elements from the set of matched elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// One or more DOM elements to remove from the matched set. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// A function used as a test for each element in the set. this is the current DOM element. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// An existing jQuery object to match the current set of elements against. - /// - /// - }, - 'nth-child': function() { - /// - /// Selects all elements that are the nth-child of their parent. - /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) ) - /// - }, - 'nth-last-child': function() { - /// - /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. - /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) ) - /// - }, - 'nth-last-of-type': function() { - /// - /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. - /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) ) - /// - }, - 'nth-of-type': function() { - /// - /// Selects all elements that are the nth child of their parent in relation to siblings with the same element name. - /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) ) - /// - }, - 'odd': function() { - /// Selects odd elements, zero-indexed. See also even. - }, - 'off': function() { - /// - /// Remove an event handler. - /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". - /// A selector which should match the one originally passed to .on() when attaching event handlers. - /// A handler function previously attached for the event(s), or the special value false. - /// - /// - /// - /// Remove an event handler. - /// An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s). - /// A selector which should match the one originally passed to .on() when attaching event handlers. - /// - /// - }, - 'offset': function() { - /// - /// Set the current coordinates of every element in the set of matched elements, relative to the document. - /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. - /// - /// - /// - /// Set the current coordinates of every element in the set of matched elements, relative to the document. - /// A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties. - /// - /// - }, - 'offsetParent': function() { - /// Get the closest ancestor element that is positioned. - /// - }, - 'on': function() { - /// - /// Attach an event handler function for one or more events to the selected elements. - /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". - /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event is triggered. - /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. - /// - /// - /// - /// Attach an event handler function for one or more events to the selected elements. - /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). - /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event occurs. - /// - /// - }, - 'one': function() { - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". - /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event is triggered. - /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. - /// - /// - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). - /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event occurs. - /// - /// - }, - 'only-child': function() { - /// Selects all elements that are the only child of their parent. - }, - 'only-of-type': function() { - /// Selects all elements that have no siblings with the same element name. - }, - 'outerHeight': function() { - /// - /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. - /// A Boolean indicating whether to include the element's margin in the calculation. - /// - /// - }, - 'outerWidth': function() { - /// - /// Get the current computed width for the first element in the set of matched elements, including padding and border. - /// A Boolean indicating whether to include the element's margin in the calculation. - /// - /// - }, - 'parent': function() { - /// - /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'parents': function() { - /// - /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'parentsUntil': function() { - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A string containing a selector expression to indicate where to stop matching ancestor elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A DOM node or jQuery object indicating where to stop matching ancestor elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'password': function() { - /// Selects all elements of type password. - }, - 'position': function() { - /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. - /// - }, - 'prepend': function() { - /// - /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. - /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'prependTo': function() { - /// - /// Insert every element in the set of matched elements to the beginning of the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. - /// - /// - }, - 'prev': function() { - /// - /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'prevAll': function() { - /// - /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'prevUntil': function() { - /// - /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A DOM node or jQuery object indicating where to stop matching preceding sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'promise': function() { - /// - /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. - /// The type of queue that needs to be observed. - /// Object onto which the promise methods have to be attached - /// - /// - }, - 'prop': function() { - /// - /// Set one or more properties for the set of matched elements. - /// The name of the property to set. - /// A value to set for the property. - /// - /// - /// - /// Set one or more properties for the set of matched elements. - /// An object of property-value pairs to set. - /// - /// - /// - /// Set one or more properties for the set of matched elements. - /// The name of the property to set. - /// A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element. - /// - /// - }, - 'pushStack': function() { - /// - /// Add a collection of DOM elements onto the jQuery stack. - /// An array of elements to push onto the stack and make into a new jQuery object. - /// - /// - /// - /// Add a collection of DOM elements onto the jQuery stack. - /// An array of elements to push onto the stack and make into a new jQuery object. - /// The name of a jQuery method that generated the array of elements. - /// The arguments that were passed in to the jQuery method (for serialization). - /// - /// - }, - 'queue': function() { - /// - /// Manipulate the queue of functions to be executed, once for each matched element. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// An array of functions to replace the current queue contents. - /// - /// - /// - /// Manipulate the queue of functions to be executed, once for each matched element. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// The new function to add to the queue, with a function to call that will dequeue the next item. - /// - /// - }, - 'radio': function() { - /// Selects all elements of type radio. - }, - 'ready': function() { - /// - /// Specify a function to execute when the DOM is fully loaded. - /// A function to execute after the DOM is ready. - /// - /// - }, - 'remove': function() { - /// - /// Remove the set of matched elements from the DOM. - /// A selector expression that filters the set of matched elements to be removed. - /// - /// - }, - 'removeAttr': function() { - /// - /// Remove an attribute from each element in the set of matched elements. - /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. - /// - /// - }, - 'removeClass': function() { - /// - /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. - /// One or more space-separated classes to be removed from the class attribute of each matched element. - /// - /// - /// - /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. - /// A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments. - /// - /// - }, - 'removeData': function() { - /// - /// Remove a previously-stored piece of data. - /// A string naming the piece of data to delete. - /// - /// - /// - /// Remove a previously-stored piece of data. - /// An array or space-separated string naming the pieces of data to delete. - /// - /// - }, - 'removeProp': function() { - /// - /// Remove a property for the set of matched elements. - /// The name of the property to remove. - /// - /// - }, - 'replaceAll': function() { - /// - /// Replace each target element with the set of matched elements. - /// A selector string, jQuery object, or DOM element reference indicating which element(s) to replace. - /// - /// - }, - 'replaceWith': function() { - /// - /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. - /// The content to insert. May be an HTML string, DOM element, or jQuery object. - /// - /// - /// - /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. - /// A function that returns content with which to replace the set of matched elements. - /// - /// - }, - 'reset': function() { - /// Selects all elements of type reset. - }, - 'resize': function() { - /// - /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'root': function() { - /// Selects the element that is the root of the document. - }, - 'scroll': function() { - /// - /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'scrollLeft': function() { - /// - /// Set the current horizontal position of the scroll bar for each of the set of matched elements. - /// An integer indicating the new position to set the scroll bar to. - /// - /// - }, - 'scrollTop': function() { - /// - /// Set the current vertical position of the scroll bar for each of the set of matched elements. - /// An integer indicating the new position to set the scroll bar to. - /// - /// - }, - 'select': function() { - /// - /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'selected': function() { - /// Selects all elements that are selected. - }, - 'selector': function() { - /// A selector representing selector passed to jQuery(), if any, when creating the original set. - /// - }, - 'serialize': function() { - /// Encode a set of form elements as a string for submission. - /// - }, - 'serializeArray': function() { - /// Encode a set of form elements as an array of names and values. - /// - }, - 'show': function() { - /// - /// Display the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'siblings': function() { - /// - /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'size': function() { - /// Return the number of elements in the jQuery object. - /// - }, - 'slice': function() { - /// - /// Reduce the set of matched elements to a subset specified by a range of indices. - /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. - /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. - /// - /// - }, - 'slideDown': function() { - /// - /// Display the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'slideToggle': function() { - /// - /// Display or hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display or hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'slideUp': function() { - /// - /// Hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'stop': function() { - /// - /// Stop the currently-running animation on the matched elements. - /// A Boolean indicating whether to remove queued animation as well. Defaults to false. - /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. - /// - /// - /// - /// Stop the currently-running animation on the matched elements. - /// The name of the queue in which to stop animations. - /// A Boolean indicating whether to remove queued animation as well. Defaults to false. - /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. - /// - /// - }, - 'submit': function() { - /// - /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'target': function() { - /// Selects the target element indicated by the fragment identifier of the document's URI. - }, - 'text': function() { - /// - /// Set the content of each element in the set of matched elements to the specified text. - /// A string of text to set as the content of each matched element. - /// - /// - /// - /// Set the content of each element in the set of matched elements to the specified text. - /// A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments. - /// - /// - }, - 'toArray': function() { - /// Retrieve all the DOM elements contained in the jQuery set, as an array. - /// - }, - 'toggle': function() { - /// - /// Display or hide the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display or hide the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements. - /// A Boolean indicating whether to show or hide the elements. - /// - /// - }, - 'toggleClass': function() { - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// One or more class names (separated by spaces) to be toggled for each element in the matched set. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// One or more class names (separated by spaces) to be toggled for each element in the matched set. - /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// A boolean value to determine whether the class should be added or removed. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments. - /// A boolean value to determine whether the class should be added or removed. - /// - /// - }, - 'trigger': function() { - /// - /// Execute all handlers and behaviors attached to the matched elements for the given event type. - /// A string containing a JavaScript event type, such as click or submit. - /// Additional parameters to pass along to the event handler. - /// - /// - /// - /// Execute all handlers and behaviors attached to the matched elements for the given event type. - /// A jQuery.Event object. - /// Additional parameters to pass along to the event handler. - /// - /// - }, - 'triggerHandler': function() { - /// - /// Execute all handlers attached to an element for an event. - /// A string containing a JavaScript event type, such as click or submit. - /// An array of additional parameters to pass along to the event handler. - /// - /// - }, - 'unbind': function() { - /// - /// Remove a previously-attached event handler from the elements. - /// A string containing a JavaScript event type, such as click or submit. - /// The function that is to be no longer executed. - /// - /// - /// - /// Remove a previously-attached event handler from the elements. - /// A string containing a JavaScript event type, such as click or submit. - /// Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ). - /// - /// - /// - /// Remove a previously-attached event handler from the elements. - /// A JavaScript event object as passed to an event handler. - /// - /// - }, - 'undelegate': function() { - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// A string containing a JavaScript event type, such as "click" or "keydown" - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// A string containing a JavaScript event type, such as "click" or "keydown" - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// An object of one or more event types and previously bound functions to unbind from them. - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A string containing a namespace to unbind all events from. - /// - /// - }, - 'unload': function() { - /// - /// Bind an event handler to the "unload" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "unload" JavaScript event. - /// A plain object of data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'unwrap': function() { - /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. - /// - }, - 'val': function() { - /// - /// Set the value of each element in the set of matched elements. - /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. - /// - /// - /// - /// Set the value of each element in the set of matched elements. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. - /// - /// - }, - 'visible': function() { - /// Selects all elements that are visible. - }, - 'width': function() { - /// - /// Set the CSS width of each element in the set of matched elements. - /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). - /// - /// - /// - /// Set the CSS width of each element in the set of matched elements. - /// A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'wrap': function() { - /// - /// Wrap an HTML structure around each element in the set of matched elements. - /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. - /// - /// - /// - /// Wrap an HTML structure around each element in the set of matched elements. - /// A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'wrapAll': function() { - /// - /// Wrap an HTML structure around all elements in the set of matched elements. - /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. - /// - /// - }, - 'wrapInner': function() { - /// - /// Wrap an HTML structure around the content of each element in the set of matched elements. - /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. - /// - /// - /// - /// Wrap an HTML structure around the content of each element in the set of matched elements. - /// A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, -}); - -intellisense.annotate(window, { - '$': function() { - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A string containing a selector expression - /// A DOM Element, Document, or jQuery to use as context - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A DOM element to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An array containing a set of DOM elements to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A plain object to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An existing jQuery object to clone. - /// - /// - }, -}); - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.csproj b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.csproj index 449de3e2..c26de895 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.csproj +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.csproj @@ -308,7 +308,6 @@ - @@ -358,7 +357,6 @@ - diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.vstemplate b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.vstemplate index 060c7e3c..6deb2a47 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.vstemplate +++ b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/WebApi.vstemplate @@ -193,7 +193,6 @@ Global.asax Global.asax.cs - packages.config Project_Readme.html AssemblyInfo.cs @@ -202,7 +201,6 @@ _references.js bootstrap.js bootstrap.min.js - jquery-2.1.1.intellisense.js jquery-2.1.1.js jquery-2.1.1.min.js jquery-2.1.1.min.map diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/packages.config b/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/packages.config deleted file mode 100644 index 5992bbe3..00000000 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWebApiPatterns/WebApi/packages.config +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableEntities.zip b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableEntities.zip index 255385c0..706c3064 100644 Binary files a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableEntities.zip and b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableEntities.zip differ diff --git a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWcfService.zip b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWcfService.zip index feebdcac..a5c81973 100644 Binary files a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWcfService.zip and b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWcfService.zip differ diff --git a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApi.zip b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApi.zip index e26143d4..c5bac704 100644 Binary files a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApi.zip and b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApi.zip differ diff --git a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApiPatterns.zip b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApiPatterns.zip index 7c4da169..0931ddb5 100644 Binary files a/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApiPatterns.zip and b/Extensions/VS2013/Output/Zip/ProjectTemplates/TrackableWebApiPatterns.zip differ diff --git a/Extensions/VS2013/VSIX/TrackableEntities.VS2013-2.5.2.1.vsix b/Extensions/VS2013/VSIX/TrackableEntities.VS2013-2.5.2.1.vsix new file mode 100644 index 00000000..bf74b19c Binary files /dev/null and b/Extensions/VS2013/VSIX/TrackableEntities.VS2013-2.5.2.1.vsix differ diff --git a/Extensions/VS2015/Deploy/.nuget/NuGet.Config b/Extensions/VS2015/Deploy/.nuget/NuGet.Config new file mode 100644 index 00000000..67f8ea04 --- /dev/null +++ b/Extensions/VS2015/Deploy/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/.nuget/NuGet.exe b/Extensions/VS2015/Deploy/.nuget/NuGet.exe new file mode 100644 index 00000000..2c936984 Binary files /dev/null and b/Extensions/VS2015/Deploy/.nuget/NuGet.exe differ diff --git a/Extensions/VS2015/Deploy/.nuget/NuGet.targets b/Extensions/VS2015/Deploy/.nuget/NuGet.targets new file mode 100644 index 00000000..83fe9060 --- /dev/null +++ b/Extensions/VS2015/Deploy/.nuget/NuGet.targets @@ -0,0 +1,136 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/DebugInfo.txt b/Extensions/VS2015/Deploy/DebugInfo.txt new file mode 100644 index 00000000..1ed147b6 --- /dev/null +++ b/Extensions/VS2015/Deploy/DebugInfo.txt @@ -0,0 +1,15 @@ +Steps to debug the Template Wizard Project + +1. Run the Visual Studio Deploy solution as *administrator* + +2. Set build configuration to Debug + +3. Select Build tab on Deploy project, set project outout to IDE\PrivateAssemblies folder + - VS2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies + +4. On the Debug tab, set Start Action to Start External Program: + - VS2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe + +5. Set breakpoint in the root or child wizard, then press F5 to start debugging + - This will lanuch Visual Studio with the VSIX installed + - If template does not appear in New Project dialog, install the VSIX from the output file. diff --git a/Extensions/VS2015/Deploy/DevSetup.txt b/Extensions/VS2015/Deploy/DevSetup.txt new file mode 100644 index 00000000..b119485b --- /dev/null +++ b/Extensions/VS2015/Deploy/DevSetup.txt @@ -0,0 +1,3 @@ +Developer Setup for Deploy Projects + +Install VS SDK for VS 2015. diff --git a/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/App.config b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/App.config new file mode 100644 index 00000000..f3b45ee2 --- /dev/null +++ b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/App.config @@ -0,0 +1,13 @@ + + + + +
+ + + + + + + + diff --git a/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj new file mode 100644 index 00000000..48c7b71a --- /dev/null +++ b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/ItemTemplateParametersWizard.csproj @@ -0,0 +1,126 @@ + + + + + Debug + AnyCPU + {046940FE-CC75-43E2-9C41-346AEBBBB03B} + Library + Properties + ItemTemplateParametersWizard + ItemTemplateParametersWizard + v4.5 + 512 + + ..\..\VS2012\Deploy\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AnyCPU + + + true + + + key.snk + + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + True + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + True + + + + + + + + + + + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + True + + + + + IModelTypes.cs + + + ModelType.cs + + + ModelTypeInfo.cs + + + ModelTypesContextDialog.cs + Form + + + ModelTypesContextDialog.Designer.cs + + + ModelTypesDialog.cs + Form + + + ModelTypesDialog.Designer.cs + + + ModelTypesDialogInfo.cs + + + ModelTypesHelper.cs + + + + + + + + + + + ModelTypesContextDialog.resx + + + ModelTypesDialog.resx + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/Properties/AssemblyInfo.cs b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5c368545 --- /dev/null +++ b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ItemTemplateParametersWizard")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ItemTemplateParametersWizard")] +[assembly: AssemblyCopyright("Copyright © Tony Sneed 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6a0b3832-4b10-47be-97b6-16ac342b84a1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/key.snk b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/key.snk new file mode 100644 index 00000000..ebba93de Binary files /dev/null and b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/key.snk differ diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/packages.config b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/packages.config similarity index 58% rename from Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/packages.config rename to Extensions/VS2015/Deploy/ItemTemplateParametersWizard/packages.config index cdbf4e9e..3ef2e967 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/packages.config +++ b/Extensions/VS2015/Deploy/ItemTemplateParametersWizard/packages.config @@ -1,7 +1,5 @@  - - \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/App.config b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/App.config new file mode 100644 index 00000000..6eb246a7 --- /dev/null +++ b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/App.config @@ -0,0 +1,17 @@ + + + + +
+ + + + + + + + + + + + diff --git a/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/Properties/AssemblyInfo.cs b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ec6c6295 --- /dev/null +++ b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TrackableEntities.ItemWizard")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TrackableEntities.ItemWizard")] +[assembly: AssemblyCopyright("Copyright © Tony Sneed 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b9029261-8d84-4e9f-a4f8-32ab0fc6b4d4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("2.0.0.0")] diff --git a/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj new file mode 100644 index 00000000..a3bf6fc1 --- /dev/null +++ b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/TrackableEntities.ItemWizard.csproj @@ -0,0 +1,135 @@ + + + + + Debug + AnyCPU + {8E21F5FD-3941-45A6-B8F8-9628B8A58594} + Library + Properties + TrackableEntities.ItemWizard + TrackableEntities.ItemWizard + v4.5 + 512 + + ..\..\..\VS2013\Deploy\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AnyCPU + + + true + + + key.snk + + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + True + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + True + + + False + + + True + + + False + ..\lib\Microsoft.VisualStudio.Shell.11.0.dll + + + False + + + + + + + + + + + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + True + + + True + + + + + Dialogs.cs + + + EntityControllerWizard.cs + + + EntityRepoClassWizard.cs + + + EntityRepoInterfaceWizard.cs + + + ModelReflectionHelper.cs + + + WcfServiceTypeWizard.cs + + + WebApiControllerWizard.cs + + + WizardHelper.cs + + + + + + + + + + + {046940fe-cc75-43e2-9c41-346aebbbb03b} + ItemTemplateParametersWizard + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/key.snk b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/key.snk new file mode 100644 index 00000000..ebba93de Binary files /dev/null and b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/key.snk differ diff --git a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/packages.config b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/packages.config similarity index 56% rename from Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/packages.config rename to Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/packages.config index ee3d4153..3ef2e967 100644 --- a/Extensions/VS2013/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/packages.config +++ b/Extensions/VS2015/Deploy/TrackableEntities.ItemWizard/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/Properties/AssemblyInfo.cs b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ea1b6b46 --- /dev/null +++ b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TrackableTemplateWizard")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TrackableTemplateWizard")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6fbb1a5e-d865-4d6b-8ac3-578a1b34b51d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj new file mode 100644 index 00000000..6451a4cc --- /dev/null +++ b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/TrackableEntities.TemplateWizard.csproj @@ -0,0 +1,106 @@ + + + + + Debug + AnyCPU + {C9646BE1-E999-47BD-8A9D-083017E6269A} + Library + Properties + TrackableEntities.TemplateWizard + TrackableEntities.TemplateWizard + v4.5 + 512 + ..\ + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + true + + + key.snk + + + + False + + + True + + + False + ..\..\..\Common\Wizards\lib\Microsoft.VisualStudio.ComponentModelHost.dll + + + + False + ..\..\..\Common\Wizards\lib\Microsoft.VisualStudio.Shell.11.0.dll + + + + ..\..\..\VS2015\Deploy\packages\NuGet.VisualStudio.2.8.6\lib\net45\NuGet.VisualStudio.dll + True + + + + + + + + + ChildWizard.cs + + + Constants.cs + + + EntitiesChildWizard.cs + + + EntitiesWizard.cs + + + RootWizard.cs + + + + + + + + + + {a1dc5d35-b381-4a89-9922-e83923d4ad2f} + EntitiesSelectionWizard + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/key.snk b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/key.snk new file mode 100644 index 00000000..ebba93de Binary files /dev/null and b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/key.snk differ diff --git a/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/packages.config b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/packages.config new file mode 100644 index 00000000..fc977ff2 --- /dev/null +++ b/Extensions/VS2015/Deploy/TrackableEntities.TemplateWizard/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy.sln b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy.sln index 14ab57af..f2c09dad 100644 --- a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy.sln +++ b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy.sln @@ -1,15 +1,32 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22310.1 +VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplateParametersWizard", "..\..\Common\Wizards\ItemTemplateParametersWizard\ItemTemplateParametersWizard.csproj", "{046940FE-CC75-43E2-9C41-346AEBBBB03B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.VS2015.Deploy", "TrackableEntities.VS2015.Deploy\TrackableEntities.VS2015.Deploy.csproj", "{72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.ItemWizard", "..\..\Common\Wizards\TrackableEntities.ItemWizard\TrackableEntities.ItemWizard.csproj", "{8E21F5FD-3941-45A6-B8F8-9628B8A58594}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplateParametersWizard", "ItemTemplateParametersWizard\ItemTemplateParametersWizard.csproj", "{046940FE-CC75-43E2-9C41-346AEBBBB03B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.TemplateWizard", "..\..\VS2013\Deploy\TrackableEntities.TemplateWizard\TrackableEntities.TemplateWizard.csproj", "{C9646BE1-E999-47BD-8A9D-083017E6269A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.ItemWizard", "TrackableEntities.ItemWizard\TrackableEntities.ItemWizard.csproj", "{8E21F5FD-3941-45A6-B8F8-9628B8A58594}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.VS2015.Deploy", "TrackableEntities.VS2015.Deploy\TrackableEntities.VS2015.Deploy.csproj", "{72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{EF604F9C-C224-498C-A387-DCEA8AAB431C}" + ProjectSection(SolutionItems) = preProject + DebugInfo.txt = DebugInfo.txt + DevSetup.txt = DevSetup.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{8EDDC32F-92D1-4EAD-B2AC-EAC45C3E7460}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrackableEntities.TemplateWizard", "TrackableEntities.TemplateWizard\TrackableEntities.TemplateWizard.csproj", "{C9646BE1-E999-47BD-8A9D-083017E6269A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionWizard", "..\..\Common\Wizards\EntitiesSelectionWizard\EntitiesSelectionWizard.csproj", "{A1DC5D35-B381-4A89-9922-E83923D4AD2F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntitiesSelectionHarness", "..\..\Common\Wizards\EntitiesSelectionHarness\EntitiesSelectionHarness.csproj", "{A784F6D4-D974-4E5C-9DE1-FA571C9214C9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -17,6 +34,10 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Release|Any CPU.Build.0 = Release|Any CPU {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Debug|Any CPU.Build.0 = Debug|Any CPU {046940FE-CC75-43E2-9C41-346AEBBBB03B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -29,10 +50,14 @@ Global {C9646BE1-E999-47BD-8A9D-083017E6269A}.Debug|Any CPU.Build.0 = Debug|Any CPU {C9646BE1-E999-47BD-8A9D-083017E6269A}.Release|Any CPU.ActiveCfg = Release|Any CPU {C9646BE1-E999-47BD-8A9D-083017E6269A}.Release|Any CPU.Build.0 = Release|Any CPU - {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72BDC4A6-17FB-4723-BD08-DB3C77B31AEF}.Release|Any CPU.Build.0 = Release|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1DC5D35-B381-4A89-9922-E83923D4AD2F}.Release|Any CPU.Build.0 = Release|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A784F6D4-D974-4E5C-9DE1-FA571C9214C9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/License.txt b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/License.txt index 0cbaeb3b..05d3e1ff 100644 --- a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/License.txt +++ b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/License.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013 Tony Sneed +Copyright (c) 2015 Tony Sneed Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip new file mode 100644 index 00000000..d48b2621 Binary files /dev/null and b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableEntities.zip differ diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip index b026810e..52775486 100644 Binary files a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip and b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWcfService.zip differ diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip index eca21b04..589ae659 100644 Binary files a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip and b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApi.zip differ diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip index 2cef3054..f82452a2 100644 Binary files a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip and b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/ProjectTemplates/Trackable/TrackableWebApiPatterns.zip differ diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/TrackableEntities.VS2015.Deploy.csproj b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/TrackableEntities.VS2015.Deploy.csproj index 68ef81fa..633007e7 100644 --- a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/TrackableEntities.VS2015.Deploy.csproj +++ b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/TrackableEntities.VS2015.Deploy.csproj @@ -27,10 +27,11 @@ true full false - bin\Debug\ + ..\..\..\..\..\..\Program Files %28x86%29\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\ DEBUG;TRACE prompt 4 + x86 pdbonly @@ -39,6 +40,7 @@ TRACE prompt 4 + x86 @@ -50,17 +52,17 @@ true - Wizards\TrackableWcf.ReadMe.txt + TrackableWcf.ReadMe.txt Always true - Wizards\TrackableWebApi.Patterns.ReadMe.txt + TrackableWebApi.Patterns.ReadMe.txt Always true - Wizards\TrackableWebApi.ReadMe.txt + TrackableWebApi.ReadMe.txt Always true @@ -104,10 +106,34 @@ Always true + + true + Always + + + true + Always + + + true + Always + + + true + Always + + + true + Always + Packages\Antlr.3.5.0.2.nupkg true + + Packages\AspNetWebApi2Helpers.Serialization.1.0.0.nupkg + true + Packages\bootstrap.3.3.1.nupkg true @@ -116,8 +142,8 @@ Packages\EntityFramework.5.0.0.nupkg true - - Packages\EntityFramework.6.1.1.nupkg + + Packages\EntityFramework.6.1.3.nupkg true @@ -176,83 +202,91 @@ Packages\Modernizr.2.8.3.nupkg true - - Packages\Newtonsoft.Json.6.0.6.nupkg + + Packages\Newtonsoft.Json.6.0.8.nupkg true Packages\Respond.1.4.2.nupkg true - - Packages\TinyIoC.1.2.nupkg + + Packages\SimpleInjector.2.7.3.nupkg true - - Packages\TinyIoC.AspNetExtensions.1.2.nupkg + + Packages\SimpleInjector.Extensions.ExecutionContextScoping.2.7.3.nupkg true - - Packages\TrackableEntities.Client.2.2.0.nupkg + + Packages\SimpleInjector.Integration.WebApi.2.7.3.nupkg true - - Packages\TrackableEntities.Client.Net4.2.2.0.nupkg + + Packages\TrackableEntities.Client.2.5.2.nupkg true - - Packages\TrackableEntities.Common.2.2.0.nupkg + + Packages\TrackableEntities.Client.Net4.2.5.2.nupkg true - - Packages\TrackableEntities.EF.5.2.2.0.nupkg + + Packages\TrackableEntities.CodeTemplates.Client.Net45.2.5.0.nupkg true - - Packages\TrackableEntities.EF.6.2.2.0.nupkg + + Packages\TrackableEntities.CodeTemplates.Client.Portable.2.5.0.nupkg true - - Packages\TrackableEntities.Patterns.2.2.0.nupkg + + Packages\TrackableEntities.CodeTemplates.Service.Net45.2.5.0.nupkg true - - Packages\TrackableEntities.Patterns.EF.6.2.2.0.nupkg + + Packages\TrackableEntities.CodeTemplates.Shared.Net45.2.5.0.nupkg true - - Packages\WebApiTestOnHelpPage.1.3.4.nupkg + + Packages\TrackableEntities.CodeTemplates.Shared.Portable.2.5.0.nupkg true - - Packages\WebGrease.1.6.0.nupkg + + Packages\TrackableEntities.Common.2.5.2.1.nupkg true - + + Packages\TrackableEntities.EF.5.2.5.2.nupkg true - Always - + + Packages\TrackableEntities.EF.6.2.5.2.nupkg true - Always - + + Packages\TrackableEntities.Patterns.2.5.2.nupkg true - Always - + + Packages\TrackableEntities.Patterns.EF.6.2.5.2.nupkg true - Always - + + Packages\WcfSerializationHelper.1.0.0.nupkg true - Always - + + Packages\WebActivator.1.4.4.nupkg true - Always - + + Packages\WebApiTestOnHelpPage.1.3.4.nupkg + true + + + Packages\WebGrease.1.6.0.nupkg + true + + true Always @@ -275,26 +309,24 @@ - - {046940fe-cc75-43e2-9c41-346aebbbb03b} - ItemTemplateParametersWizard + + {A1DC5D35-B381-4A89-9922-E83923D4AD2F} + EntitiesSelectionWizard Wizards BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b DebugSymbolsProjectOutputGroup%3b - + + {046940fe-cc75-43e2-9c41-346aebbbb03b} + ItemTemplateParametersWizard + + {8e21f5fd-3941-45a6-b8f8-9628b8a58594} TrackableEntities.ItemWizard - Wizards - BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - + {c9646be1-e999-47bd-8a9d-083017e6269a} TrackableEntities.TemplateWizard - Wizards - BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b diff --git a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/source.extension.vsixmanifest b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/source.extension.vsixmanifest index 1fdaed74..991aa50b 100644 --- a/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/source.extension.vsixmanifest +++ b/Extensions/VS2015/Deploy/TrackableEntities.VS2015.Deploy/source.extension.vsixmanifest @@ -1,10 +1,10 @@ - + Trackable Entities for Visual Studio 2015 N-Tier support for Entity Framework with Visual Studio project and item templates for quickly building n-tier applications using entities that are change-tracked on the client and persisted on the server via WCF or ASP.NET Web API. - http://trackable.codeplex.com + http://tonysneed.github.io/trackable-entities License.txt ReleaseNotes-v2.5.rtf tracking-small.png @@ -21,8 +21,6 @@ - - @@ -36,5 +34,7 @@ + + diff --git a/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.ComponentModelHost.dll b/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.ComponentModelHost.dll new file mode 100644 index 00000000..67601009 Binary files /dev/null and b/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.ComponentModelHost.dll differ diff --git a/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.Shell.11.0.dll b/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.Shell.11.0.dll new file mode 100644 index 00000000..5b1a4e33 Binary files /dev/null and b/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.Shell.11.0.dll differ diff --git a/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.Shell.11.0.xml b/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.Shell.11.0.xml new file mode 100644 index 00000000..b92d0d3e --- /dev/null +++ b/Extensions/VS2015/Deploy/lib/Microsoft.VisualStudio.Shell.11.0.xml @@ -0,0 +1,30290 @@ + + + + Microsoft.VisualStudio.Shell.11.0 + + + + + + + + + + + + Microsoft internal use only. Manages a collection of named dispatchers. Naming the dispatchers allows sharing of dispatchers between different components. + + + Microsoft internal use only. Gets or creates a dispatcher with the specified name. + The dispatcher associated with the name. + The name of the thread/dispatcher (one is created per unique name). + Optional size of the stack to be used for new threads. + + + + + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + + + Microsoft internal use only. + Cookie type + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + Gel collection to wrap. + + + + Microsoft internal use only. + Gel collection to wrap. + + + Microsoft internal use only. + + + Microsoft internal use only. + True means this is a call to . False means it has been called from the finalizer. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. Represents a Data Source in a Gel data model. + + + Microsoft internal use only. Initializes a new instance of the class. + + + Microsoft internal use only. Gets the value of the given for this . + Value of the given for this . + + whose value is to be obtained. + + + Microsoft internal use only. Gets the value of type T of the given for this . + Value of the given for this . + + whose value is to be obtained. + Type of the value to obtain. + + + Microsoft internal use only. Invokes a given defined in this . + Result of the invocation. + + to invoke. + Parameter passed to the on invocation. + + + Microsoft internal use only. Invokes a given defined in this . + Result of the invocation. + Name of the verb to invoke. + Parameter passed to the verb on invocation. + + + Microsoft internal use only. Registers to be notified when a property changes. + Returns S_OK if the sink was registered. + [in] The interface to call when a change occurs. + [out] Location to return an ID for this event sink. + + + Microsoft internal use only. Closes this data source. + Returns S_OK if the data source was closed properly. + + + Microsoft internal use only. Returns an enumeration of the available properties. + Returns S_OK if the enumeration interface was returned properly. + [out] Location to return a pointer to properties enumeration interface. + + + Microsoft internal use only. Returns an enumeration of verbs for the data source. + Returns S_OK if the enumeration was returned. + [out] Location to return a pointer to the enumeration interface. + + + Microsoft internal use only. Returns the shape identifier for this data source. Two data sources with the same shape identifier will have exactly the same properties and verbs. + Returns S_OK if the shape identifier was returned. + [in] The globally unique identifier for the shape. + [out] Location to return the ID for the shape. + + + Microsoft internal use only. Returns the value of a property. + Returns S_OK if the value was returned. + [in] The name of the property to return. + [out] Location to return a pointer to the interface for the property value. + + + Microsoft internal use only. Invokes a verb on the data source. + Returns S_OK if the verb executed. + [in] The name of the verb to execute. + [in] The object containing arguments for the verb. + [out] Location to return a pointer to the interface for the result of the verb. + + + Microsoft internal use only. Returns the type, format and value of a property. + Returns S_OK if the information was returned. + [in] The name of the property. + [out] Location to return the type name. + [out] Location to return the format. + [out] Location to return a pointer to the interface for the property value. + + + Microsoft internal use only. Sets a property to its default value. + Returns S_OK if the property was reset. + [in] The name of the property to reset. + + + Microsoft internal use only. Sets a property to a value. + Returns S_OK if the property was set to the value. + [in] The name of the property. + [in] An object containing the value to set. + + + Microsoft internal use only. Stops receiving notifications when properties change. + Returns S_OK if the sink was unregistered. + [in] The ID returned by AdvisePropertyChangeEvents. + + + Microsoft internal use only. Lists the verbs in a data source. + Returns S_OK if the enumeration was returned. + [out] Location to return the interface for the verb enumeration. + + + Microsoft internal use only. Invokes a verb on a data source. + Returns S_OK if the verb executed. + [in] The name of the verb to execute. + [in] An argument for the verb. + [out] Location to return the results of executing the verb. + + + Microsoft internal use only. Closes the data source. + Returns S_OK if the data source was closed. + + + Microsoft internal use only. Returns a enumeration of verbs for the data source. + Returns S_OK if the enumeration was returned. + [out] Location to return the enumeration interface. + + + Microsoft internal use only. Executes a verb on the data source. + Returns S_OK if the verb executed. + [in] The name of the verb to execute. + [in] An argument for the verb. + [out] Location to return the results of the operation. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. Resets the value of the given for this to its default value. + + whose value is to be reset. + + + + Microsoft internal use only. Sets the value of the given for this . + + whose value is to be set. + New value for the . + + + Microsoft internal use only. Representation of a property in a Gel data model. + + + Microsoft internal use only. Initializes a new instance of the class. + + + Microsoft internal use only. Converts a Func<GelDependencyObject, T> to a GelPropertyGetterCallback so they can be passed as arguments to registration functions. + The GelPropertyGetterCallback returning objects of type T. + The function to be cast to . + The type returned by the function to be converted. + + + Microsoft internal use only. Gets the with the given name that was registered on the given Type. + The GelProperty registered for the given Type with the given name. + Type of the property owner. + Name of the property. + + + Microsoft internal use only. Gets an enumeration of all the registered properties for the given Type. + Enumeration of all registered properties for the given Type. + Type whose properties are to be obtained. + Indicates if a search of properties is to be performed in base types. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + Microsoft internal use only. Registers a Gel property. + Name of the property. + Name of the property. + Default value of the property. + Owning type. + + + + + + Microsoft internal use only. Registers a Boolean property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers a collection property. + The registered property. + Name of the property. + The default value creator function. + Owning type. + + + Microsoft internal use only. Registers a data source property. + The registered property. + Name of the property. + Owning type. + + + Microsoft internal use only. Registers a data source property. + The registered property. + Name of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers a data source property. + The registered property. + Name of the property. + The default value creator function. + Owning type. + + + Microsoft internal use only. Registers a Double property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function + Owning type. + + + Microsoft internal use only. Registers a DWORD property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers a GUID property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers a BOOLEAN property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a built-in property with a getter callback. + The registered property. + Name of the new property. + Data type of the new property (). + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a collection property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a data source property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owing type. + + + Microsoft internal use only. Registers a Double property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a DWORD property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a GUID property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers an INT property with a getter callback. + The registered property. + Name of the new property + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a property with a getter callback. + The registered property. + Name of the new property. + Data type of the new property (). + Data format of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a property with a getter callback. + The registered property. + Name of the property. + Data type of the new property (). + Data format of the new property. + The getter function. + If this parameter is true, then the getter function is called only once. + Owning type. + + + Microsoft internal use only. Registers a single property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a string property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owing type. + + + Microsoft internal use only. Registers an unknown property with a getter callback. + The registered property. + Name of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers a Windows Presentation Foundation (WPF) property with a getter callback. + The registered property. + Name of the new property. + Type of the new property. + One-time getter function. + Owning type. + + + Microsoft internal use only. Registers an INT property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers a BOOLEAN property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a built-in property with a getter callback. + The registered property. + Name of the new property. + Data type of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a collection property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a data source property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a Double property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a DWORD property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a GUID property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers an INT property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a property with a getter callback. + The registered property. + Name of the new property. + Data type of the new property (). + Data format of the new property. + The getter function. + Owning type. + + + Microsoft internal use only.Registers a Single property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owing type. + + + Microsoft internal use only. Registers a String property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers an unknown property with a getter callback. + The registered property. + Name of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a Windows Presentation Foundation (WPF) property with a getter callback. + The registered property. + Name of the new property. + Type of the new property. + The getter function. + Owning type. + + + Microsoft internal use only. Registers a Single property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers a String property. + The registered property. + Name of the property. + Owning type. + + + Microsoft internal use only. Registers a String property. + The registered property. + Name of the property. + Default value of the property. + The changed function. + The validator function. + Owning type. + + + Microsoft internal use only. Registers an unknown property. + The registered property. + Name of the property. + The default value creator function. + Owner type. + + + Microsoft internal use only. Registers a Windows Presentation Foundation (WPF) property. + The registered property. + Name of the property. + Type of the property. + The default value creator function. + Owning type. + + + Microsoft internal use only. Value that indicates that a value has not been set on a . + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. Represents a verb in a Gel data model. + + + Microsoft internal use only. Initializes a new instance of the class. + + + Microsoft internal use only. Gets the with the given name that was registered on the given Type. + + registered for the given Type with the given name. + Type of the verb owner. + Name of the verb. + + + Microsoft internal use only. Gets an enumeration of all registered verbs for the given Type. + Enumeration of all registered verbs for the given Type. + Type whose verbs should be obtained. + Indicates whether to search verbs in base types. + + + Microsoft internal use only. Registers a for a given owner of the registered . + The registered . + Name of the verb to register. + Callback that is called when the verb is invoked. + Owner of the registered . + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. Represents a cache where the handle to an icon is used as a key mapping to a Windows Presentation Foundation (WPF) image wrapper for that handle to an icon. + + + Microsoft internal use only. Initializes a new instance of the class. + + + Microsoft internal use only. Returns a managed , based on the provided pointer to an unmanaged icon image. + The created . + Pointer to the unmanaged icon source. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. Represents a weak cache of images from a native HIMAGELIST. + + + Microsoft internal use only. Initializes a new instance of the class. + Handle to the image list. + + + Microsoft internal use only. Returns a managed , based on the provided pointer to an unmanaged icon image. + The created . + Pointer to the unmanaged icon source. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Object to store in the property. The type is deduced on first access. + + + Microsoft internal use only. + Object to store in the property. + UI Type of the object. + + + Microsoft internal use only. + The rhs of the comparison + true iff equal + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. Given a UI type, creates an object that represents the default value of that type. + The default value, or null if the type string was not recognized. + UI type string. + + + Microsoft internal use only. Given a UI type string, returns the appropriate . + The for that UI type or null if the UI type is unrecognized. + UI type string. + + + Microsoft internal use only. Gets the corresponding UI type string for a given . + The corresponding UI type string or null if one cannot be found. + + to use. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + Name of the new property + Initial value for the property + + + Microsoft internal use only. + Name of the new property + Initial value for the property + + + Microsoft internal use only. + Name of the new property + Type of the new property + Method to actually return the property when asked + Type returned from GetterThunk + + + Microsoft internal use only. + Name of the new property + Initial value for the property + + + Microsoft internal use only. + Name of the new property + Initial value for the property + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Property name + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + Property name + New value for the property + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The item to be added + The 0-based index of the item in the collection + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + Microsoft internal use only. Provides helper methods for working with UI Factories. + + + Microsoft internal use only. Creates a UI element from the UI factory service from the UI element descriptor. + An element from the UI factory. + Descriptor of the UI element. + + + Microsoft internal use only. Creates a UI element from the UI factory service from the UI element identifier. + An element from the UI factory. + GUID part of the UI element identifier. + DWORD part of the UI element identifier. + + + Microsoft internal use only. Given a UI element created by a UI factory, resolves it to a Windows Presentation Format (WPF) and binds it to the given model. + A WPF that is bound to the given model. + Object created by a UI factory. + Data model of the new view. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + + + + + + Microsoft internal use only. + IVsUIObject whose data is to be retrieved + + + Microsoft internal use only. + The object + + + Microsoft internal use only. + The object + + + Microsoft internal use only. + Data source to query + Property to be returned + + + + Microsoft internal use only. + Data source to query + Property to be returned + + + + + Microsoft internal use only. + Data source to query + Property to be returned + + + + Microsoft internal use only. + Data source to query + Property to query + + + Microsoft internal use only. + Data source to query + Property to be returned + New value for the property + + + + Microsoft internal use only. + Data source to query + Property to be returned + New value for the property + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Not supported. Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. A that wraps a single , which is a . This allows you to add a simple as a child of one of the standard containers, such as , , , and so on. + + + Microsoft internal use only. Initializes a new instance of the class. + + + Microsoft internal use only. Gets or sets the visual to be wrapped. + + + Microsoft internal use only. Returns the child at the given index. It is always the wrapped visual. + The wrapped . + Must always be zero (0). + + + Microsoft internal use only. Gets the count of child visuals. This property can be either zero or one depending on whether the property has been set. + The count of child visuals. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The type of elements to store in the cookie table + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only.v + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The type returned from get_Data + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Provides static helper methods for windows. + + + Adds a help topic to a data source used by a dialog that uses the constants HelpTopic property and Help verb. + The data source to be used by the dialog. + Help topic to be displayed by the dialog. + + + Creates and displays the specified element as a modeless child window. + The handle of the child window. + The element to create and display. + The parent window handle. + + + Creates and sets the specified element as a child of the specified parent. + true if the parent relationship could be established, otherwise false. + The element to be created and displayed + The framework element to be used as parent + Returns the created child framework element + + + Creates and displays a UI element as a modeless child window. + The handle of the child window. + The GUID of the UI factory that should create the UI element. + The ID of the UI element to be created and displayed. + The data source. + The parent window handle. + + + Creates and sets the element as a child of the specified parent. + true if the parent relationship could be established, otherwise false. + The GUID of the UI factory that should the UI element. + The ID of the UI element to be created and displayed. + The data source. + The framework element to be used as parent. + [out] The created child framework element. + + + Creates a UI element. + The UI element. + The GUID of the UI factory that should create the element. + The ID of the UI element to create. + + + + Creates a WPF loader to create objects that wrap the UI objects specified by their types. + An object that implements the interface. + + + Gets the window handle that can be used to parent modal dialogs. + The window handle that can be used to parent modal dialogs. + + + Creates a from the specified UI element. + The framework element of the UI object. + The UI element from which to get a . + + + Gets a window handle from the specified UI element. + The window handle. + The UI element. + The parent window handle. + + + Displays a WPF window as a modal dialog in Visual Studio. + The dialog result. + The WPF window to be shown as a dialog. + + + Displays a WPF window using a Win32 parent window. + The dialog result. + The dialog to display. + The parent window handle. + + + Creates the specified element and displays it as a modal dialog, using the main window of the IDE as the parent. + A Win32 button ID, or 0 for unknown. + The element to create and display as a dialog. + + + Displays the UI element as a modal dialog, using the specified Win32 window as the parent. + The Win32 button ID, or 0 for unknown. + The element to display as a modal dialog. + The parent window handle. + + + Creates the specified element and displays it as a modal dialog, using the specified window or the main window of the IDE as the parent. + A Win32 button ID, or 0 for unknown. + The element to create and display as a dialog window. + The window to be used as the parent. + + + Create the specified element and display it as a modal dialog, using the main window of the IDE as the parent. + The Win32 button ID, or 0 for unknown. + The GUID of the UI factory that should create. the element + The ID of the UI element to create. + The data source. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Supply type mappings for WPF objects + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + An enumeration of flags used by the infrastructure. + + + Exit when a handle is signaled. + + + Exit when all handles are signaled and a message is received. + + + Exit when an RPC call is serviced. + + + Provides methods for dealing with common COM error codes. + + + + + Determines whether an HRESULT is an error return code. + true if represents an error, otherwise false. + The HRESULT to test. + + + Determines whether the specified exception is critical. + true if the specified exception is critical, otherwise false. + The exception. + + + + Determines whether an HRESULT is a success return code. + true if represents a success otherwise false. + The HRESULT to test. + + + Determines whether the parameter is a success or failure HRESULT and throws an exception in case of failure. + The HRESULT. + The HRESULT to test. + + + Determines whether the parameter is a success or failure HRESULT and throws an exception if it is a failure that is not included in the array of well-known failures. + The HRESULT. + The HRESULT to test. + If is found in this array of expected failures no exception should be thrown. + + + Provides the methods necessary to add, remove, and test for the existence of handlers in an event handler collection. + + + When implemented by a derived class, adds a named handler to an event handler collection. + + if the method succeeds, otherwise an error code. + The name of the handler. + + + When implemented by a derived class, returns an enumerator over all the handlers added by successive calls to . + + if the method succeeds, otherwise an error code. + + + When implemented by a derived class, determines whether a named handler is in the event handler collection. + true if the handler is in the underlying handler collection, otherwise false. + The name of the evaluated handler. + + + When implemented by a derived class, removes a named handler from the collection of event handlers. + + if the method succeeds, otherwise an error code. + The name of the event handler to remove. + + + Use this class to access common Visual Studio constants. + + + The GUID that represents all objects in the selection container. + + + + + Use this legacy GUID to access a specific output pane. + + + Use . + + + An obsolete flag combined bitwise as the first parameter of the method . + + + Indicates that the editor factory should perform necessary corrections. + + + Indicates that the editor factory should open the file. + + + Indicates that the editor factory should create the editor silently. + + + The GUID of the debug engine for COM Plus. + + + The document's data is HTML format. + + + The GUID of the HTML package. + + + GUID of the HTML language service. + + + CLSID for Miscellaneous Files project. + + + Project type CLSID for Solution Items project. + + + Provide notifications when configuration-related events are fired. Implemented by the environment. + + + The CLSID of the document outline package window. + + + The CLSID for Visual Studio Environment Package. + + + The CLSID for Visual Studio Environment Task List. + + + The CLSID for Visual Studio Environment Task List Package. + + + The CLSID for Visual Studio Environment Hierarchy Window. + + + On the Tools menu, the command for options. + + + + + Sent from a page dialog to Component Selector dialog, informs of selection change on page. + + + Sent from a page dialog to Component Selector dialog, informs of a double click on a selected item. + + + Resets and clears selection in list of available components on the Component Selector dialog. + + + Retrieves information about selection on the Component Selector dialog. + + + Initializes the list of available components on the Component Selector dialog. + + + Initializes a tab with in on the Component Selector dialog. + + + Determine whether the Select button should be enabled on the Component Selector dialog. + + + Sets the multiple-selection mode on the Component Selector dialog. + + + Use this legacy GUID to access a specific output pane. + + + An HRESULT that indicates that the array is currently locked. + + + A COM return value. + + + A return value that indicates subscript out of range. + + + An error return value that indicates that the number of elements provided to the method is different from the number of arguments accepted by the method. + + + One of the method arguments is not a valid variant type. + + + A return error that indicates the destination token buffer is too small. + + + A return error that indicates a divide by zero error. + + + This return value indicates that the call generated an exception. The usual implementation is to specify that an argument of the method that returned this error is a pointer to a structure that contains exception information. + + + A return value indicating that the requested member does not exist, or the call to tried to set the value of a read-only property. + + + A return value indicating that the invoked implementation of IDispatch does not support named arguments. + + + A return value indicating an unexpected argument type. + + + An error that indicates that a value could not be coerced to its expected representation. + + + A return value that indicates that one of the parameter DISPIDs does not correspond to a parameter on the method. + + + A return value that indicates that a required parameter was omitted. + + + A return value that indicates that one or more of the parameters could not be coerced. + + + A return value that indicates that the interface identifier passed in is not equal to IID_NULL. + + + A return value that indicates that the member being invoked interprets string arguments according to the Locale ID (LCID), and the LCID is not recognized. If the LCID is not needed to interpret arguments, this error should not be returned. + + + A return value that indicates that one or more of the names were not known. The returned DISPIDs contain DISPID_UNKNOWN for each entry that corresponds to an unknown name. + + + A constant referenced in selection events to describe which component of the shell has just been selected. + + + A return value that may indicate an explicit cancellation action or some process that could no longer proceed after (for instance) both undo and rollback failed. + + + A return value that describes a general access denied error. + + + Error HRESULT for a generic failure. + + + A return value that indicates an invalid handle. + + + Error HRESULT for an invalid argument. + + + Error HRESULT for the request of a not implemented interface. + + + Error HRESULT for the call to a method that is not implemented. + + + Error HRESULT for out of memory. + + + A return value that indicates the availability of an asynchronously accessed interface. + + + A return value that indicates that an invalid pointer, usually null, was passed as a parameter. + + + A return value that indicates that the result of the method call is outside of the error cases the client code can readily handle. + + + + + Identifies commands fired as a result of a WM_APPCOMMAND message received by the main window. + + + The Browse File page. + + + This constant represents the GUID for the interface which is implemented by the shell's OutputWindow tool window. It is used by client code to display messages in the output window. + + + A Visual Studio component selector page GUID. + + + A Visual Studio component selector page GUID. + + + A common system defined editor GUID. + + + A common editor GUID. + + + GUID used to mark a in order to tell to the HTML editor factory to accept preexisting doc data. + + + GUID of the HTML editor factory. + + + A GUID constant used to specify that the type is a physical file on disk or the Web. + + + A GUID constant used to specify that the type is a physical folder on disk or the Web. + + + A GUID constant used to specify that the type is a nested hierarchy project. + + + A GUID constant used to specify that the type is a non-physical folder. + + + A GUID constant used to specify the debug pane inside the output window. + + + The GUID of the pseudo service that returns the General output pane in the VS environment. + + + The project designer GUID. + + + A Visual Studio component selector page GUID. + + + GUID of the Text editor factory. + + + The GUID for dependencies that are build projects. + + + String resource ID for Visual Studio pseudo-folder. + + + This GUID identifies the standard set of commands known by Visual Studio 97 (version 6). + + + The GUID for the highest abstraction task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + The GUID for a certain flavor or task lists. + + + A GUID that defines the command group related to the hierarchy window. + + + The GUID of the COM Plus library. + + + Instructs the selection container not to change the value. + + + Instructs the selection container to set the value to null. + + + GUID of the IUnknown COM interface. + + + Any defined view for document data. + + + + cmdidOpenWith handlers should pass this value to the method to get the Open With dialog, in this case on possible Code Views. + + + + cmdidOpenWith handlers should pass this value to the method to get the Open With dialog, in this case populated with possible debugging views which map to the same view as . + + + + cmdidOpenWith handlers should pass this value to the method to get the Open With dialog, in this case to View Form designer views. + + + + cmdidOpenWith handlers should pass this value to method to get the Open With dialog, in this case the default/primary view of the editor factory. + + + + cmdidOpenWith handlers should pass this value to method to get the Open With dialog, in this for a document or data text editor view. + + + + cmdidOpenWith handlers should pass this value to method which prompts the user to choose which user-defined view to use. + + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + A legacy OLE error. + + + The user was prompted to save but chose the Cancel button from the prompt message box. + + + The cache is for a static object and it already has a cache node. + + + The versions of COMPOBJ.DLL and OLE2.DLL on your machine are incompatible with each other. + + + + + + + Describes what component of the shell has just been selected. + + + HRESULT for false. + + + Generic HRESULT for success. + + + Instructs the selection container not to change the value. + + + Instructs the selection container to set the value to null. + + + The GUID that represents selected objects in the selection container. + + + The name of the Visual Studio service that implements . + + + Returns an IID_IVsOutputWindowPane interface of the General output pane in the Visual Studio environment. + + + A Visual Studio toolbox service. + + + + A constant referenced in selection events to describe which component of the shell has just been selected, in this case in response to project startup. + + + Specifies a UI context in which the code window is active. + + + Specifies The UI context for debugging mode. + + + Specifies the UI context for design mode. + + + Specifies a UI context in which a drag/drop operation is active. + + + Specifies a UI context in which an empty solution is active. + + + Specifies a UI context in which the Full Screen mode of the view is active. + + + Specifies a UI context in which no solution is open. + + + Specifies a UI context in which the solution is being built. + + + Specifies a UI context in which a solution exists. + + + + Specifies a UI context in which a solution is open and has multiple projects loaded. + + + Specifies a UI context in which a solution with a single project is open. + + + Error HRESULT for a client abort. + + + A constant referenced in selection events to describe which component of the shell has just been selected. + + + A constant referenced in selection events to describe which component of the shell has just been selected. + + + A flag that requests that only the most recently modified document be built. + + + A flag that requests that only the selected items be rebuilt. + + + + A flag that is private to a particular implementation. + + + A flag that requests that the project be rebuilt completely, regardless of whether it is up-to-date. + + + A constant returned by interfaces to asynchronous behavior when the object in question in already busy. + + + + + A Visual Studio specific error HRESULT for "Incompatible document data". + + + + + A Visual Studio specific error HRESULT that indicates "Package not loaded." + + + A Visual Studio-specific error HRESULT that indicates that the "Project already exists." + + + A Visual Studio specific error HRESULT that indicates "Project configuration failed." + + + A Visual Studio-specific error HRESULT that indicates "Project not loaded." + + + + A Visual Studio-specific error HRESULT that indicates "Solution already open." + + + A Visual Studio-specific error HRESULT that indicates "Solution not open." + + + Returned by build interfaces that have parameters for specifying an array of IVsOutput's but the implementation can only apply the method to all outputs. + + + + returns this value if the document has a format that cannot be opened in the editor. + + + An HRESULT value that indicates that the user hit the back button in a Visual Studio wizard. + + + + + + + A Visual Studio-specific error HRESULT that indicates "Project forwarded." + + + A Visual Studio-specific constant for a "Toolbox marker." + + + A Visual Studio-specific constant that indicates that a cookie has not been set. + + + A Visual Studio item identifier that represents the absence of a project item. This value is used when there is no current selection. + + + A Visual Studio item identifier that represents the root of a project hierarchy and is used to identify the entire hierarchy, as opposed to a single item. + + + A Visual Studio item identifier that represents the currently selected item or items, which can include the root of the hierarchy. + + + A Visual Studio-specific constant for broadcasting a notification message via that indicates the beginning of modality. + + + A Visual Studio-specific constant for broadcasting a notification message via that indicates the end of modality. + + + A Visual Studio-specific constant for broadcasting a notification message via indicating that the command bar metrics have changed. + + + + Identifies commands in Visual Studio 2010. + + + GUID for the Windows 2000 command set. This is a set of standard editor commands. + + + + + + + A constant referenced in selection events to describe which component of the shell has just been selected. + + + Identifies commands fired as the result of a WM_APPCOMMAND message received by the main window. + + + The browser backward command. + + + The browser forward command. + + + The browser refresh command. + + + The browser stop command. + + + The browser search command. + + + The browser favorites command. + + + The browser home command. + + + The volume mute command. + + + The volume down command. + + + The volume up command. + + + The next track command. + + + The previous track command. + + + The media stop command. + + + The play/pause command. + + + The launch mail command. + + + The launch media select command. + + + The launch application command. + + + The alternate launch application command. + + + The bass down command. + + + The bass boost command. + + + The bass up command. + + + The treble down command. + + + The treble up command. + + + The microphone volume mute command. + + + The microphone volume down command. + + + The microphone volume up command. + + + Contains command ids for an app package debug target command set. + + + Windows app package local machine command id. + + + Windows app package remote machine command id. + + + Windows app package simulator command id. + + + Windows app package tethered device command id. + + + Windows app package debug target command set GUID. + + + Windows app package debug target command set GUID. + + + These CATID GUID values are used to extend objects passed to the property browser and automation objects that support automation extenders. + + + + + + + Used to extend automation objects for project types that support it (including VB and C# projects). + + + Used to extend automation objects for project types that support it (including VB and C# projects). + + + Used to extend automation objects for project types that support it (including VB and C# projects). + + + Used to extend automation objects for project types that support it (including VB and C# projects). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents flags to be used with the are used with method. + + + Clone the file. This is mutually exclusive with OpenFile. + + + Open the file. This is mutually exclusive with CloneFile. + + + The editor factory should create the editor silently. + + + The editor factory should perform the necessary fixes. + + + A set of CLSIDs used in Visual Studio. + + + The CLSID of the DocData object of the HTML editor. + + + The CLSID of the DocData object of the HTML editor. + + + The CLSID for the Miscellaneous Files project. + + + The CLSID for the Miscellaneous Files project. + + + The CLSID of the Solution Folder project. + + + The CLSID of the Solution Folder project. + + + The CLSID of the Solution Items project. + + + The CLSID of the Solution Items project. + + + The CLSID of the unloaded project. + + + The CLSID of the unloaded project. + + + The CLSID of the . + + + The CLSID of the . + + + The CLSID of the Visual Studio environment package. + + + The CLSID of the Visual Studio environment package. + + + The CLSID of the search query parser created by the Visual Studio search utilities. + + + The CLSID of the search query parser created by the Visual Studio search utilities. + + + The CLSID of the Visual Studio task list. + + + The CLSID of the Visual Studio task list. + + + The CLSID of the Visual Studio task list package. + + + The CLSID of the Visual Studio task list package. + + + The CLSID of the Visual Studio text buffer. + + + The CLSID of the Visual Studio text buffer. + + + The CLSID of the hierarchy window tree control. + + + The CLSID of the hierarchy window tree control. + + + The CLSID of the WPF loader. + + + The CLSID of the WPF loader. + + + Represents the GUIDs of standard Visual Studio command sets. + + + + + GUID for the command group implemented in the shell main menu. + + + GUID for the command group implemented in the shell main menu. + + + GUID for the pivot list command group implemented in the Solution Explorer package. + + + GUID for the pivot list command group implemented in the Solution Explorer package. + + + GUID for the Microsoft Visual Studio 2012 command set. This is a set of new commands added to Microsoft Visual Studio 2012. + + + GUID for the Microsoft Visual Studio 2012 command set. This is a set of new commands added to Microsoft Visual Studio 2012. + + + The GUID of the Visual Studio 2010 command set. This is a set of new commands added to Visual Studio 2010. + + + The GUID of the Visual Studio 2010 command set. This is a set of new commands added to Visual Studio 2010. + + + The GUID of the standard Visual Studio editor commands. + + + The GUID of the standard Visual Studio editor commands. + + + The GUID of a set of Visual Studio commands. + + + The GUID of a set of Visual Studio commands. + + + The GUID of a command set that applies only to the UIHierarchyWindow. + + + The GUID of a command set that applies only to the UIHierarchyWindow. + + + The GUID of a command set that applies to the Document Outline tool window. + + + The GUID of a command set that applies to the Document Outline tool window. + + + Set of code model languages. + + + Visual C# + + + Interface Definition Language + + + Message Compiler + + + Visual Basic + + + Visual C++ + + + Provides GUIDs for the Component Selector pages. + + + The COM page. + + + The COM page. + + + The .Net managed assembly page. + + + The .Net managed assembly page. + + + The Projects page. + + + The Projects page. + + + Provides GUIDs for the debug engine. + + + The GUID of the managed and native debug engine. + + + The GUID of the debug engine for managed and native code. + + + The GUID of the debug engine for managed and native code. + + + The GUID of the managed only debug engine. + + + The GUID of the debug engine for managed code. + + + The GUID of the debug engine for managed code. + + + The GUID of the native only debug engine. + + + The GUID of the debug engine for native code. + + + The GUID of the debug engine for native code. + + + The GUID of the scripting debug engine. + + + The GUID of the debug engine for scripting. + + + The GUID of the debug engine for scripting. + + + The GUID of the SQL debug engine. + + + The GUID of the SQL debug engine. + + + The GUID of the SQL debug engine. + + + The GUID of the SQL debug engine. + + + The GUID of the SQL debug engine. + + + The GUID of the SQL debug engine. + + + The GUID of the SQL local debug engine. + + + The GUID of the SQL local debug engine. + + + The GUID of the SQL debug engine. + + + Contains debug port supplier GUIDs for the structures and the interface. + + + Debug port supplier GUID. + + + Debug port supplier GUID. + + + Contains command ids for a debug target handler command set. + + + Debug target anchor item command id. + + + Debug target anchor item no attach to process command id. + + + Debug type combo command id. + + + Debug type item handler command id. + + + Generic debug target command id. + + + Debug target handler command set GUID. + + + Debug target handler command set GUID. + + + Represents editor property categories to use with the interface. + + + The GUID for text manager global properties. + + + The GUID for text manager global properties + + + The GUID for view properties that override both ToolsOptions and user commands. + + + The GUID for view properties that override both ToolsOptions and user commands. + + + These values are used with the VSHPROPID_ItemType property. + + + The physical file on disk or web ( returns a file path). + + + The physical file on disk or web ( returns a file path). + + + The physical folder on disk or web ( returns a directory path). + + + The physical folder on disk or web (( returns a directory path). + + + The GUID of a nested or subproject. + + + The GUID of a nested or subproject. + + + The GUID of the non-physical folder (the folder is logical and not a physical file system directory). + + + The GUID of the non-physical folder (the folder is logical and not a physical file system directory). + + + Represents the GUIDs of Visual Studio views. + + + The GUID of any view + + + The GUID of any view. + + + The GUID of the code editor view. + + + The GUID of the code editor view. + + + The GUID of the debugger view. + + + The GUID of the debugger view. + + + The GUID of the designer view. + + + The GUID of the designer view. + + + The GUID of the primary (default) view. + + + The GUID of the project-specific editor view. + + + The GUID of the project-specific editor view. + + + The GUID of the text editor view. + + + The GUID of the text editor view. + + + The GUID of a use-defined view. + + + The GUID of a use-defined view. + + + Specifies result codes from . + + + The result code for OK. + + + The result code for Cancel. + + + The result code for Abort. + + + The result code for Retry. + + + The result code for Ignore. + + + The result code for Yes. + + + The result code for No. + + + The result code for Close. + + + The result code for Help. + + + The result code for Try Again. + + + The result code for Continue. + + + Contains well known reasons used for . + + + Find results. + + + Find symbol results. + + + Navigation. + + + Solution Explorer. + + + Team Explorer. + + + Provides the GUIDs of the panes of the output window. + + + The GUID of the build output pane inside the output window. + + + The GUID of the build output pane inside the output window. + + + The GUID of the debug pane inside the output window. + + + The GUID of the debug pane inside the output window. + + + The GUID of the general output pane inside the output window. + + + The GUID of the general output pane inside the output window. + + + The GUID of the sorted build output pane inside the output window. + + + The GUID of the sorted build output pane inside the output window. + + + GUID of the store validation pane inside the output window. + + + GUID of the store validation pane inside the output window. + + + Represents flags used in the event handler. + + + The undo manager. + + + A window frame. + + + A document frame. + + + The startup project. + + + The property browser. + + + A user context. + + + The current result list. + + + The most recently deactivated window frame. + + + Contains GUIDs for standard tool windows. + + + GUID of the Application Verifier window. + + + GUID of the Autos window. + + + GUID of the Behaviors window. + + + GUID of the Bookmarks window. + + + GUID of the Breakpoints window. + + + GUID of the Call Browser window. + + + GUID of the Call Browser Secondary window. + + + GUID of the Call Heirarchy window. + + + GUID of the Call Stack window. + + + GUID of the Class Details window. + + + GUID of the Class View window. + + + GUID of the Code Coverage Results window. + + + GUID of the Code Definition window. + + + GUID of the Code Metrics window. + + + GUID of the Color Palette window. + + + GUID of the Command window. + + + GUID of the Conditional Formatting window. + + + GUID of the Console IO window. + + + GUID of the CSS Apply Styles window. + + + GUID of the CSS Manage Styles window. + + + GUID of the CSS Properties window. + + + GUID of the CSS Property Grid window. + + + GUID of the Database Schema View window. + + + GUID of the Data Collection Control window. + + + GUID of the Data Generation Details window. + + + GUID of the Data Generation Preview window. + + + GUID of the Data Source window. + + + GUID of the DB Pro Event Monitor window. + + + GUID of the Debug History window. + + + Device Security Manager + + + Disassembly + + + Document Outline + + + Entity Mapping Details + + + Entity Model Browser + + + Error List + + + Find Results 1 + + + Find Results 2 + + + Find in Files + + + Find/Replace + + + Find Symbol + + + Find Symbol Results + + + HTML Property Grid + + + Immediate + + + Layers + + + Load Test + + + Load Test Post Run + + + Local Changes + + + Locals + + + Macro Explorer + + + Manual Test Execution + + + Modules + + + Object Browser + + + Object Test bench + + + Output + + + Parallel Stacks + + + Parellel Tasks + + + Pending Check In + + + Performance Explorer + + + Processes + + + Properties + + + Property Manager + + + GUID of the Registers window. + + + GUID of the Resource View window. + + + GUID of the Running Documents window. + + + GUID of the Server Explorer window. + + + GUID of the Solution Explorer window. + + + GUID of the Source Control Explorer window. + + + GUID of the Source History window. + + + GUID of the SQL Schema Update Script window. + + + GUID of the Start Page window. + + + GUID of the Style Organizer window. + + + GUID of the Task List window. + + + GUID of the Team Explorer window. + + + GUID of the Test Impact View window. + + + GUID of the Test Manager window. + + + GUID of the Test Results window. + + + GUID of the Test Run Queue window. + + + GUID of the Test View window. + + + GUID of the Threads window. + + + GUID of the Toolbox window. + + + GUID of the UAM Synchronizations window. + + + GUID of the VCPP Property Manager window. + + + GUID of the VSMD Property Browser window. + + + GUID of the VSTO Add Bookmark window, + + + GUID of the Watch window. + + + GUID of the Web Browser window. + + + GUID of the Web Browser Preview window. + + + GUID of the Web Part Gallery window. + + + GUID of the XML Schema Explorer window. + + + Represents toolbox multitargeting fields. + + + The full assembly name (strong name), including the version. + + + A semicolon-delimited list of the target framework monitors that are supported by this item (without profiles). + + + The GUID of the package that implements and knows about this item type. + + + The full type name, for example System.Windows.Forms.Button. + + + Determines whether to use the project target framework's version in toolbox item tooltips. + + + Provides the GUIDs for different command contexts. + + + Specifies a context in which Application Designer is active. + + + Specifies a context in which Application Designer is active. + + + Specifies a context in which a background project is being loaded. + + + Specifies a context in which a background project is being loaded. + + + Specifies a context in which a code window currently has focus. + + + Specifies a context in which a code window currently has focus. + + + Specifies a context in which a C# project is active. + + + Specifies a context in which a C# project is active. + + + Specifies a context in which a data source window is auto visible. + + + Specifies a context in which a data source window is auto visible. + + + Specifies a context in which a data source window is supported by the project. + + + Specifies a context in which a data source window is supported by the project. + + + Specifies a context in which a data source wizard is suppressed. + + + Specifies a context in which a data source wizard is suppressed. + + + Specifies a context in which the user is debugging. + + + Specifies a context in which the user is debugging. + + + Specifies a context where the IDE is in design mode. + + + Specifies a context where the IDE is in design mode. + + + Specifies a context that occurs while dragging items in Solution Explorer. + + + Specifies a context that occurs while dragging items in Solution Explorer. + + + Specifies a context in which an empty solution has been loaded. + + + Specifies a context in which an empty solution has been loaded. + + + Specifies a context in which the first launch after setup is in progress. Packages may use ProvideAutoLoad with this UI context to perform expensive one-time per-user initialization. Note that during the first launch after setup, many services are unavailable and a package may not display any UI. The first launch after setup is not guaranteed to be called; it is just an opportunity for packages to build caches. + + + Specifies a context in which the first launch after setup is in progress. Packages may use ProvideAutoLoad with this UI context to perform expensive one-time per-user initialization. Note that during the first launch after setup, many services are unavailable and a package may not display any UI. The first launch after setup is not guaranteed to be called; it is just an opportunity for packages to build caches. + + + Specifies a context in which an F# project is active. + + + Specifies a context in which an F# project is active. + + + Specifies a context that is active when the IDE is in full screen mode. + + + Specifies a context that is active when is in full screen mode. + + + Specifies a context in which historical debugging is active. + + + Specifies a context in which debugging is active. + + + Specifies a context in which no solution is loaded. + + + Specifies a context in which no solution is loaded. + + + Specifies a context in which the solution is not being built or debugged. + + + Specifies a context in which the solution is not being built or debugged. + + + Specifies a context which is running under a Windows 8 or later operating system. + + + Specifies a context which is running under a Windows 8 or later operating system. + + + Specifies a context in which the project is being retargeted. + + + Specifies a context in which the project is being retargeted. + + + Specifies a context in which the Property Page Designer is active. + + + Specifies a context in which the Property Page Designer is active. + + + Specifies a context in which the Windows Forms Resource Editor is active. + + + Specifies a context in which the Windows Forms Resource Editor is active. + + + Specifies a context in which the Settings Designer is active. + + + Specifies a context in which the Settings Designer is active. + + + Specifies a context in which a project or solution is currently being built. + + + Specifies a context in which a project or solution is currently being built. + + + Specifies a context in which a solution has been loaded. + + + Specifies a context in which a solution has been loaded. + + + Specifies a context in which a solution has been completely loaded. + + + Specifies a context in which a solution has been completely loaded. + + + Specifies a context in which a solution is loaded but is not being built or debugged. + + + Specifies a context in which a solution is loaded but is not being built or debugged. + + + Specifies a context in which a loaded solution contains an app container project. + + + Specifies a context in which a loaded solution contains an app container project. + + + Specifies a context in which a loaded solution contains more than one project. + + + Specifies a context in which a loaded solution contains more than one project. + + + Specifies a context in which a loaded solution contains a single project. + + + Specifies a context in which a loaded solution contains a single project. + + + Specifies a context in which a solution is being opened. + + + Specifies a context in which a solution is being opened. + + + Specifies a context in which a project or solution is being upgraded. + + + Specifies a context in which a project or solution is being upgraded. + + + Specifies a context in which the standard previewer configuration is being changed. + + + Specifies a context in which the standard previewer configuration is being changed. + + + Specifies a context in which the Toolbox has been initialized. + + + Specifies a context in which the Toolbox has been initialized. + + + Specifies a context in which the Toolbox is visible. + + + Specifies a context in which the Toolbox is visible. + + + Specifies a context in which a Visual Basic attribute is active. + + + + + + + + + + + + + + + + + + + + + + + + Specifies a context in which a Visual Basic project is open. + + + Specifies a context in which a Visual Basic project is open. + + + Specifies a context in which a Visual Basic project is open. + + + Specifies a context in which a Visual Basic project is open. + + + Specifies a context in which a Visual C++ project is active. + + + Specifies a context in which a Visual C++ project is active. + + + Provides GUIDs for different project dependencies. + + + The build project dependency. Used with . + + + The build project dependency. Used with . + + + Provides GUIDs for different editor factories. + + + The GUID of the editor factory for external (.exe-based) editors. + + + The GUID of the editor factory for external (.exe-based) editors. + + + The GUID of the HTML Editor factory. + + + The GUID of the HTML Editor factory. + + + The GUID of the Project Properties Designer editor factory. + + + The GUID of the Project Properties Designer editor factory. + + + The GUID of the text editor factory. + + + The GUID of the text editor factory. + + + Special items inside a VsHierarchy. + + + Special items inside a VsHierarchy: no node. + + + Special items inside a VsHierarchy: the hierarchy itself. + + + Special items inside a VsHierarchy: all the currently selected items. + + + Provides GUIDs for language services. + + + The GUID of the HTML language service. + + + The GUID of the HTML language service. + + + These are optional properties that a language service can provide in order to influence the behavior of the text editor. You can get the interface by doing QueryInterface on the object of the language service implementation. + + + The GUID of the property that determines whether the editor supports CF_HTML clipboard format. + + + The string form of the GUID of the property that determines whether the editor supports CF_HTML clipboard format. + + + Provides the GUIDs for different packages. + + + The GUID of the HTML Editor package. + + + The GUID of the HTML Editor package. + + + The GUID of the Document Outline tool window package. + + + The GUID of the Document Outline tool window package. + + + GUID of the Visual Studio shell package. + + + GUID of the Visual Studio shell package. + + + The GUID of the Task List package. + + + The GUID of the Task List package. + + + Specifies the Visual Studio search navigation keys. + + + Enter key. + + + Down arrow key. + + + Up arrow key. + + + Page Down key. + + + Page Up key. + + + Home key. + + + End key. + + + Specifies friendly names for search task statuses. + + + The search task was created but search was not started yet. + + + The search was started. + + + The search has completed. + + + The search has been stopped or interrupted. + + + The search has encountered errors. + + + Constants used in to indicate a new selection state. The selections may be propagated through . + + + + of the active object. + + + Visual Studio tracks this selection automatically so it cannot be set via , but the value may be observed by calling + + + Visual Studio tracks this selection automatically so it cannot be set via , but the value may be observed by calling + + + + of the active StartupProject. + + + + of the active . + + + An event that indicates selection only by document windows that do not push selection context to the property browser. The alternative case is . + + + + of the active for list navigation commands. + + + The value of before it received its current value. It is guaranteed to be different from unless both are empty. + + + Set of the standard, shared commands in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Set of the standard, shared commands in CMDSETID.StandardCommandSet2010_guid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These constants make some basic menu commands available to managed code. + + + Type character + + + Delete Backwards; Delete the current selection, or if no selection, the previous character. + + + Break Line; Insert a line break at the current caret position. + + + Insert Tab; Insert a tab character at the current caret position. + + + + + + Tab Left; Move the caret back one tab stop. + + + Delete; Delete the current selection. + + + Char Left; Move the caret left one character. + + + Char Left Extend; Move the caret left one character, extending the selection.. + + + Char Right; Move the caret right one character. + + + Char Right Extend; Move the caret right one character, extending the selection. + + + Line Up. + + + Line Up Extend; Move the caret up one line, extending the selection. + + + Line Down; Move the caret down one line. + + + Line Down Extend; Move the caret down one line, extending the selection. + + + Document Start; Move the caret to the start of the document. + + + Document Start Extend; Move the caret to the start of the document, extending the selection. + + + Document End; Move the caret to the end of the document. + + + Document End Extend; Move the caret to the end of the document, extending the selection. + + + Line Start; Move the caret to the start of the line. + + + Line Start Extend; Move the caret to the start of the line, extending the selection. + + + Line Start After Indentation; Move the caret to first non-white space character on the line. + + + Line Start After Indentation Extend; Move the caret to first non-white space character on the line, extending the selection. + + + Line End; Move the caret to the end of the line.. + + + Line End Extend; Move the caret to the end of the line, extending the selection. + + + Line Last Char; Move the caret after the last non-white space character on the line. + + + Line Last Char Extend; Move the caret after the last non-white space character on the line, extending the selection.. + + + Page Up; Move the caret up one page. + + + Page Up Extend; Move the caret up one page, extending the selection. + + + Page Down; Move the caret down one page. + + + Page Down Extend; Move the caret down one page, extending the selection. + + + View Top; Move the caret to the top line in view. + + + View Top Extend; Move the caret to the top line in view, extending the selection. + + + View Bottom; Move the caret to the last line in view. + + + View Bottom Extend; Move the caret to the last line in view, extending the selection. + + + Scroll Line Up: Scroll the document up one line. + + + Scroll Line Down; Scroll the document down one line. + + + Scroll Page Up: Scroll the document up one page.. + + + Scroll Page Down: Scroll the document down one page. + + + Scroll Column Left; Scroll the document left one column. + + + Scroll Column Right; Scroll the document right one column. + + + Scroll Line Bottom; Scroll the current line to the bottom of the view. + + + Scroll Line Center; Scroll the current line to the center of the view. + + + Scroll Line Top: Scroll the current line to the top of the view. + + + Select All; Select all of the document. + + + Tabify Selection: Replace spaces in the current selection with tabs. + + + Untabify Selection; Replace tabs in the current selection with spaces. + + + Make Lowercase; Change the text in the current selection to all lower case. + + + Make Uppercase; Change the text in the current selection to all upper case. + + + Toggle Case: Toggle the case of the text in the current selection. + + + Capitalize; Capitalize the first letter of words in the selection. + + + Swap Anchor; Swap the anchor and end points of the current selection. + + + Go To Line; Go to the indicated line. + + + Goto Brace; Move the caret forward to the matching brace. + + + Goto Brace Extend; Move the caret forward to the matching brace, extending the selection. + + + Go Back; Go back one character. + + + Select Mode; Toggle the selection mode. + + + Overtype Mode; Toggle between insert and overtype insertion modes. + + + Cut; Cut the current selection to the clipboard. + + + Copy; Copy the current selection to the clipboard. + + + Paste; Paste the selection. + + + Line Cut; Cut all selected lines, or the current line if no selection, to the clipboard. + + + Delete Line; Delete all selected lines, or the current line if no selection. + + + Delete Blank Lines; Delete all blank lines in the selection, or the current blank line if no selection. + + + Delete Horizontal White Space; Collapse white space in the selection, or delete white space adjacent to the caret if no selection. + + + Delete To EOL; Delete from the caret position to the end of the line. + + + Delete To BOL; Delete from the caret position to the beginning of the line. + + + Line Open Above; Open a new line above the current line. + + + Line Open Below: Open a new line below the current line. + + + Increase Line Indent; Increase Indent. + + + Decrease Line Indent; Line Unindent. + + + Undo; Undo the last operation. + + + Undo no move + + + Redo; Repeat the operation. + + + Redo without move + + + Clear Bookmarks; Clear all unnamed bookmarks in the current document. + + + Toggle Bookmark; Toggle an unnamed bookmark on the current line. + + + Next Bookmark; Move the caret to the next unnamed bookmark. + + + Previous Bookmark; Move the caret to the previous unnamed bookmark. + + + Find; Find the occurrence. + + + Replace; Replace the occurrence. + + + Replace All; Replace all instances of the occurrence. + + + Find Next; Find the next occurrence + + + Find Next Word; Find the next occurrence of word. + + + Find Prev; Find the previous occurrence + + + Find Prev Word; Find the previous occurrence of word. + + + Find Again; Repeat the find operation. + + + Char Transpose: Transpose the characters on either side of the caret. + + + Word Transpose; Transpose the words on either side of the caret. + + + Line Transpose; Transpose the current line and the line below. + + + Select Current Word; Select the word under the caret. + + + Word Delete To End; Delete the word to the right of the caret. + + + Word Delete To Start; Delete the word to the left of the caret. + + + Word Previous; Move the caret left one word. + + + Word Previous Extend; Move the caret left one word, extending the selection. + + + Word Next; Move the caret right one word. + + + Word Next Extend; Move the caret right one word, extending the selection. + + + Comment Block; Comment out the selected block. + + + Uncomment Block; Uncomment the selected block. If the block is not commented, make no change. + + + Set repeat count + + + Widget Margin Left Button Down; A left button down event in the widget margin. The widget margin is used to set breakpoints or bookmarks. + + + Displays a context menu. If unhandled this most editors display a default context menu without any language-specific commands. If you want your own commands on this menu, handle the command and bring up a context menu yourself. + + + Selection Cancel; Cancel the current selection moving the caret to the anchor point. + + + Parameter Info; Display Parameter Info based on the current language. + + + View White Space; Toggle the visibility of white space characters. + + + Paste Moves Caret; Toggle where the caret is positioned after a paste operation. + + + Complete Word; Display Word Completion based on the current language. + + + Show Member List; Display an object Member List based on the current language. + + + Line Start After Indentation Next; Move the caret to the first non-white-space character on the previous line. + + + Line Start After Indentation Next; Move the caret to the first non-white-space character on the next line. + + + Help Keyword + + + Format Selection; Format the currently selected text. + + + Open URL; Invoke the default browser and opens the URL under the caret. + + + Insert File As Text; Insert a file into the current document. + + + Toggle Task List Shortcut; Toggle a task list shortcut on the current line. + + + Quick Info; Display Quick Info based on the current language. + + + Char Left Extend Column; Move the caret left one character, extending the column selection. + + + Char Right Extend Column; Move the caret right one character, extending the column selection. + + + Line Up Extend Column; Move the caret up one line, extending the column selection. + + + Line Down Extend Column; Move the caret down one line, extending the column selection. + + + Toggle Word Wrap; Toggle Word Wrap mode. + + + Incremental Search; Reverse Incremental Search. + + + Reverse Incremental Search. + + + Line Start Extend Column; Move the caret to the start of the line, extending the column selection. + + + Line End Extend Column; Move the caret to the end of the line, extending the column selection. + + + Word Previous Extend Column; Move the caret left one word, extending the column selection. + + + Word Next Extend Column; Move the caret right one word, extending the column selection. + + + Hide Selection; Outline Hide Selection. + + + Toggle Outlining Expansion; Outline Toggle Current. + + + Toggle All Outlining; Toggle all hidden regions. + + + Stop Outlining; Outline Stop Hiding All. + + + Stop Hiding Current; Outline Stop Hiding Current. + + + Collapse to Definitions; Outline Collapse To Definitions. + + + Double Click. + + + Externally handled widget click; A mouse click event in the widget margin passed to an external handler. The widget margin is used to set breakpoints or bookmarks. + + + Comment Block; Comment out the selected block. + + + Uncomment Selection; Uncomment the selected lines. + + + Open File; Open file under caret. + + + Open URL; Invoke the default browser and opens the URL under the caret. + + + Handle IME message + + + + + + Completion hide advanced + + + Format document + + + Start Autohiding outline + + + Final + + + Editor command: Decrease filter + + + Editor command: Copy tip + + + Editor command: Paste tip + + + Editor command: Left click + + + Editor command: Go to next bookmark in document + + + Editor command: Go to previous bookmark in document + + + Editor command: Invoke snippet from shortcut + + + Auto complete + + + Editor command: Invoke snippet picker 2 + + + Editor command: Delete all bookmarks in document + + + Editor command: Convert tabs to spaces + + + Editor command: Convert spaces to tabs + + + Editor command: Final + + + STOP command created during CTC file rationalization + + + Reverse Cancel command created during CTC file rationalization + + + Solution Refresh command created during CTC file rationalization + + + Save Copy of Item As command created during CTC file rationalization + + + HTML editor command: New element + + + HTML editor command: New attribute + + + HTML editor command: New complex type + + + HTML editor command: New simple type + + + HTML editor command: New group + + + HTML editor command: New attribute group + + + HTML editor command: New key + + + HTML editor command: New relation + + + HTML editor command: Edit key + + + HTML editor command: Edit relation + + + HTML editor command: Make type global + + + HTML editor command: Preview dataset + + + HTML editor command: Generate data set + + + HTML editor command: Create schema + + + HTML editor command: Layout indent + + + HTML editor command: Layout unindent + + + HTML editor command: Remove handler + + + HTML editor command: Edit handler + + + HTML editor command: Add handler + + + HTML editor command: Style + + + Get style list + + + HTML editor command: Font style + + + HTML editor command: Get font style list + + + HTML editor command: Paste as HTML + + + HTML editor command: View borders + + + HTML editor command: View details + + + HTML editor command: Expand controls + + + HTML editor command: Collapse controls + + + HTML editor command: Show script only + + + HTML editor command: Insert table + + + HTML editor command: Insert column on the left + + + HTML editor command: Insert column on the right + + + HTML editor command: Insert row above + + + HTML editor command: Insert row below + + + HTML editor command: Delete table + + + HTML editor command: Delete columns + + + HTML editor command: Delete rows + + + HTML editor command: Select table + + + HTML editor command: Select table column + + + HTML editor command: Select table row + + + HTML editor command: Select table cell + + + HTML editor command: Merge cells + + + HTML editor command: Split cell + + + HTML editor command: Insert cell + + + HTML editor command: Delete cells + + + HTML editor command: Seamless frame + + + HTML editor command: View frame + + + HTML editor command: Delete frame + + + HTML editor command: Set frame source + + + HTML editor command: New left frame + + + HTML editor command: New right frame + + + HTML editor command: New top frame + + + HTML editor command: New bottom frame + + + HTML editor command: Show grid + + + HTML editor command: Snap to grid + + + HTML editor command: Bookmark + + + HTML editor command: Hyperlink + + + HTML editor command: Image + + + HTML editor command: Insert form + + + HTML editor command: Insert span + + + HTML editor command: Div + + + HTML editor command: HTML client script block + + + HTML editor command: HTML server script block + + + HTML editor command: Bulleted list + + + HTML editor command: Numbered list + + + HTML editor command: Edit script + + + HTML editor command: Edit code behind + + + HTML editor command: Document outline HTML + + + HTML editor command: Document outline script + + + HTML editor command: Run at server + + + HTML editor command: Web forms verbs + + + HTML editor command: Web forms templates + + + HTML editor command: End template + + + HTML editor command: Edit default event + + + HTML editor command: Superscript + + + HTML editor command: Subscript + + + HTML editor command: Edit style + + + HTML editor command: Add image height width + + + HTML editor command: Remove image height and width + + + HTML editor command: Lock element + + + View style organizer + + + Editor and HTML editor command: ECMD Auto-close override + + + HTML editor command: New any + + + HTML editor command: New any attribute + + + HTML editor command: Delete key + + + HTML editor command: Auto arrange + + + HTML editor command: Validate schema + + + HTML editor command: New facet + + + HTML editor command: Validate XML data + + + HTML editor command: Document outline toggle + + + HTML editor command: Validate HTML data + + + HTML editor command: View XML schema overview + + + HTML editor command: Show default view + + + HTML editor command: Expand children + + + HTML editor command: Collapse children + + + HTML editor command: Top down layout + + + HTML editor command: Left to right layout + + + HTML editor command: Insert cell on the right + + + HTML editor command: Edit master + + + HTML editor command: Insert snippet + + + HTML editor command: Format and validation + + + HTML editor command: Collapse tag + + + HTML editor command: Select tag + + + HTML editor command: Select tag content + + + HTML editor command: Check accessibility + + + HTML editor command: expand tag + + + HTML editor command: Generate page resource + + + HTML editor command: Show only non-visual controls + + + HTML editor command: Resize column + + + HTML editor command: Resize row + + + HTML editor command: Make absolute + + + HTML editor command: Make relative + + + HTML editor command: Make static + + + HTML editor command: Insert layer + + + HTML editor command: Update design view + + + HTML editor command: Update source view + + + HTML editor command: Insert caption + + + HTML editor command: Delete caption + + + HTML editor command: Make position not set + + + HTML editor command: Auto position options + + + HTML editor command: Edit image + + + Project command: Compile + + + Project command: Project settings + + + Project command: Link only + + + Project command: Remove + + + Project command: Project start debugging + + + Project command: Project step into + + + Editor command: Update managed resources + + + Project command: Update web reference + + + Project command: Add resource + + + Project command: Web deployment + + + Editor command: Project tool order + + + Editor command: Project tool files + + + Editor command: Object test bench / Profile guided optimization instrument + + + Editor command: Object test bench / Profile guided optimization optimize + + + Editor command: Object test bench / Profile guided optimization update + + + Editor command: Object test bench / Profile guided optimization run scenario + + + Visual Basic Project command: Add HTML page + + + Visual Basic Project command: Add HTML page control + + + Visual Basic Project command: Add module + + + Visual Basic Project command: Add module control + + + Visual Basic Project command: Add WFC form + + + Visual Basic Project command: Add web form + + + Editor command: Add master page + + + Visual Basic Project command: Add user control + + + Editor command: Add content page + + + Visual Basic Project command: Add DHTML page + + + Visual Basic Project command: Add image generator + + + Visual Basic Project command: Add inherited WCF form + + + Visual Basic Project command: Add inherited control + + + Visual Basic Project command: Add web user control + + + Visual Basic Project command: Build and browse + + + Visual Basic Project command: Add tab grid component + + + Visual Basic Project command: Add web service + + + Editor command: Add stylesheet + + + Editor command: Set browse location + + + Editor command: Refresh folder + + + Editor command: Set browse location control + + + Editor command: View markup + + + Editor command: Next method + + + Editor command: Previous method + + + Editor command: Rename symbol + + + Editor command: Show references + + + Editor command: Create snippet + + + Editor command: Create replacement + + + Editor command: Insert comment + + + Refactoring command: View component designer + + + Refactoring command: Go to type definition + + + Refactoring command: Show snippet highlighting + + + Refactoring command: Hide snippet highlighting + + + Visual FoxPro Project command: Add Visual FoxPro page + + + Visual FoxPro Project command: Set breakpoint + + + Help Workshop project command: Show all files + + + Help Workshop project command: Add to project + + + Help Workshop project command: Add blank node + + + Help Workshop project command: Add node from file + + + Help Workshop project command: Change URL from file + + + Help Workshop project command: Edit topic + + + Help Workshop project command: Edit title + + + Help Workshop project command: Move node up + + + Help Workshop project command: Move node down + + + Help Workshop project command: Move node left + + + Help Workshop project command: Move node right + + + Deploy project command: Add output + + + Deploy project command: Add file + + + Deploy project command: Merge module + + + Deploy project command: Add components + + + Deploy project command: Launch installer + + + Deploy project command: Launch uninstall + + + Deploy project command: Launch Anchor A + + + Deploy project command: File system editor + + + Deploy project command: Registry editor + + + Deploy project command: File types editor + + + Deploy project command: User's Interface editor + + + Deploy project command: Custom actions editor + + + Deploy project command: Launch conditions editor + + + Deploy project command: Editor + + + Deploy project command: Exclude + + + Deploy project command: Refresh dependencies + + + Deploy project command: View outputs + + + Deploy project command: View dependencies + + + Deploy project command: View filter + + + Deploy project command: Key + + + Deploy project command: String + + + Deploy project command: Binary + + + Deploy project command: DWORD + + + Deploy project command: Key solo + + + Deploy project command: Import + + + Deploy project command: Folder + + + Deploy project command: Project output + + + Deploy project command: File + + + Deploy project command: Add merge modules + + + Deploy project command: Create shortcut + + + Deploy project command: Large icons + + + Deploy project command: Small icons + + + Deploy project command: List + + + Deploy project command: Details + + + Add file type + + + Deploy project command: Add action + + + Deploy project command: Set as default + + + Deploy project command: + + + Deploy project command: Move down + + + Add dialog + + + Deploy project command: Import dialog + + + Deploy project command: Add file search + + + Deploy project command: Add registry search + + + Deploy project command: Add components search + + + Deploy project command: Add launch condition + + + Deploy project command: Add custom action + + + Deploy project command: Outputs + + + Deploy project command: Dependencies + + + Deploy project command: Filter + + + Deploy project command: Components + + + Deploy project command: Environment string + + + Deploy project command: Create empty shortcut + + + Deploy project command: Add file condition + + + Deploy project command: Add registry condition + + + Deploy project command: Add component condition + + + Deploy project command: Add URT condition + + + Deploy project command: Add IIS condition + + + Deploy project command: Base special folder + + + Deploy project command: User's Application Data folder + + + Deploy project command: Common files64 folder + + + Deploy project command: Common files folder + + + Deploy project command: Custom folder + + + Deploy project command: User's Desktop + + + Deploy project command: User's Favorites folder + + + Deploy project command: Fonts folder + + + Deploy project command: Global assembly cache folder + + + Deploy project command: Re-targetable module folder + + + Deploy project command: User's Personal Data folder + + + Deploy project command: Program Files64 folder + + + Deploy project command: Program Files folder + + + Deploy project command: User's Programs menu + + + Deploy project command: User's send to menu + + + Deploy project command: Shared Components folder + + + Deploy project command: User's start menu + + + Deploy project command: User's startup folder + + + Deploy project command: System64 folder + + + Deploy project command: System folder + + + Deploy project command: Application folder + + + Deploy project command: User template folder + + + Deploy project command: Custom web folder + + + Deploy project command: Windows folder + + + Deploy project command: Last special folder + + + Analyzer project command: Export events + + + Analyzer project command: Import events + + + Analyzer project command: View event + + + Analyzer project command: View event list + + + Analyzer project command: View chart + + + Analyzer project command: View machine diagram + + + Analyzer project command: View process diagram + + + Analyzer project command: View source diagram + + + Analyzer project command: View structure diagram + + + Analyzer project command: View timeline + + + Analyzer project command: View summary + + + Analyzer project command: Apply filter + + + Analyzer project command: Clear filter + + + Analyzer project command: Start recording + + + Analyzer project command: Stop recording + + + Analyzer project command: Pause recording + + + Analyzer project command: Activate filter + + + Analyzer project command: Show first event + + + Analyzer project command: Show previous event + + + Analyzer project command: Show next event + + + Analyzer project command: Show last event + + + Analyzer project command: Replay events + + + Analyzer project command: Stop replay + + + Analyzer project command: Increase playback speed + + + Analyzer project command: Decrease playback speed + + + Analyzer project command: Add machine + + + Analyzer project command: Add or remove columns + + + Analyzer project command: Sort columns + + + Analyzer project command: Save column settings + + + Analyzer project command: Reset column settings + + + Analyzer project command: Size columns to fit + + + Analyzer project command: Auto select + + + Autofilter + + + Analyzer project command: Autoplay track + + + Analyzer project command: Go to event + + + Analyzer project command: Zoom to fit + + + Analyzer project command: Add graph + + + Analyzer project command: Remove graph + + + Analyzer project command: Connect machine + + + Analyzer project command: Disconnect machine + + + Analyzer project command: Expand selection + + + Analyzer project command: Collapse section + + + Add filter + + + Analyzer project command: Add predefined item 0 + + + Analyzer project command: Add predefined item 1 + + + Analyzer project command: Add predefined item 2 + + + Analyzer project command: Add predefined item 3 + + + Analyzer project command: Add predefined item 4 + + + Analyzer project command: Add predefined item 5 + + + Analyzer project command: Add predefined item 6 + + + Analyzer project command: Add predefined item 7 + + + Analyzer project command: Add predefined item 8 + + + Analyzer project command: Timeline size to fit + + + Crystal Reports command: Field view + + + Crystal Reports command: Select expert + + + Crystal Reports command: Top N Expert + + + Crystal Reports command: Sort order + + + Crystal Reports command: Property page + + + Crystal Reports command: Help + + + Crystal Reports command: Save report + + + Crystal Reports command: Insert summary + + + Crystal Reports command: Insert group + + + Crystal Reports command: Insert subreport + + + Crystal Reports command: Insert chart + + + Crystal Reports command: Insert picture + + + Common project command: Set as Start page + + + Common project command: Recalculate links + + + Common project command: Web permissions + + + Common project command: Compare to master + + + Common project command: Work offline + + + Common project command: Synchronize folder + + + Common project command: Synchronize all folders + + + Common project command: Copy project + + + Common project command: Import file from web + + + Common project command: Include in project + + + Common project command: Exclude from project + + + Common project command: Broken links report + + + Common project command: Add project outputs + + + Common project command: Add reference + + + Common project command: Add web reference + + + Common project command: Add web reference control + + + Common project command: Update web reference + + + Common project command: Run custom tool + + + Common project command: Set runtime version + + + Common project command: View reference in object browser + + + Common project command: Publish + + + Common project command: Publish control + + + Common project command: Start options + + + Common project command: Add reference control + + + Common project command: Start options control + + + Common project command: Detach local data file control + + + Common project command: Add service reference + + + Common project command: Add service reference control + + + Common project command: Update service reference + + + Common project command: Configure service reference + + + Right mouse button drag move + + + Right mouse button drag copy + + + Right mouse button drag cancel + + + Resource Editor command: Test dialog + + + Resource Editor command: Space across + + + Resource Editor command: Space down + + + Resource Editor command: Toggle grid + + + Resource Editor command: Toggle guides + + + Resource Editor command: Size to text + + + Resource Editor command: Center vertically + + + Resource Editor command: Center horizontally + + + Resource Editor command: Flip dialog + + + Resource Editor command: Set tab border + + + Resource Editor command: Right button + + + Resource Editor command: Bottom button + + + Resource Editor command: Enable auto layout grow + + + Resource Editor command: Disable auto layout resize + + + Resource Editor command: Enable auto layout optimization + + + Resource Editor command: GUID settings + + + Resource Editor command: Resource includes + + + Resource Editor command: Resource symbols + + + Resource Editor command: Open as binary file + + + Resource Editor command: Resource open + + + Resource Editor command: Resource new + + + Resource Editor command: Resource copy + + + Resource Editor command: Insert + + + Export + + + Resource Editor command: Move control left + + + Resource Editor command: Move control down + + + Resource Editor command: Move control right + + + Resource Editor command: Move control up + + + Resource Editor command: Resize control down + + + Resource Editor command: Resize control up + + + Resource Editor command: Resize control left + + + Resource Editor command: Resize control right + + + Resource Editor command: New accelerator + + + Resource Editor command: Capture keystroke + + + Resource Editor command: Insert ActiveX control + + + Resource Editor command: Invert colors + + + Resource Editor command: Flip horizontal + + + Resource Editor command: Flip vertical + + + Resource Editor command: Rotate 90 degrees + + + Resource Editor command: Show color window + + + Resource Editor command: New string + + + Resource Editor command: New info block + + + Resource Editor command: Delete info block + + + Resource Editor command: Adjust colors + + + Resource Editor command: Load palette + + + Resource Editor command: Save palette + + + Resource Editor command: Check Mnemonics + + + Resource Editor command: Draw opaque + + + Resource Editor command: Toolbar editor + + + Resource Editor command: Grid settings + + + Resource Editor command: New device image + + + Resource Editor command: Open device image + + + Resource Editor command: Delete device image + + + Resource Editor command: View as pop-up + + + Resource Editor command: Check menu mnemonics + + + Resource Editor command: Show image grid + + + Resource Editor command: Show tile grid + + + Resource Editor command: Magnify + + + Resource Editor command: Resource properties + + + Resource Editor command: Import icon image + + + Resource Editor command: Export icon image + + + Resource Editor command: Open external editor + + + Resource Editor command: Pick rectangle + + + Resource Editor command: Pick region + + + Resource Editor command: Pick color + + + Resource Editor command: Eraser tool + + + Resource Editor command: Fill tool + + + Resource Editor command: Pencil tool + + + Resource Editor command: Brush tool + + + Resource Editor command: Airbrush tool + + + Resource Editor command: Line tool + + + Resource Editor command: Curve tool + + + Resource Editor command: Text tool + + + Resource Editor command: Rectangle tool + + + Resource Editor command: Rectangle outline tool + + + Resource Editor command: Filled rectangle tool + + + Resource Editor command: Round rectangle tool + + + Resource Editor command: Rounded rectangle outline tool + + + Resource Editor command: Filled round rectangle tool + + + Resource editor command: Ellipse tool + + + Resource Editor command: Ellipse outline tool + + + Resource Editor command: Filled ellipse tool + + + Resource Editor command: Set hotspot + + + Resource Editor command: Zoom tool + + + Resource Editor command: Zoom factor 1 + + + Resource Editor command: Zoom factor 2 + + + Resource Editor command: Zoom factor 6 + + + Resource Editor command: Zoom factor 8 + + + Resource Editor command: Transparent background + + + Resource Editor command: Opaque background + + + Resource Editor command: Small eraser + + + Resource Editor command: Medium eraser + + + Resource Editor command: Large eraser + + + Resource Editor command: Larger eraser + + + Resource Editor command: Large circle + + + Resource Editor command: Medium circle + + + Resource Editor command: Small circle + + + Resource Editor command: Square large + + + Resource Editor command: Square medium + + + Resource Editor command: Square small + + + Resource Editor command: Left diagonal large + + + Resource Editor command: Left diagonal medium + + + Resource Editor command: Left diagonal small + + + Resource Editor command: Right diagonal large + + + Resource Editor command: Right diagonal medium + + + Resource Editor command: Right diagonal small + + + Resource Editor command: Splash small + + + Resource Editor command: Splash medium + + + Resource Editor command: Splash large + + + Resource Editor command: Line smaller + + + Resource Editor command: Line small + + + Resource Editor command: Line medium + + + Resource Editor command: Line large + + + Resource Editor command: Line larger + + + Resource Editor command: Larger brush + + + Resource Editor command: Large brush + + + Resource Editor command: Standard brush + + + Resource Editor command: Small brush + + + Resource Editor command: Smaller brush + + + Resource Editor command: Zoom in + + + Resource Editor command: Zoom out + + + Resource Editor command: Previous color + + + Resource Editor command: Previous extended palette color + + + Resource Editor command: Next color + + + Resource Editor command: Next extended palette color + + + Resource Editor command: Image options + + + Start Web site administrator tool + + + Nest related files + + + WinForm command: Cancel drag + + + WinForm command: Default action + + + Resource Editor command: Move control up to grid + + + Resource Editor command: Move control down to grid + + + Resource Editor command: Move control left to grit + + + Resource Editor command: Move control right to grid + + + Resource Editor command: Resize control right to grid + + + Resource Editor command: Resize control up to grid + + + Resource Editor command: Resize control left to grid + + + Resource Editor command: Resize control down to grid + + + WinForms command: Next control + + + WinForms command: Previous control + + + WinForms command: Rename + + + WinForms command: Extract method + + + WinForms command: Encapsulate field + + + WinForms command: Extract interface + + + WinForms command: Promote local + + + WinForms command: Remove parameters + + + WinForms command: Re-order parameters + + + WinForms command: Generate method stub + + + WinForms command: Implement implicit interface + + + WinForms command: Implement explicit interface + + + WinForms command: Implement abstract class + + + WinForms command: Surround with + + + Quick object search + + + Toggle word wrap OW + + + Go to next location OW + + + Go to previous location OW + + + Build only project + + + Rebuild only project + + + Clean only project + + + Set build startups only on run + + + Unhide all + + + Hide folder + + + Unhide folders + + + Copy full path name + + + Save folder as solution + + + Manage user settings + + + New solution folder + + + Clear Pane OW + + + Go to Error Tag OW + + + Go to next Error Tag OW + + + Go to previous Error Tag OW + + + Clear Pane FR1 + + + Go to Error Tag FR1 + + + Go to next Error Tag FR1 + + + Go to previous Error Tag FR1 + + + Clear Pane FR2 + + + Go to Error Tag FR2 + + + Go to next Error Tag FR2 + + + Go to previous Error Tag FR2 + + + Output pane combo + + + Output pane combo list + + + Disable docking changes + + + Toggle float + + + Reset layout + + + New solution folder bar + + + Data shortcut + + + New tool window + + + Previous tool window + + + Browse to file in Explorer + + + Show simple MDI file menu + + + Previous tool window navigator + + + Static analysis only project + + + Editor command: Run Analyzer on selection + + + + + + Class View command: Show inherited members + + + Class View command: Show base types + + + Class View command: Show derived types + + + Class View command: Show hidden + + + Class View command: Back + + + Class View command: Forward + + + Class View command: Search combo + + + Class View command: Search + + + Class View command: Sort objects alphabetically + + + Class View command: Sort objects by type + + + Class View command: Sort objects by access + + + Class View command: Group objects type + + + Class View command: Sort members alphabetically + + + Class View command: Sort members by type + + + Class View command: Sort members by access + + + Class View command: Type browser settings + + + Class View command: View members as implementer + + + Class View command: View members as subclass + + + Class View command: View members as user + + + Class View command: Reserved1 + + + Class View command: Reserved2 + + + Class View command: Show project references + + + Class View command: Group members by type + + + Class View command: Clear search + + + Class View command: Filter to type + + + Class View command: Sort by best match + + + Class View command: Search MRU list + + + Class View command: View other members + + + Class View command: Search command + + + Class View command: Go to search command + + + Control gallery + + + Object Browser command: Show inherited members + + + Object Browser command: Show base types + + + Object Browser command: Show derived types + + + Object Browser command: Show hidden + + + Object Browser command: Back + + + Object Browser command: Forward + + + Object Browser command: Search combo + + + Object Browser command: Search + + + Object Browser command: Sort objects alphabetically + + + Object Browser command: Sort objects by type + + + Object Browser command: Sort objects by access + + + Object Browser command: Group objects type + + + Object Browser command: Sort members alphabetically + + + Object Browser command: Sort members by type + + + Object Browser command: Sort members by access + + + Object Browser command: Type browser settings + + + Object Browser command: View members as implementer + + + Object Browser command: View members as subclass + + + Object Browser command: View members as user + + + Object Browser command: Namespaces View + + + Object Browser command: Containers View + + + Object Browser command: Reserved1 + + + Object Browser command: Group members by type + + + Object Browser command: Clear search + + + Object Browser command: Filter to type + + + Object Browser command: Sort by best match + + + Object Browser command: Search MRU list + + + Object Browser command: View other members + + + Object Browser command: Search command + + + Object Browser command: Go to search command + + + Object Browser command: Show extension members + + + Full Screen 2 + + + Find symbol results command: Sort objects alphabetically + + + Find symbol results command: Sort by best match + + + Navigate Back + + + Navigate Forward + + + Editor command: Correction 1 + + + Editor command: Correction 2 + + + Editor command: Correction 3 + + + Editor command: Correction 4 + + + Editor command: Correction 5 + + + Editor command: Correction 6 + + + Editor command: Correction 7 + + + Editor command: Correction 8 + + + Editor command: Correction 9 + + + Editor command: Correction 10 + + + OB add Reference + + + Find References + + + Default code view + + + Default code view Go To Next + + + Default code view Go To Next + + + Default code view editor definition + + + Choose encoding for default code view + + + View in class diagram + + + Editor command: Add database table + + + Editor command: Add data table + + + Editor command: Add function + + + Editor command: Add relation + + + Editor command: Add key + + + Editor command: Add column + + + Editor command: Convert database table + + + Editor command: Convert data table + + + Editor command: Generate database + + + Editor command: Configure connections + + + Editor command: Import XML schema + + + Editor command: Sync with database + + + Editor command: Configure + + + Editor command: Create dataform + + + Editor command: Create enumeration + + + Editor command: Insert function + + + Editor command: Edit function + + + Editor command: Set primary key + + + Editor command: Insert column + + + Editor command: Auto size + + + Editor command: Show relation labels + + + Generate debugger dataset + + + Debugger preview + + + Configure debugger adapter + + + Debugger view dataset schema + + + Debugger dataset properties + + + Debugger parameterize form + + + Add debugger child form + + + Editor command: Edit constraint + + + Editor command: Delete constraint + + + Editor command: Edit data relation + + + Close project + + + Reload command bars + + + Solution platform + + + Get Solution platform list + + + Editor command: Data accessor + + + Editor command: Add data accessor + + + Editor command: Query + + + Editor command: Add query + + + Editor command: Publish selection + + + Editor command: Publish solution control + + + Call browser show calls to + + + Call browser show calls from + + + Call browser show new calls to + + + Call browser show new calls from + + + Call browser 1 show calls to + + + Call browser 2 show full names + + + Call browser 3 show full names + + + Call browser 4 show full names + + + Call browser 5 show full names + + + Call browser 6 show full names + + + Call browser 7 show full names + + + Call browser 8 show full names + + + Call browser 9 show full names + + + Call browser 10 show calls to + + + Call browser 11 show calls to + + + Call browser 12 show calls to + + + Call browser 13 show calls to + + + Call browser 14 show calls to + + + Call browser 15 show calls to + + + Call browser 16 show calls from + + + Call browser 1 show calls from + + + Call browser 2 show calls to + + + Call browser 3 show calls to + + + Call browser 4 show calls to + + + Call browser 5 show calls to + + + Call browser 6 show calls to + + + Call browser 7 show calls to + + + Call browser 8 show calls to + + + Call browser 9 show calls to + + + Call browser 10 show calls from + + + Call browser 11 show calls from + + + Call browser 12 show calls from + + + Call browser 13 show calls from + + + Call browser 14 show calls from + + + Call browser 15 show calls from + + + Call browser 16 settings + + + Call browser 1 show full names + + + Call browser 2 sort by access + + + Call browser 3 sort by access + + + Call browser 4 sort by access + + + Call browser 5 sort by access + + + Call browser 6 sort by access + + + Call browser 7 sort by access + + + Call browser 8 sort by access + + + Call browser 9 sort by access + + + Call browser 10 show full names + + + Call browser 11 show full names + + + Call browser 12 show full names + + + Call browser 13 show full names + + + Call browser 14 show full names + + + Call browser 15 show full names + + + Call browser 16 show calls to + + + Call browser 1 settings + + + Call browser 2 show calls from + + + Call browser 3 show calls from + + + Call browser 4 show calls from + + + Call browser 5 show calls from + + + Call browser 6 show calls from + + + Call browser 7 show calls from + + + Call browser 8 show calls from + + + Call browser 9 show calls from + + + Call browser 10 settings + + + Call browser 11 settings + + + Call browser 12 settings + + + Call browser 13 settings + + + Call browser 14 settings + + + Call browser 15 settings + + + Call browser 16 search combo list + + + Call browser 1 refresh + + + Call browser 2 search + + + Call browser 3 search + + + Call browser 4 search + + + Call browser 5 search + + + Call browser 6 search + + + Call browser 7 search + + + Call browser 8 search + + + Call browser 9 search + + + Call browser 10 sort alphabetically + + + Call browser 11 sort alphabetically + + + Call browser 12 sort alphabetically + + + Call browser 13 sort alphabetically + + + Call browser 14 sort alphabetically + + + Call browser 15 sort alphabetically + + + Call browser 16 sort by access + + + Call browser 1 sort by access + + + Call browser 2 refresh + + + Call browser 3 refresh + + + Call browser 4 refresh + + + Call browser 5 refresh + + + Call browser 6 refresh + + + Call browser 7 refresh + + + Call browser 8 refresh + + + Call browser 9 refresh + + + Call browser 10 sort by access + + + Call browser 11 sort by access + + + Call browser 12 sort by access + + + Call browser 13 sort by access + + + Call browser 14 sort by access + + + Call browser 15 sort by access + + + Call browser 16 show full names + + + Show call browser + + + Call browser 1 + + + Call browser 2 refresh + + + Call browser 3 refresh + + + Call browser 4 refresh + + + Call browser 5 refresh + + + Call browser 6 refresh + + + Call browser 7 refresh + + + Call browser 8 refresh + + + Call browser 9 refresh + + + Call browser 10 + + + Call browser 11 + + + Call browser 12 + + + Call browser 13 + + + Call browser 14 + + + Call browser 15 + + + Call browser 15 + + + Call browser 17 + + + Global Undo + + + Global Re-do + + + Call browser show calls to command + + + Call browser show calls from command + + + Call browser show new calls to command + + + Call browser show new calls from command + + + Call browser 1 search + + + Call browser 2 search combo + + + Call browser 3 search combo + + + Call browser 4 search combo + + + Call browser 5 search combo + + + Call browser 6 search combo + + + Call browser 7 search combo + + + Call browser 8 search combo + + + Call browser 9 search combo + + + Call browser 10 search + + + Call browser 11 search + + + Call browser 12 search + + + Call browser 13 search + + + Call browser 14 search + + + Call browser 15 search + + + Call browser 16 refresh + + + Call browser 1 refresh + + + Call browser 2 search + + + Call browser 3 search + + + Call browser 4 search + + + Call browser 5 search + + + Call browser 6 search + + + Call browser 7 search + + + Call browser 8 search + + + Call browser 9 search + + + Call browser 10 refresh + + + Call browser 11 refresh + + + Call browser 12 refresh + + + Call browser 13 refresh + + + Call browser 14 refresh + + + Call browser 15 refresh + + + Call browser 16 + + + Call browser 1 search combo + + + Call browser 2 search combo list + + + Call browser 3 search combo list + + + Call browser 4 search combo list + + + Call browser 5 search combo list + + + Call browser 6 settings + + + Call browser 7 search combo list + + + Call browser 8 search combo list + + + Call browser 9 search combo list + + + Call browser 10 search combo + + + Call browser 11 search combo + + + Call browser 12 search combo + + + Call browser 13 search combo + + + Call browser 14 search combo + + + Call browser 15 search combo + + + Call browser 16 search + + + Task list provider combo + + + Task list provider combo list + + + Create user task + + + Error list show errors + + + Error list show warnings + + + Error list show messages + + + Registration + + + Call browser 1 search combo list + + + Call browser 2 settings + + + Call browser 3 settings + + + Call browser 4 settings + + + Call browser 5 settings + + + Call browser 6 search combo list + + + Call browser 7 settings + + + Call browser 8 settings + + + Call browser 9 settings + + + Call browser 10 search combo list + + + Call browser 11 search combo list + + + Call browser 12 search combo list + + + Call browser 13 search combo list + + + Call browser 14 search combo list + + + Call browser 15 search combo list + + + Call browser 16 search combo + + + Snippet property + + + Snippet reference + + + Snippet replace + + + Start page + + + Editor line first column + + + Editor line first column extended + + + SE Server Explorer + + + SE Data explorer + + + Toggle consume first completion mode + + + Editor command: Validation target + + + Editor command: Get validation target list + + + Editor command: CSS target + + + Editor command: Get CSS target list + + + Design + + + Design on + + + SE design + + + New diagram + + + New table + + + New database item + + + New trigger + + + Debug + + + New package procedure + + + New query + + + Refresh local + + + Add database data connection + + + Database ref + + + Run command + + + Run on + + + New database reference + + + Set as definition + + + Create command file + + + Cancel + + + New database + + + New user + + + New role + + + Change login + + + New view + + + Modify connection + + + Disconnect + + + Copy script + + + Add source control + + + Remove source control + + + Get latest + + + Check out + + + Check in + + + Undo checkout + + + Add source control item + + + New package specification + + + New package body + + + Insert SQL + + + Run selection + + + Update script + + + New script + + + New function + + + New table function + + + New inline function + + + Add diagram + + + Add table + + + Add synonym + + + Add view + + + Add procedure + + + Add function + + + Add table function + + + Add inline function + + + Add package specification + + + Add package body + + + Add Trigger + + + Export data + + + Database version control add + + + Database version control remove + + + Database version control checkout + + + Database version control undo checkout + + + Database version control checkin + + + SE retrieve data + + + SE edit text object + + + Design SQL block + + + Register SQL instance + + + Unregister SQL instance + + + Command window save script + + + Command window run script + + + Command window cursor up + + + Command window cursor down + + + Command window cursor left + + + Command window cursor right + + + Command window history up + + + Command window history down + + + These constants make some basic menu commands available to managed code. + + + Align Bottom + + + Align Horizontal Centers + + + Align Left + + + Align Right + + + Align to Grid + + + Align Top + + + Align Vertical Centers + + + Arrange Bottom + + + Arrange Right + + + Bring forward + + + Bring to front + + + Center horizontally + + + Center vertically + + + Code + + + Command id : "Copy". + + + Command id: "Cut". + + + Command id: "Delete". + + + Font Name + + + Get Font Name List + + + Font Size + + + Get Font Size List + + + Group + + + Concatenate Horizontal Space + + + Decrease Horizontal Space + + + Increase Horizontal Space + + + Make Horizontal Space Equal + + + Lock Controls + + + Insert Object + + + Command id:"Paste". + + + Command id:"Print". + + + Properties + + + Command id:"Redo". + + + Multi Level Redo + + + Command id:"Select All". + + + Send Backward + + + Send to Back + + + Show Table + + + Size to Control + + + Size to Control Height + + + Size to Control Width + + + Size to Fit + + + Size to Grid + + + Snap to Grid + + + Tab Order + + + Toolbox + + + Command id:"Undo". + + + Multi Level Undo + + + Ungroup + + + Concatenate Vertical Space + + + Decrease Vertical Space + + + Increase Vertical Space + + + Make Vertical Space Equal + + + Zoom by Percent + + + Back Color + + + Bold + + + Border Color + + + Border: dash dot + + + Border: dash dot dot + + + Border: dashes + + + Border: dots + + + Border: short dashes + + + Border: solid + + + Border: sparse dots + + + Border width 1 + + + Border width 2 + + + Border width 3 + + + Border width 4 + + + Border width 5 + + + Border width 6 + + + Border width Hairline + + + Flat + + + Foreground Coler + + + Italic + + + Center Justify + + + Justify General + + + Left Justify + + + Justify Right + + + Raised + + + Sunken + + + Underline + + + Chiseled + + + Etched + + + Shadowed + + + Compile debug 1 + + + Compile debug 2 + + + Compile debug 3 + + + Compile debug 4 + + + Compile debug 5 + + + Compile debug 6 + + + Compile debug 7 + + + Compile debug 8 + + + Compile debug 9 + + + Compile debug 10 + + + Compile debug 11 + + + Compile debug 12 + + + Compile debug 13 + + + Compile debug 14 + + + Compile debug 15 + + + Edit Existing Schema + + + Command id:"Find". + + + Get Zoom + + + Open Query Designer + + + Open New Query + + + Single Table Design + + + Single New Table + + + Show Grid + + + New Table + + + Collapsed view + + + View Field + + + Verify SQL + + + Hide Table + + + Primary Key + + + Command id:"Save". + + + Command id:"Save As". + + + Sort in Ascending Order + + + Sort in Descending Order + + + Append Query + + + Crosstab query + + + Delete Query + + + Make Table Query + + + Select by Query + + + Update Query + + + Parameters + + + Totals + + + View Collapsed + + + View Field List + + + View Keys + + + View Grid + + + Inner Join + + + Right Outer Join + + + Left Outer Join + + + Full Outer Join + + + Union Join + + + Show SQL Pane + + + Show Graphical Pane + + + Show Data Pane + + + Show QBE Pane + + + Select All Fields + + + Object Browser command id: Object Menu Button + + + Object Verb List 0 + + + Object Verb List 1 + + + Object Verb List 2 + + + Object Verb List 3 + + + Object Verb List 4 + + + Object Verb List 5 + + + Object Verb List 6 + + + Object Verb List 7 + + + Object Verb List 8 + + + Object Verb List 9 + + + Convert object + + + Custom control + + + Customize item + + + Rename + + + Import + + + New Page + + + Move + + + Cancel + + + Font + + + Expand Links + + + Expand Images + + + Expand Pages + + + Refocus Diagram + + + Transitive Closure + + + Center diagram + + + Zoom In + + + Zoom Out + + + Remove Filter + + + Hide Pane + + + Delete Table + + + Delete Relationship + + + Remove + + + Left Join All + + + Right Join All + + + Add selected fields to query output. + + + Change query type to "other". + + + Generate a change script. + + + Save Selection + + + Autojoin current tables. + + + Autojoin Always + + + Launch editor for URL. + + + Launch new webscope for URL. + + + Stop webscope rendering. + + + Pause + + + Resume webscope rendering. + + + Filter webscope diagram. + + + Show all objects in webscope diagram. + + + Show Application objects in webscope diagram. + + + Show other objects in webscope diagram. + + + Show primary relationships. + + + Expand links. + + + Collapse links. + + + Refresh webscope diagram. + + + Layout webscope diagram. + + + Show resource objects in webscope diagram. + + + Insert HTML using a Wizard. + + + Show download objects in webscope diagram. + + + Show external objects in webscope diagram. + + + Show inbound links in webscope diagram. + + + Show outbound links in webscope diagram. + + + Show inbound and outbound links in webscope diagram. + + + Preview page. + + + Open. + + + Open with. + + + Show HTML pages. + + + Run a query. + + + Clear a query's associated cursor. + + + Go to first record in set. + + + Go to last record in set. + + + Go to the next record in set. + + + Go to previous record in set. + + + Go to record via dialog. + + + Add a record to set. + + + Insert menu using menu designer. + + + Insert separator using menu designer. + + + Edit menu names with menu designer. + + + Debug explorer + + + Debug processes + + + View Threads Window + + + Window UI List + + + Command id:"New Project" on File menu. + + + Command id:"Open Project" on File menu. + + + Command id:"Open Project From Web" on File menu + + + Command id:"Open Solution" on File menu. + + + Command id for: "Close Solution". + + + Command id:"File New" on File menu. + + + Command id:"New Project From Existing" on File menu. + + + Command id:"File Open" on File menu. + + + Command id:"File Open From Web" on File menu. + + + Command id:"File Close" on File menu. + + + Command id:"Save Solution" on File menu. + + + Command id:"Save Solution As" on File menu. + + + Command id:"Save Project Item As" on File menu. + + + Command id:"Page Setup" on File menu. + + + Command id:"Print Preview" on File menu. + + + Command id:"Exit" on File menu. + + + Command id:"Replace" on Edit menu. + + + Command id:"Go To" on Edit menu. + + + Command id:"Property Pages" on View menu. + + + Command id:"Full Screen" on View menu. + + + Command id:"Project Explorer" on View menu. + + + Properties Window + + + Command id:"Task List Window" on View menu. + + + Command id:"Output Window" on View menu. + + + Command id:"Object Browser" on View menu. + + + Command id:"Document Outline Window" on View menu. + + + Command id:"Immediate Window" on View menu. + + + Command id:"Watch Window" on View menu. + + + Command id:"Locals Window" on View menu. + + + Command id:"Call Stack" on View menu. + + + Command id:"Autos Window" on View menu. + + + Command id:"This Window" on View menu. + + + Command id:"Add New Item" on Project menu. + + + Command id:"Add Existing Item" on Project menu. + + + Command id:"New Folder" on Project menu. + + + Command id:"Set as StartUp Project" on Project menu. + + + Command id:"Project Settings" on Project menu. + + + Command id:"Project References" on Project menu. + + + Command id:"Step Into" on Debug menu. + + + Command id:"Step Over" on Debug menu. + + + Command id:"Step Out" on Debug menu. + + + Command id:"Run To Cursor" on Debug menu. + + + Command id:"Add Watch" on Debug menu. + + + Command id:"Edit Watch" on Debug menu. + + + Command id:"Quick Watch" on Debug menu. + + + Command id:"Toggle Breakpoint" on Debug menu. + + + Command id for: "Clear Breakpoints" on Debug menu. + + + Command id:"Show Breakpoints" on Debug menu. + + + Command id:"Set Next Statement" on Debug menu. + + + Command id:"Show Next Statement" on Debug menu. + + + Command id:"Edit Breakpoint" on Debug menu. + + + Command id: "Detach Debugger" on Debug menu. + + + Command id: "Customize Keyboard" on Tools menu. + + + Command id:"Tools Options" on the Tools menu. + + + Command id:"New Window" on Window menu. + + + Command id:"Split" on Window menu. + + + Command id:"Cascade" on Window menu. + + + Command id:"Tile Horizontal" on Window menu. + + + Command id:"Tile Vertical" on Window menu. + + + Command id:"Technical Support" on Help menu. + + + Open the About dialog box. + + + Debug options + + + Command id: "Delete Watch" on Watch context menu. + + + Command id:"Collapse Watch" on Watch context menu. + + + Command id:"Property Browser Toggle Status" on Property Browser context menu. + + + Command id:"Hide Property Browser" on Property Browser context menu. + + + Command id: "Docking View" on Docking context menu. + + + Command id:"Hide Active Pane" on Docking context menu. + + + Command id:"Next Pane" for window selection via keyboard. + + + Command id:"Previous Pane" for window selection via keyboard. + + + Command id:"Next Tab" for window selection via keyboard. + + + Command id:"Previous Pane" for window selection via keyboard. + + + Command id:"Close Tool Window Pane" for window selection via keyboard. + + + Command id:"Activate Document Window Pane" for window selection via keyboard. + + + Command id: "MDI Docking View" for window selection via keyboard. + + + Command id: "Dock Floating Window" for window selection via keyboard. + + + Command id:"Autohide Window" for window selection via keyboard. + + + Command id:"Move to Dropdown Bar" for window selection via keyboard. + + + Find commond + + + Start + + + Restart + + + Addin Manager + + + Multi Level Undo List + + + Multi Level Redo List + + + Add Toolbox Tab + + + Delete Toolbox Tab + + + Rename Toolbox Tab + + + Toolbox Tab Move Up + + + Toolbox Tab Move Down + + + Rename Toolbox Item + + + Toolbox List View + + + Get Window UI List + + + Insert Values Query + + + Show Properties + + + Suspend Thread + + + Resume Thread + + + Set Focus on Thread + + + Display Radix + + + Open Project Item + + + Clear pane + + + Go to Error Tag + + + Sort Task List by Category + + + Sort Task List by File Line + + + Sort Task List by Priority + + + Sort Task List by Default Sort Order + + + Show Task List Tooltip + + + Filter Task List by Nothing + + + Cancel drag + + + Filter Task List by Compiler Category + + + Filter Task List by Comment Category + + + Add Toolbox Item + + + Reset Toolbox + + + Save Project Item + + + Command id:"Save Options". + + + View Form + + + View Code + + + Preview in Browser + + + Browse with + + + Search Set Combo + + + Search Combo + + + Edit Label + + + Exceptions + + + Define views + + + Toggle Selection Mode + + + Toggle Insert Mode + + + Load Unloaded Project + + + Unload Loaded Project + + + Elastic Column + + + Hide Column + + + Previous Task List View + + + Zoom Dialog + + + Command id:"Find Hidden Text" in Find/Replace options. + + + Command id:"Find Matching Case" in Find/Replace options. + + + Command id:"Find Whole Word" in Find/Replace options. + + + Command id:"Find Simple Pattern" in Find/Replace options. + + + Command id:"Find Regular Expression" in Find/Replace options. + + + Command id:"Find Backwards" in Find/Replace options. + + + Command id:"Find in Selection" in Find/Replace options. + + + Command id:"Stop Find" in Find/Replace options. + + + Command id:"Find in Files" in Find/Replace options. + + + Replace in Files + + + Command id:"Next Location" in Task List, Find in Files results, and so on. + + + Command id:"Previous Location" in Task List, Find in Files results, and so on. + + + Go to Quick Watch + + + Filter Task List by Next Error + + + Filter Task List by Previous Error + + + Filter Task List by User Category + + + Filter Task List by Shortcut Category + + + Filter Task List by HTML Category + + + Filter Task List by Current File + + + Filter Task List by Checked Items + + + Filter Task List by Unchecked Items + + + Sort Task List by Description + + + Sort Task List by Checked Items + + + Start No Debug Build + + + Find Next + + + Find Previous + + + Find Next Selected + + + Find Previous Selected + + + Search Get List + + + Insert Breakpoint + + + Enable Breakpoint + + + F1 Help + + + Move to Next Container + + + Update Marker Spans + + + Move to Previous Container + + + Project Properties + + + Property Sheet or Property Window + + + For debugging only. + + + For debugging only. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + Marker command on the Code Window menu. + + + User-invoked project reload. + + + User-invoked project unload. + + + New Blank Solution + + + Select Project Template + + + Document Outline command. + + + Document outline command. + + + Document outline command. + + + + + + No Commands Available + + + Context window + + + Alias + + + Goto Command Line + + + Evaluate Expression + + + Immediate Mode + + + Evaluate Statement + + + Find Result Window 1 + + + Find Result Window 2 + + + Rename Bookmark + + + Toggle Bookmark + + + Delete bookmark + + + Bookmark Window: Go to Bookmark + + + Enable Bookmark + + + New Bookmark Folder + + + Next Bookmark Folder + + + Previous Bookmark Folder + + + Window 1 menu id. + + + Window 2 menu id. + + + Window 3 menu id. + + + Window 4 menu id. + + + Window 5 menu id. + + + Window 6 menu id. + + + Window 7 menu id. + + + Window 8 menu id. + + + Window 9 menu id. + + + Window 10 menu id. + + + Window 11 menu id. + + + Window 12 menu id. + + + Window 13 menu id. + + + Window 14 menu id. + + + Window 15 menu id. + + + Window 16 menu id. + + + Window 17 menu id. + + + Window 18 menu id. + + + Window 19 menu id. + + + Window 20 menu id. + + + Window 21 menu id. + + + Window 22 menu id. + + + Window 23 menu id. + + + Window 24 menu id. + + + Window 25 menu id. + + + Window menu id. + + + Autohide All Windows + + + Task List Task Help + + + Class view + + + Command id:most recently used project 1 + + + Command id:most recently used project 2 + + + Command id:most recently used project 3 + + + Command id:most recently used project 4 + + + Command id:most recently used project 5 + + + Command id:most recently used project 6 + + + Command id:most recently used project 7 + + + Command id:most recently used project 8 + + + Command id:most recently used project 9 + + + Command id:most recently used project 10 + + + Command id:most recently used project 11 + + + Command id:most recently used project 12 + + + Command id:most recently used project 13 + + + Command id:most recently used project 14 + + + Command id:most recently used project 15 + + + Command id:most recently used project 16 + + + Command id:most recently used project 17 + + + Command id:most recently used project 18 + + + Command id:most recently used project 19 + + + Command id:most recently used project 20 + + + Command id:most recently used project 21 + + + Command id:most recently used project 22 + + + Command id:most recently used project 23 + + + Command id:most recently used project 24 + + + Command id:most recently used project 26 + + + Split Next + + + Split Previous + + + Close all documents + + + Next Document + + + Previous Document + + + Tool 1 + + + Tool 2 + + + Tool 3 + + + Tool 4 + + + Tool 5 + + + Tool 6 + + + Tool 7 + + + Tool 8 + + + Tool 9 + + + Tool 10 + + + Tool 11 + + + Tool 12 + + + Tool 13 + + + Tool 14 + + + Tool 15 + + + Tool 16 + + + Tool 17 + + + Tool 18 + + + Tool 19 + + + Tool 20 + + + Tool 21 + + + Tool 22 + + + Tool 23 + + + Tool 24 + + + External Commands + + + Paste Next TBXCB Item + + + Show All Toolbox Tabs + + + Project Dependencies + + + Close documents + + + Sort Toolbox Items + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Unused. + + + Solution Configuration + + + Get Solution Configuration List + + + Schema table command: Manage Indexes + + + Schema table command: Manage Relationships + + + Schema table command: Manage Constraints + + + Task List Custom View 1 + + + Task List Custom View 2 + + + Task List Custom View 3 + + + Task List Custom View 4 + + + Task List Custom View 5 + + + Task List Custom View 6 + + + Task List Custom View 7 + + + Task List Custom View 8 + + + Task List Custom View 9 + + + Task List Custom View 10 + + + Task List Custom View 11 + + + Task List Custom View 12 + + + Task List Custom View 13 + + + Task List Custom View 14 + + + Task List Custom View 15 + + + Task List Custom View 16 + + + Task List Custom View 17 + + + Task List Custom View 18 + + + Task List Custom View 19 + + + Task List Custom View 20 + + + Task List Custom View 21 + + + Task List Custom View 22 + + + Task List Custom View 23 + + + Task List Custom View 24 + + + Task List Custom View 25 + + + Task List Custom View 26 + + + Task List Custom View 27 + + + Task List Custom View 28 + + + Task List Custom View 29 + + + Task List Custom View 30 + + + Task List Custom View 31 + + + Task List Custom View 32 + + + Task List Custom View 33 + + + Task List Custom View 34 + + + Task List Custom View 35 + + + Task List Custom View 36 + + + Task List Custom View 37 + + + Task List Custom View 38 + + + Task List Custom View 39 + + + Task List Custom View 40 + + + Task List Custom View 41 + + + Task List Custom View 42 + + + Task List Custom View 43 + + + Task List Custom View 44 + + + Task List Custom View 45 + + + Task List Custom View 46 + + + Task List Custom View 47 + + + Task List Custom View 48 + + + Task List Custom View 49 + + + Task List Custom View 50 + + + Whitespace + + + Command window + + + Command window: mark mode + + + Log Command Window + + + Shell + + + Single Character + + + Zero or More + + + Select One or More + + + Begin Line + + + End Line + + + Begin Word + + + End Word + + + Character in set + + + Character not in set + + + Or + + + Escape + + + Tag Expression + + + Regular expression builder context help menu command id: "Pattern Match Help" + + + Regular expression builder context help menu command id: "Regular Expression List". + + + Reserved + + + Reserved + + + Reserved + + + Regular expression builder wildcard menu command id: + + + Regular expression builder wildcard menu command id: "Single Wild Character" + + + Regular expression builder wildcard menu command id: "Wild Single Digit". + + + Regular expression builder wildcard menu command id: "Wild Character in Set". + + + Regular expression builder wildcard menu command id: "Wild Character Not in Set". + + + Find What Text + + + Tagged Expression 1 + + + Tagged Expression 2 + + + Tagged Expression 3 + + + Tagged Expression 4 + + + Tagged Expression 5 + + + Tagged Expression 6 + + + Tagged Expression 7 + + + Tagged Expression 8 + + + Tagged Expression9 + + + Editor Widget Click + + + CmdWinUpdateAC + + + Solution Configuration Manager + + + Add New Project + + + Add an existing project. + + + Add an existing web project. + + + Autohide Context 1 + + + Autohide Context 2 + + + Autohide Context 3 + + + Autohide Context 4 + + + Autohide Context 5 + + + Autohide Context 6 + + + Autohide Context 7 + + + Autohide Context 8 + + + Autohide Context 9 + + + Autohide Context 10 + + + Autohide Context 11 + + + Autohide Context 12 + + + Autohide Context 13 + + + Autohide Context 14 + + + Autohide Context 15 + + + Autohide Context 16 + + + Autohide Context 17 + + + Autohide Context 18 + + + Autohide Context 19 + + + Autohide Context 20 + + + Autohide Context 21 + + + Autohide Context 22 + + + Autohide Context 23 + + + Autohide Context 24 + + + Autohide Context 25 + + + Autohide Context 26 + + + Autohide Context 27 + + + Autohide Context 28 + + + Autohide Context 29 + + + Autohide Context 30 + + + Autohide Context 31 + + + Autohide Context 32 + + + Autohide Context 33 + + + Shell Navigate Backward + + + Shell Navigate Forward + + + Shell Navigate 1 + + + Shell Navigate 2 + + + Shell Navigate 3 + + + Shell Navigate 4 + + + Shell Navigate 5 + + + Shell Navigate 6 + + + Shell Navigate 7 + + + Shell Navigate 8 + + + Shell Navigate 9 + + + Shell Navigate 10 + + + Shell Navigate 11 + + + Shell Navigate 12 + + + Shell Navigate 13 + + + Shell Navigate 14 + + + Shell Navigate 15 + + + Shell Navigate 16 + + + Shell Navigate 17 + + + Shell Navigate 18 + + + Shell Navigate 19 + + + Shell Navigate 20 + + + Shell Navigate 21 + + + Shell Navigate 22 + + + Shell Navigate 23 + + + Shell Navigate 24 + + + Shell Navigate 25 + + + Shell Navigate 26 + + + Shell Navigate 27 + + + Shell Navigate 28 + + + Shell Navigate 29 + + + Shell Navigate 30 + + + Shell Navigate 31 + + + Shell Navigate 32 + + + Shell Navigate 33 + + + Shell Window Navigate 1 + + + Shell Window Navigate 2 + + + Shell Window Navigate 3 + + + Shell Window Navigate 4 + + + Shell Window Navigate 5 + + + Shell Window Navigate 6 + + + Shell Window Navigate 7 + + + Shell Window Navigate 8 + + + Shell Window Navigate 9 + + + Shell Window Navigate 10 + + + Shell Window Navigate 11 + + + Shell Window Navigate 12 + + + Shell Window Navigate 13 + + + Shell Window Navigate 14 + + + Shell Window Navigate 15 + + + Shell Window Navigate 16 + + + Shell Window Navigate 17 + + + Shell Window Navigate 18 + + + Shell Window Navigate 19 + + + Shell Window Navigate 20 + + + Shell Window Navigate 21 + + + Shell Window Navigate 22 + + + Shell Window Navigate 23 + + + Shell Window Navigate 24 + + + Shell Window Navigate 25 + + + Shell Window Navigate 26 + + + Shell Window Navigate 27 + + + Shell Window Navigate 28 + + + Shell Window Navigate 29 + + + Shell Window Navigate 30 + + + Shell Window Navigate 31 + + + Shell Window Navigate 32 + + + Shell Window Navigate 33 + + + Object Browser command id: Do Find + + + Object Browser command id: Match case + + + Object Browser command id: Match Substring + + + Object Browser command id: Match Whole Word + + + Object Browser command id: Match Prefix + + + Build solution + + + Rebuild Solution. + + + Build command: Deploy Solution + + + Build command id: Clean Solution + + + Build selection + + + Rebuild Selection + + + Build command: Deploy Selection + + + Build command: Clean Selection + + + Cancel build + + + Batch Build Dialog + + + Build control + + + Rebuild Control + + + Build command: Deploy Control + + + Build command: Clean context + + + Manage Query Indexes + + + Command id: Print Default (quick print) + + + Browse document + + + Show Start Page + + + Command id:most recently used file 1 + + + Command id:most recently used file 2 + + + Command id:most recently used file 3 + + + Command id:most recently used file 4 + + + Command id:most recently used file 5 + + + Command id:most recently used file 6 + + + Command id:most recently used file 7 + + + Command id:most recently used file 8 + + + Command id:most recently used file 9 + + + Command id:most recently used file 10 + + + Command id:most recently used file 11 + + + Command id:most recently used file 12 + + + Command id:most recently used file 13 + + + Command id:most recently used file 14 + + + Command id:most recently used file 15 + + + Command id:most recently used file 16 + + + Command id:most recently used file 17 + + + Command id:most recently used file 18 + + + Command id:most recently used file 19 + + + Command id:most recently used file 20 + + + Command id:most recently used file 21 + + + Command id:most recently used file 22 + + + Command id:most recently used file 23 + + + Command id:most recently used file 24 + + + Command id:most recently used file 25 + + + External Tools context menu command: Current Path + + + External Tools context menu command: Current Directory + + + External Tools context menu command: Current Filename + + + External Tools context menu command: Current Extension + + + External Tools context menu command: Current Project Directory + + + External Tools context menu command: Current Project Filename + + + External Tools context menu command: Solution Directory + + + External Tools context menu command: Solution Filename + + + Object browser / Class View command: Go to Definition + + + Object browser / Class View commandcommand: Go to Declaration + + + Object browser / Class View command: Browse Definition + + + Object browser / Class View command: Sync Class View + + + Object browser/ Class View command: Show Members + + + Object browser / Class View commandcommand: Show Bases + + + Object browser / Class View commandcommand: Show Derived + + + Object browser / Class View commandcommand: Show Definitions + + + Object browser / Class View commandcommand: Show References + + + Object browser / Class View commandcommand: Show Callers + + + Object browser / Class View commandcommand: Show Callees + + + Add a class. + + + Add Nested Class + + + Add Interface + + + Add Method + + + Add Property + + + Add an event. + + + Add Variable + + + Implement Interface + + + Override + + + Add a function. + + + Add a connection point. + + + Add an indexer. + + + Build order + + + Object Browser command id: Show Hidden + + + Object Browser command: Enable Grouping + + + Object Browser command id: Set Grouping Criteria + + + Object Browser command: Back + + + Object Browser command: Forward + + + Object Browser command id: Show Packages + + + Object Browser command id: Search Combo + + + Object Browser command id: Search Whole Word option + + + Object Browser command id: Search substring option + + + Object Browser command id: Search prefix option + + + Object Browser command id: Case-sensitive search + + + Class View command: No Grouping + + + Class View command: Sort Only Grouping + + + Class View command: Grouped + + + Class View command: Show Packages + + + Class View command: New Folder + + + Class View command: Group by Access + + + Object Search + + + Object Search Results + + + Build cascade menus: Build 1 + + + Build cascade menus: Build 2 + + + Build cascade menus: Build 3 + + + Build cascade menus: Build 4 + + + Build cascade menus: Build 5 + + + Build cascade menus: Build 6 + + + Build cascade menus: Build 7 + + + Build cascade menus: Build 8 + + + Build cascade menus: Build 9 + + + Build last + + + Rebuild 1 + + + Rebuild 2 + + + Rebuild 3 + + + Rebuild 4 + + + Rebuild 5 + + + Rebuild 6 + + + Rebuild 7 + + + Rebuild 8 + + + Rebuild 9 + + + Rebuild Last + + + Build command: Clean 1 + + + Build command: Clean 2 + + + Build command: Clean 3 + + + Build command: Clean 4 + + + Build command: Clean 5 + + + Build command: Clean 6 + + + Build command: Clean 7 + + + Build command: Clean 8 + + + Build command: Clean 9 + + + Build command: Clean Last + + + Build command: Deploy 1 + + + Build command: Deploy 2 + + + Build command: Deploy 3 + + + Build command: Deploy 4 + + + Build command: Deploy 5 + + + Build command: Deploy 6 + + + Build command: Deploy 7 + + + Build command: Deploy 8 + + + Build command: Deploy 9 + + + Build command: Deploy Last + + + Build project pickre + + + Rebuild Project Picker + + + Build command: Clean Project Picker + + + Build command: Deploy Project Picker + + + Resource View + + + Show Home Page + + + Edit Menu IDs + + + Break Line + + + C++ identifier + + + Quoted String + + + Space or Tab + + + Integer + + + Customize toolbars + + + Move To Top + + + Window Help + + + View Popup + + + Check mnemonics + + + Sort Properties Alphabetically. Note: "Alphabeticaly" is misspelled in enumeration member. + + + Sort Properties by Category + + + View Next Tab + + + Check for updates + + + Browser 1 + + + Browser 2 + + + Browser 3 + + + Browser 4 + + + Browser 5 + + + Browser 6 + + + Browser 7 + + + Browser 8 + + + Browser 9 + + + Browser 10 + + + Browser 11 + + + Open Drop Down Open + + + Open Drop Down With + + + Debug Process + + + Next Sub Pane + + + Previous Sub Pane + + + Move File to Project 1 + + + Move File to Project 2 + + + Move File to Project 3 + + + Move File to Project 4 + + + Move File to Project 5 + + + Move File to Project 6 + + + Move File to Project 7 + + + Move File to Project 8 + + + Move File to Project 9 + + + Move File to Project Last + + + Move File to Project Pick + + + Define subset + + + Subset Combo + + + Subset Get List + + + Object Browser command id: Sort Objects Alphabetically + + + Object Browser command id: Sort Objects by Type + + + Object Browser command id: Sort by Object Access + + + Object Browser command Group Objects by Type. + + + Object Browser command: Group Object by Access + + + Object Browser command id: Sort Members Alphabetically + + + Object Browser command id: Sort by Member Type + + + Object Browser command id: Sort by Member Access + + + Pop Browse Context + + + Go to Reference + + + Object Browser command id: Look in References + + + External Tools context menu command: Target Path + + + External Tools context menu command: Target Directory + + + External Tools context menu command: Target Filename + + + External Tools context menu command: Target Extension + + + External Tools context menu command: Current Line + + + External Tools context menu command: Current Column + + + External Tools context menu command: Current Text + + + Browse next + + + Browse previous + + + Browse unload + + + Quick Object Search + + + Expand All + + + External Tools context menu command: Bin Directory + + + Bookmark Window + + + Code Expansion Window + + + Navigate to Next Document + + + Navigate to Previous Document + + + Forward browse context + + + Standard Maximum + + + Find references + + + First Forms + + + Last Forms + + + VB Editor First + + + Zoom Factor 200% + + + Zoom Factor 150% + + + Zoom Factor 100% + + + Zoom Factor 75% + + + Zoom Factor 50% + + + Zoom Factor 25% + + + Zoom Factor 10% + + + VB Editor Last + + + + + + + + + First UI Event ID + + + Select UI Event ID Region + + + Drop UI Event ID + + + Last UI Event ID + + + Represents the GUIDs of built-in task list views. + + + All task list views. + + + The checked tasks view. + + + The comment tasks view. + + + The compiler tasks view. + + + The current file tasks view. + + + The HTML tasks view. + + + The shortcut tasks view. + + + The unchecked tasks view. + + + The user tasks view. + + + These are properties that are supported by the text buffer (DocData) object of the editor. You can get the interface by casting or (calling QueryInterface) on the object of the Text Editor. + + + Used to get access to the buffer's storage object. The returned pointer can be QI'd for and . This is a read-only property. To set the storage, use the method. + + + Used to get access to the buffer's storage object. You can call QueryInterface on the returned pointer can be for and . This is a read-only property. To set the storage, use the method. + + + Used to set the element of the selection for text views. This is used only if you have a custom property browser. If this property is not set, the standard property browser will be associated with the view. + + + string: This property will be used to set the element of the selection for text views. This is used only if you have a custom property browser. If this property is not set, the standard property browser will be associated with the view. + + + Provides a specific error message when the buffer originates the error. Set this string to be the (localized) text you want displayed to the user. Note that the buffer itself does not put up UI, but only calls . The caller can decide whether to show the message to the user. + + + Provides a specific error message when the buffer originates the error. Set this string to be the (localized) text you want displayed to the user. Note that the buffer itself does not put up UI, but only calls . The caller can decide whether to show the message to the user. + + + The of the text buffer. + + + The of the text buffer. + + + bool: If true and the current BufferEncoding is CHARFMT_MBCS, the buffer runs its HTML charset tag detection code to determine a codepage to load and save the file. The detected codepage overrides any codepage set in CHARFMT_MBCS. This is forced on in the buffer's IPersistFileFormat::LoadDocData when it sees an HTML type of file, according to the extension mapping in $RootKey$\Languages\File Extensions. + + + bool: If true and the current BufferEncoding is CHARFMT_MBCS, the buffer will runs its HTML charset tag detection code to determine a codepage to load and save the file. The detected codepage overrides any codepage set in CHARFMT_MBCS. This is forced on in the buffer's IPersistFileFormat::LoadDocData when it sees an HTML type of file, according to the extension mapping in $RootKey$\Languages\File Extensions. + + + If true, then a change to the buffer's moniker causes the buffer to change the language service based on the file extension of the moniker. The default is true. + + + If true, then a change to the buffer's moniker will cause the buffer to change the language service based on the file extension of the moniker. The default is true. + + + This should be used only by editor factories that want to specify a codepage on loading from the Open With dialog. You can use this data only to set the value, not to get the value after you have set it. + + + This should be used only by editor factories that want to specify a codepage on loading from the Open With dialog. You can use this data only to set the value, not to get the value after you have set it. + + + + + Use this property if the file opened in the buffer is associated with a list of extra files under source code control. Set this property with an implementation of in order to control how the buffer handles source code control operations. The object set determines which files are checked out from source code control when edits are made to the buffer. This property controls the behavior of and . It also determines which files are passed by the buffer when it calls methods. + + + Use this property if the file opened in the buffer is associated with a list of extra files under source code control. Set this property with an implementation of in order to control how the buffer handles source code control operations. The object set determines which files are checked out from source code control when edits are made to the buffer. This property controls the behavior of and . It also determines which files are passed by the buffer when it calls methods. + + + bool: + + + bool: + + + true if the buffer is a file on disk. + + + true if the buffer is a file on disk + + + The moniker of the document loaded in the text buffer. It is the full path of the file if the document is a file. + + + The moniker of the document loaded in the text buffer. It is the full path of the file if the document is a file. + + + bool: + + + bool: + + + The comma-separated list of text view roles for the text view. + + + The comma-separated list of text view roles for the text view. + + + Specifies UI accelerator and modifier keys. + + + No key. + + + Shift key. + + + Control key. + + + Alt key. + + + Windows key. + + + An enumeration of commands that apply to events unique to the . + + + Occurs when the user right clicks the mouse over the tree's pane. + + + Occurs when the user double clicks the mouse on the tree's pane. + + + Occurs when the user hits the Enter key while the tree's pane has focus. + + + Occurs when tree node text becomes an editable entry field. + + + Occurs when a tree node turns from an editable entry field back into static text. + + + Occurs when the user hits the escape key and causes an editable tree node to turn back into static text. + + + Values that can be used to specify OldVersion (LowerBound/UpperBound) for . + + + Value is the current version number of the target assembly. + + + Value is n.0.0.0, where n is the major version number of the target assembly. + + + Value is n.n.0.0, where n.n is the major and minor version numbers of the target assembly. + + + Represents common toolbox strings. + + + The multitargeting string "MultiTargeting:{FBB22D27-7B21-42AC-88C8-595F94BDBCA5}". + + + Set of wizard types. + + + The Add Item Wizard type. + + + The Add SubProject Wizard type. + + + The New Project Wizard type. + + + Imports some Win32 window management functions. + + + Initializes a new instance of the class. + + + Determines if a message is intended for the specified dialog box, and if so processes the message. + true if the message has been processed, otherwise false. + A handle to the child window. + The message in question. + + + Changes the parent window of the specified child window. + If the function succeeds, a handle to the previous parent window, otherwise null. + A handle to the child window that should receive a new parent. + A handle to the new parent window. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The string. + The converter parameter. Not used. + The culture information. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The converted string. + The string. + The character to remove. The default is '&'. + The culture. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + A span containing the converted string. + The string + The access key to convert. Should be a character. + The culture + + + Microsoft internal use only.. + + + Microsoft internal use only. + + + Microsoft internal use only. + true if the values combine with logical AND equal true, otherwise false. + The set of values. + The target type. + The conversion parameter. + The culture. + + + Microsoft internal use only. This method throws a . + This method throws a . + The set of values. + The target type. + The conversion parameter. + The culture. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + true if both objects are non-null and equal, otherwise false. + The first object. + The second object. + The conversion parameter. Not used. + The culture. + + + Implements a control visible to automation. + + + Creates a new instance of the class. + + + Returns the control for this class. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The content. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The content. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Microsoft internal use only. + Value to convert + Conversion parameter. + Culture for conversion. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Microsoft internal use only. + Value to convert + Conversion parameter. + Culture for conversion. + + + Defines common boxed values. + + + Value of false. + + + Value of true. + + + Gets the box value specified. + Returns true if the value is true; otherwise returns false. + The value to return box value for. + + + Gets the box value specified. + Returns the value if not null; otherwise returns null. + Value to get box value for. + + + Converts a brush to a color. + + + Creates a new instance of the class. + + + Converts the specified brush to a color. + Returns the color of the brush. + The value of the brush. + Parameter used by the brush. + Culture of the brush. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Microsoft internal use only. + Microsoft internal use only. + Microsoft internal use only. + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + . + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The id. + The target. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Defines how the current location was set. + + + The current location was set by pressing a key. + + + The current location was set by mouse hovering. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Used for buttons that are displayed in Visual Studio WPF dialogs + + + Initializes a new instance of . + + + The base class for all Visual Studio WPF (non-Gel) dialogs. When you implement a WPF dialog, you should derive from this class in order to have consistent styling with other Visual Studio dialogs, as well as help support. To display the dialog, call the method, which correctly parents the dialog in the shell, puts the shell in a modal state while the dialog is displayed, and other features. + + + Initializes a without a Help button. + + + Initializes a T:Microsoft.VisualStudio.PlatformUI.DialogWindow that has a Help topic and a button. + The dialog's help topic + + + Invokes the Help for the dialog window. + + + Gets the parent or owner of the dialog from the Visual Studio shell and displays the dialog window. It also puts the shell in a modal state while the dialog is displayed, and centers the dialog window correctly in the parent window. + T:System.Nullable`1 + + + The base class for WPF dialog windows in Visual Studio 10 and later. + + + Initializes a new instance of . + + + Determines whether the window has a frame. + true if the window has a frame, otherwise false. + + + Determines whether the window has a dialog frame property. + + + Determines whether the window has a help button. + true if the window has a help button, otherwise false. + + + + Determines whether the window has a maximize button. + true if the window has a maximize button, otherwise false. + + + Determines whether the window has a maximize button property. + + + Determines whether the window has a minimize button. + true if the window has a minimize button, otherwise false. + + + Determines whether the window has a minimize button property. + + + Invokes Help for the dialog window. + + + Handles the disposing of resources when the window closes. + The event arguments. + + + When overridden in a derived class, handles the event raised when the dialog window theme has changed. + + + Handles the event raised when the window source has been initialized. + The event arguments. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Standard virtual overload for pattern. + If true, this is a call to . If false, it means this method has been called from the finalizer. + + + Allows derived classes to provide custom dispose handling for managed resources. + + + Allows derived classes to provide custom dispose handling for native resources. + + + Raised when the event is being disposed, that is, while it is still accessible. + + + Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. + + + Returns whether the object has been disposed once, which protects against double disposal. + true if the object has already been disposed. + + + Throws an if this object has been disposed. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Point in device coordinates + + + Microsoft internal use only. + Rect in device coordinates + + + Microsoft internal use only. + Size in device units + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + FrameworkElement to inspect + + + Microsoft internal use only. + Window to inspect + + + Microsoft internal use only. + Window to inspect + + + Microsoft internal use only. + Window to inspect + + + Microsoft internal use only. + Window to inspect + + + Microsoft internal use only. + Window to inspect + + + Microsoft internal use only. + Point in logical units + + + Microsoft internal use only. + Rect in logical coordinates + + + Microsoft internal use only. + Size in logical units + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Window to modify + New height in device units + + + Microsoft internal use only. + Window to modify + New left coordinate in device units + + + Microsoft internal use only. + Window to modify + New top coordinate in device units + + + Microsoft internal use only. + Window to modify + New width in device units + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only.. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + The first object. + The second object. + + + + + + Microsoft internal use only. + The object at which to begin searching. + The type of descendant to find. + + + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + + Microsoft internal use only. + The object to begin searching from. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + The ancestor element. + The descendent element. + + + Microsoft internal use only. + First double to compare. + Second double to compare. + + + Microsoft internal use only. + double to check. + + + + + + Microsoft internal use only. + The HWND to test. + + + + Microsoft internal use only. + The event. + The event's source parameter. + The event's argument parameter. + + + Microsoft internal use only. + The event. + The event's source parameter. + + + Microsoft internal use only. + The event. + The event's source parameter. + The event's argument parameter. + + + Microsoft internal use only. + The event. + The event's source parameter. + The event's argument parameter. + The EventArgs-derived event argument. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Manages focus tasks. + + + Either sends focus to the immediately or delays focusing until the is loaded. The last element pending focus on Loaded will be focused and all previous s will not be focused. + The element to focus. + + + Determines whether WPF or Win32 keyboard focus is within the specified HWND. + Returns true if the focus is within or contained by the HWND; otherwise returns false. + The HWND which may have or contain the focus. + + + Determines whether WPF or Win32 keyboard focus is within the specified element. + Returns true if the focus is within the element; otherwise returns false. + The element to check. + + + Uses the method to try to move WPF focus to the first valid focusable element inside the given , after first enduring that WPF will not attempt to change focus because of a cross- focus change. + The element to move focus into. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + If set to a Color, it will be used to bias the final image + + + Defines the resource keys generated by the Visual Studio theme editor. + + + The category of the header colors. + + + Gets the DefaultBrushKey attribute. + Returns the DefaultBrushKey attribute. + + + Gets the DefaultColorKey attribute. + Returns the DefaultColorKey attribute. + + + Gets the DefaultTextBrushKey attribute. + Returns the DefaultTextBrushKey attribute. + + + Gets the DefaultTextColorKey attribute. + Returns the DefaultTextColorKey attribute. + + + Gets the GlyphBrushKey attribute. + Returns the GlyphBrushKey attribute. + + + Gets the GlyphColorKey attribute. + Returns the GlyphColorKey attribute. + + + Gets the MouseDownBrushKey attribute. + Returns the MouseDownBrushKey attribute. + + + Gets the MouseDownColorKey attribute. + Returns the MouseDownColorKey attribute. + + + Gets the MouseDownGlyphBrushKey attribute. + Returns the MouseDownGlyphBrushKey attribute. + + + Gets the MouseDownGlyphColorKey attribute. + Returns the MouseDownGlyphColorKey attribute. + + + Gets the MouseDownTextBrushKey attribute. + Returns the MouseDownTextBrushKey attribute. + + + Gets the MouseDownTextColorKey attribute. + Returns the MouseDownTextColorKey attribute. + + + Gets the MouseOverBrushKey attribute. + Returns the MouseOverBrushKey attribute. + + + Gets the MouseOverColorKey attribute. + Returns the MouseOverColorKey attribute. + + + Gets the MouseOverGlyphBrushKey attribute. + Returns the MouseOverGlyphBrushKey attribute. + + + Gets the MouseOverGlyphColorKey attribute. + Returns the MouseOverGlyphColorKey attribute. + + + Gets the MouseOverTextBrushKey attribute. + Returns the MouseOverTextBrushKey attribute. + + + Gets the MouseOverTextColorKey attribute. + Returns the MouseOverTextColorKey attribute. + + + Gets the SeparatorLineBrushKey attribute. + Returns the SeparatorLineBrushKey attribute. + + + Gets the SeparatorLineColorKey attribute. + Returns the SeparatorLineColorKey attribute. + + + Microsoft internal use only. + + + Microsoft internal use only. + Object to convert + + + Microsoft internal use only. + String to strip. + + + Microsoft internal use only. + The string. + String to strip. + Specifies the character to treat as an access key specifier. + + + Microsoft internal use only. + String to strip of access key specifiers + Character to strip + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Represents a disposable wrapper around an HWND that can construct the WNDCLASS and HWND, run the WndProc and dispose of the WNDCLASS and HWND. + + + Creates a new instance of the class. + + + Creates the WNDCLASS atom to use for constructing this window’s handle. + Returns the WNDCLASS atom used to create this window’s handle. + + + Creates the handle for the window. + Returns the handle for the window. + + + Destroys the WNDCLASS atom created with . + + + Destroys the window handle created by . + + + Calls and . + + + Returns . + + + Returns . + + + Registers a window class with the given name, and with other options set to default values. + Returns the class atom of the registered window class. + The class name for the window. + + + Gets or creates the class atom returned from . + Returns the class atom. + + + Runs the WndProc for this window. + Returns the window handle. + The window handle. + The window message. + Window parameters. + Window parameters. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Value to convert. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. Manages conversion of image source values. + + + Creates a new instance of the class. + + + Converts the specified value to the specified target type. + Returns a value of the target type. + The value to convert. + The target type. + Parameters relevant to conversion. + Culture relevant to conversion. + + + Converts the specified value back from the specified target type. + Returns the value back from the target type. + The value to convert. + The target type. + Parameters relevant to conversion. + Culture relevant to conversion. + + + Microsoft internal use only. + + + + + + + + + + + + + Extends + + + Creates a new instance of the class. + + + Creates a new instance of the class with the specified value. + The value to use. + + + Represents an element that can be resized and moved through deltas. + + + Gets the position of the resizable element, in logical coordinates. + Returns the position of the resizable element. + + + Gets the screen position of the resizable element, in device coordinates. + Returns the screen position of the resizable element. + + + Gets the maximum size of the resizable element, in logical coordinates. + Returns the maximum size of the resizable element. + + + Gets the minimum size of the resizable element, in logical coordinates. + Returns the minimum size of the resizable element. + + + Repositions the element with the given deltas. + T change in the left position. + The change in the top position. + The change in the width. + The change in the height. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Contains utilities for making layout comparisons. + + + Determines whether the absolute value of the difference between the specified values is less than the double value 0.00000153. + Returns true if the difference between the values is less than 0.00000153; otherwise returns false. + The first value for comparison. + The second value for comparison. + + + Determines whether the absolute values of the differences between the left positions, top positions, heights and widths of the specified rectangles are less than the double value 0.00000153. + Returns true if the differences between the values are less than 0.00000153; otherwise returns false. + The first rectangle for comparison. + The second rectangle for comparison. + + + Determines whether the first specified value is greater than the second specified value and the values are not within 0.00000153 of each other. + Returns true if the first value is greater than the second value and the values are not within 0.00000153 of each other; otherwise returns false. + The first value for comparison. + The second value for comparison. + + + Determines whether the first specified value is less than the second specified value and the values are not within 0.00000153 of each other. + Returns true if the first value is less than the second value and the values are not within 0.00000153 of each other; otherwise returns false. + The first value for comparison. + The second value for comparison. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The element which may need to be laid out synchronously. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Represents the Most Recently Used list. + + + Initializes a new instance of . + + + The do nothing routed command. Visual Studio binds to this command handler when a UI gesture (for example, a left double-click) should be ignored. + + + Opens the folder of the currently selected item. + + + Opens the currently selected item. + + + Removes the currently selected item. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Helper to send focus to the FrameworkElement immediately or delay focusing until the FrameworkElement is loaded. + + + Sets focus on the last element pending focus on the Loaded event, all previous elements will not be focused. + The element to set focus on. + + + Defines the progress bar colors resource keys generated by the Visual Studio theme. + + + Gets the BackgroundBrushKey attribute. + Returns the BackgroundBrushKey attribute. + + + Gets the BackgroundColorKey attribute. + Returns the BackgroundColorKey attribute. + + + The category of the progress bar colors. + + + Gets the IndicatorFillBrushKey attribute. + Returns the IndicatorFillBrushKey attribute. + + + Gets the IndicatorFillColorKey attribute. + Returns the IndicatorFillColorKey attribute. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The type to try-cast the COM object to + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Represents a CheckBox option button for Boolean search options in the Visual Studio common search control. + + + Creates a new instance of the class. + + + Called when click occurs on the button. + + + Called when button value is toggled. + + + Represents the button for commands search options in the Visual Studiocommon search control. + + + Creates a new instance of the class. + + + Called when the button is clicked. + + + Represents the Visual Studio common search control. + + + Creates a new instance of the Visual Studio common search control. + + + Gets the drop target that handles drag and drop operations on the control. + Returns the drop target. + + + Gets a flag indicating whether the control has a popup. + Returns the flag. + + + + Gets a flag indicating whether the control has a popup that is open. + Returns the flag. + + + + + + + + + + + + + Is invoked whenever application code or internal processes call ApplyTemplate. + + + Is invoked whenever application code or internal processes create an automation peer. + Returns the automation peer. + + + Provides class handling for receiving focus on the control or any element derived from this control. + The event data for the KeyboardFocusChanged event. + + + Provides class handling for dragging objects into the control or any element derived from this control. + The event data for the Drag event. + + + Provides class handling for dragging objects out of the control or any element derived from this control. + The event data for the Drag event. + + + Provides class handling for dragging objects over the control or any element derived from this control. + The event data for the Drag event. + + + Provides class handling for dropping objects into the control or any element derived from this control. + The event data for the Drag event. + + + Provides class handling for receiving key down events on the control or any element derived from this control. + The event data for the Key event. + + + Exposes UI automation support for the Visual Studio common search control. + + + Creates a new instance of the class with the specified common search control owner. + The owner of the class. + + + When overridden in a derived class, is called by GetAutomationControlType. + Returns the control type. + + + When overridden in a derived class, is called by GetChildren. + Returns the control’s children. + + + When overridden in a derived class, is called by GetClassName. + Returns the name of the class. + + + When overridden in a derived class, gets the control pattern that is associated with the specified . + Returns the object that implements the pattern interface; a null reference if this peer does not support the interface.. + The interface to get the pattern for. + + + Determines that the control is collapsed. + + + Determines that the control is expanded. + + + Gets or sets the ExpandCollapseState attribute. + Returns the ExpandCollapseState attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents the data source class for the Visual Studio common search control. + + + Creates a new instance of the search control data source class. + + + + + Gets or sets the help topic attribute of the search control data source. + Returns the help topic. + + + + + + Provides class handling for adding to the most-recently-used (MRU) item collection on the data source or any element derived from it. + The text for which the most recent search was done. + + + Provides class handling for clearing the search on the data source or any element derived from it. + + + Provides class handling for invoking topic help on the data source or any element derived from it. + Returns . + The topic for which help was invoked. + + + Provides class handling for the search control data source to intercept specific key presses for navigation between the results already found. + Returns true if the key was processed; otherwise, returns false if the search control should process it.. + The key that was pressed. + The modifier or accelerator keys that were pressed. + + + Provides class handling for populating the most-recently-used (MRU) item collection on the data source or any element derived from it. + The search prefix. + + + Provides class handling for starting a search on the data source or any element derived from it. + The text for which the search is starting. + + + Provides class handling for stopping a search on the data source or any element derived from it. + + + + Gets or sets the collection search filters for the search control data source. + Returns the search filter collection. + + + + Gets or sets the collection most-recently-used (MRU) items for the search control data source. + Returns the collection of most-recently-used (MRU) items. + + + + Gets or sets the collection of search options for the search control data source. + Returns the collection of search options. + + + + Gets or sets the search progress value for the search control data source. + Returns the search progress value. + + + + Gets or sets the search settings data source for the search control data source. + Returns the search settings data source. + + + + Gets or sets the search status of the search control data source. + Returns the search status. + + + + Gets or sets the search text for the search control data source. + Returns the search text. + + + + + + Represents the names of the search control data source properties. + + + The name of the help topic attribute of the search control data source. Value is “HelpTopic”. + + + The name of the collection search filters for the search control data source. Value is “SearchFilters”. + + + The name of the collection most-recently-used (MRU) items for the search control data source. Value is “SearchMRUItems”. + + + The name of the collection of search options for the search control data source. Value is “SearchOptions”. + + + The name of the search progress value for the search control data source. Value is “SearchProgress”. + + + The name of the search settings data source for the search control data source. Value is “SearchSettings”. + + + The name of the search status of the search control data source. Value is “SearchStatus”. + + + The name of the search text for the search control data source. Value is “SearchText”. + + + + The name of the action of adding a most-recently-used (MRU) item to the search control data source. Value is “AddMRUItem”. + + + The name of the action of clearing the search. Value is “ClearSearch”. + + + The name of the action of invoking a help topic. Value is “InvokeHelp”. + + + The name of the action of notifying the data source that a navigation key is pressed. Value is “NotifyNavigationKey”. + + + The name of the action of populating the most-recently-used (MRU) collection of the search control data source. Value is “PopulateMRU”. + + + The name of the action of starting the search. Value is “StartSearch”. + + + The name of the action of stopping the search. Value is “StopSearch”. + + + + + + + + + + + + + + + + + + + Represents a text string, or a selected portion of a text string with start and end positions specified. + + + Creates a new instance of the FilterData structure. + The text string. + Position of the start of the selected part of the string. + Position of the end of the selected part of the string. + + + The position of the end of the selected part of the string. + + + The position of the start of the selected part of the string. + + + The text string. + + + Represents the names of the properties of the search filter data source. + + + The name of the display text for the search filter data source. Value is “DisplayText”. + + + The name of the tooltip text for the search filter data source. Value is “Tooltip”. + + + Represents the names of the actions of the search filter data source. + + + The name of the apply filter action. Value is “ApplyFilter”. + + + Represents a data source for the most-recently-used (MRU) item for the search control. + + + Creates a new instance of the most-recently-used (MRU) search item data source class. + + + + Provides class handling for deleting on the most-recently-used (MRU) item data source. + + + Provides class handling for selecting on the most-recently-used (MRU) item data source. + + + + Gets or sets the text attribute of data source for the most-recently-used (MRU) item. + Returns the text attribute. + + + + Represents the names of the properties for the data source for search most-recently-used (MRU) items. + + + The name of the text attribute for the data source. Value is “Text”. + + + Represents the names of the actions of the search most-recently-used (MRU) item data source. + + + The name of the action of deleting the search most-recently-used (MRU) item. Value is “Delete”. + + + The name of the action of selecting the search most-recently-used (MRU) item. Value is “Delete”. + + + + + + + + + + + + + + + + + + + + + Represents a data source for a search option for the search control. + + + Creates a new instance of a search option data source. + + + Gets or sets the value of the display text for the search option. + Returns the display text of the search option. + + + + Provides class handling for selecting the search option on the data source or any element derived from it. + + + + Gets or sets the value of the tooltip text for the search option. + Returns the tooltip text of the search option. + + + + Gets or sets the type (Boolean or command) for the search option. + Returns the type of the search option. + + + + Gets or sets the value for the search option. This property is only valid for Boolean search options. + Returns the value of a Boolean search option. + + + + Represents the names of the attributes of a search option data source. + + + The name of the value of the display text for the search option. Value is “DisplayText”. + + + The name of the value of the tooltip text for the search option. Value is “Tooltip”. + + + The name of the type for the search option. Value is “Type”. + + + The name of the value of a Boolean search option. Value is “Value”. + + + Represents the names of the actions of a search option data source. + + + The name of the selection action on a search option data source. Value is “Search”. + + + + + + + + + + Represents the type of a search option for the search control. + + + Represents the Boolean search option type (0). + + + Represents the command search option type (1). + + + + + + + + + + + + + + + + + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + This class represents the search provider settings data source used by the Visual Studio common search control. + + + Creates a new instance of the search provider settings data source class. + + + Microsoft internal use only. Gets or sets the value indicating the progress type supported by the search provider. Default is 0 (SPT_NONE); do not display progress type; value can be 0 (SPT_NONE, no display), 1 (SPT_INDETERMINATE, infinite-loop animation) or 2 (SPT_DETERMINATE, 0-100% progress bar). + Returns the progress type value. + + + Microsoft internal use only. + + + Microsoft internal use only. Gets or sets the flag indicating whether the search provider can cache the display properties of the search result items for faster recent item retrieval. + Returns the flag indicating that search result items’ display properties are being cached. + + + Microsoft internal use only. + + + Identifies the names of the search provider settings properties of the Visual Studio common search control. + + + The name of the value indicating the progress type supported by the search provider. Name is “SearchProgressType”. Default search progress type is 0 (SPT_NONE); do not display progress type. Progress type value can be 0 (SPT_NONE, no display), 1 (SPT_INDETERMINATE, infinite-loop animation) or 2 (SPT_DETERMINATE, 0-100% progress bar). + + + The name of the flag indicating whether this search provider can cache the text properties of the search result items for faster recent item retrieval. Name is “SearchResultsCacheable”. + + + This class represents the search settings used by the Visual Studio common search control. + + + Creates a new instance of the Visual Studio common search control’s search settings class. + + + Gets or sets the property indicating the maximum width of the Visual Studio common search control. Default is 400. + Returns the maximum width of the search control. + + + + Gets or sets the value indicating the minimum width used by the Visual Studio common search control for displaying popups. Default is 200. + Returns the minimum popup width of the search control. + + + + Gets or sets the value indicating the minimum width of the Visual Studio common search control. Default is 100. + Returns the minimum width of the search control. + + + + Gets or sets the flag indicating whether the Visual Studio common search control forwards the enter-key event after a search is started. Default is false, indicating that the enter-key event is not forwarded by the control. + Returns a flag indicating whether the search control forwards the enter-key event. + + + + Gets or sets the value indicating the maximum number of most-recently-used(MRU) items to show in the drop-down list of the Visual Studio common search control. Default is 5 items.. + Returns the maximum number of MRU items in the popup of the search control. + + + + Gets or sets a flag indicating whether searches will be restarted, even if the search string is not changed, by pressing Enter or selecting a most-recently-used (MRU) item from the list. Default is false; the search will not be restarted. + Returns the flag indicating whether searches will be restarted. + + + + Gets or sets a flag indicating whether the search button is visible in the Visual Studio common search control. Default is true; the button is visible. + Returns the flag indicating whether the search button is visible. + + + + Gets or sets the value indicating the search button tooltip to display after a search is complete. Default is “Clear search”. + Returns the search button tooltip to display after a search is complete. + + + + Gets or sets a flag indicating whether the search popup is automatically shown when the user begins typing. This is only relevant for delayed and on-demand searches in the Visual Studio common search control. Default is true; the search popup is automatically shown. + Returns the flag indicating that the popup is shown when the user begins typing. + + + + Gets or sets the value indicating the delay, in milliseconds, after a search is automatically started in the search control, until the search popup is automatically closed. Default is 4,000 milliseconds. + Returns the delay, in milliseconds, until the popup is automatically closed. + + + + Gets or sets the value indicating the delay, in milliseconds, after a search is started in the search control, until the progress indicator automatically displays. This delay enables fast searches to complete without showing progress. Default is 200 milliseconds. + Returns the delay, in milliseconds, until the progress indicator automatically displays. + + + + Gets or sets the value indicating the progress type supported by the Visual Studio common search control. Default is 0 SPT_INDETERMINATE, indicating the search will be an infinite-loop animation, because exact search progress cannot be determined. Value can be 0 (SPT_NONE, no display), 1 (SPT_INDETERMINATE, infinite-loop animation) or 2 (SPT_DETERMINATE, 0-100% progress bar). + Returns the progress type of the search control. + + + + Gets or sets the value indicating the delay, in milliseconds, until a delayed search starts automatically in the Visual Studio common search control. Default is 1,000 milliseconds. + Returns the delay in milliseconds before a delayed search starts automatically. + + + + Gets or sets the value indicating the minimum number of characters for relevance in a search. The Visual Studio common search control will wait to start a new search until the user types at least the minimum number of characters. Default is 1 character. + Returns minimum number of characters needed to start a search. + + + + Gets or sets the value indicating the search button tooltip to display before the Visual Studio common search control starts a search. Default is “Search”. + Returns the search button tooltip to display before starting a search. + + + + Gets or sets the value indicating the search start type of the Visual Studio common search control. Default is delayed; start type can be instant(SST_INSTANT), delayed(SST_DELAYED) or on-demand(SST_ONDEMAND). + Returns the search start type of the control. + + + + Gets or sets the value indicating the search button tooltip to display during a search by the Visual Studio common search control. Default is “Stop search”. + Returns the search button tooptip to display during a search. + + + + Gets or sets the value indicating the tooltip for the search box of the Visual Studio common search control. Default is “Type words to search for”. + Returns the tooltip for the search edit box. + + + + Gets or sets the flag indicating whether the Visual Studio common search control trims whitespace from the beginning and end of the search string before starting a search or adding the item to the most-recently-used (MRU) list. Default is true; whitespace is trimmed from the string before it is used. + Returns the flag indicating whether to trim whitespace before using the search string. + + + + Gets or sets a flag indicating whether the Visual Studio common search control displays most-recently-used (MRU) items in the drop-down list. Default is true; the drop-down list is displayed. + Returns the flag indicating whether the search control displays most-recently-used (MRU) items. + + + + Gets or sets the value indicating the string to display in the Visual Studio common search control when it is empty and does not have the focus. Default is “Search”. + Returns the watermark string of the search control. + + + + + + + The name of the value indicating the maximum width of the Visual Studio common search control. Name is “ControlMaxWidth”. + + + The name of the value indicating the minimum width used by the Visual Studio common search control for displaying popups. Name is “ControlMinPopupWidth”. + + + The name of the value indicating the minimum width of the Visual Studio common search control. Name is “ControlMinWidth”. + + + The name of the flag indicating whether the Visual Studio common search control forwards the enter-key event after a search is started. Name is “ForwardEnterKeyOnSearchStart”. + + + The name of the value indicating the maximum number of most-recently-used(MRU) items to show in the drop-down list of the Visual Studio common search control. Name is “MaximumMRUItems”. + + + The name of the flag indicating whether searches will be restarted, even if the search string is not changed, by pressing Enter or selecting a most-recently-used (MRU) item from the list. Name is “RestartSearchIfUnchanged”. + + + The name of the flag indicating whether the search button is visible in the Visual Studio common search control. Name is “SearchButtonVisible”. + + + The name of the value indicating the search button tooltip to display after a search is complete. Name is “SearchClearTooltip”. + + + The name of the flag indicating whether the search popup is automatically shown when the user begins typing. This is only relevant for delayed and on-demand searches in the Visual Studio common search control. Name is “SearchPopupAutoDropdown". + + + The name of the value indicating the delay, in milliseconds, after a search is automatically started in the search control, until the search popup is automatically closed. Name is “SearchPopupCloseDelay”. + + + The name of the value indicating the delay, in milliseconds, after a search is started in the search control, until the progress indicator automatically displays. Name is “SearchProgressShowDelay”. + + + The name of the value indicating the progress type supported by the Visual Studio common search control. Name is “SearchProgressType”. + + + The name of the value indicating the delay, in milliseconds, until a delayed search starts automatically in the Visual Studio common search control. Name is “SearchStartDelay”. + + + The name of the value indicating the minimum number of characters for relevance in a search. The Visual Studio common search control will wait to start a new search until the user types at least the minimum number of characters. Name is “SearchStartMinChars”. + + + The name of the value indicating the search button tooltip to display before the Visual Studio common search control starts a search. Name is “SearchStartTooltip”. + + + The name of the value indicating the search start type of the Visual Studio common search control. Name is “SearchStartType”. + + + The name of the value indicating the search button tooltip to display during a search by the Visual Studio common search control. Name is “SearchStopTooltip”. + + + The name of the value indicating the tooltip for the search box of the Visual Studio common search control. Name is “SearchTooltip”. + + + The name of the flag indicating whether the Visual Studio common search control trims whitespace from the beginning and end of the search string before starting a search or adding the item to the most-recently-used (MRU) list. Name is “SearchTrimsWhitespaces” + + + The name of a flag indicating whether the Visual Studio common search control displays most-recently-used (MRU) items in the drop-down list. Name is “SearchUseMRU”. + + + The name of the value indicating the string to display in the Visual Studio common search control when it is empty and does not have the focus. Value is “SearchWatermark”. + + + + Enumerates the values of search status of the Visual Studio search control. + + + Search status is NotStarted (0). + + + Search status is InProgress (1). + + + Search status is Complete (2). + + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Implements selecting all the text in the Visual Studio Common Search Control when the edit box is focused. + + + Creates a new instance of the class. + + + Gets or sets the FocusRoot attribute. + Returns the FocusRoot attribute. + + + + Called when mouse drop occurs in this text box. + Event argument. + + + Called when this text box gets the keyboard focus. + Event argument. + + + Called when this text box loses mouse capture. + Event argument. + + + Called when mouse down occurs in this text box. + Event argument. + + + Called when mouse move occurs in this text box. + Event argument. + + + Represents the search utilities for the Visual Studio search control. + + + Rebuilds a search string from the specified search query. + Returns the search string specified by the search query. + The search query from which to build the search string. + + + Rebuilds a search string from the specified search tokens. + Returns the search string built from the specified search tokens. + The array of search tokens from which to build the search string. + + + Creates a new search query from the specified search string. + Returns the search query created from the specified search string. + String to parse into a search query. + + + Creates a search query parser object. + Returns the created search query parser. + + + Extracts and returns search tokens from the specified search query. + Returns the search tokens found in the search query. + The search query from which to extract search tokens. + + + Creates and returns a search filter token built from the specified filter token components. + Returns the search filter token specified. + The filter field to use. + The filter value to use. + The type of filter token to return. + + + Gets a search token which parses to the specified text string. + Returns a search token specified by the text. + The text to use for the token. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Represents the progress bar to use for progress controls displayed in Visual Studio WPF dialogs. + + + Creates a new instance of the SmoothProgressBar class. + + + Gets or sets the maximum time interval, in milliseconds, during which the progress is animated between the current value and the target value. + Returns the maximum animation duration interval. + + + + Initializes the progress bar and sets its target value to its specified minimum value. + + + Gets or sets the target value of the progress bar. The progress bar animates smoothly from its current value to the target value. + Returns the target value of the progress bar. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The element being measured. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The sequence of UIElements. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The size available to the control. + The control's orientation. + The enumeration of child UIElements to measure and arrange. + True to actually remeasure the child elements and attach the new layout information to them. To perform a non-invasive preview of the layout, pass false. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The new device left for the window. + The new device top for the window. + + + Microsoft internal use only. + The element to show the preview window over. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Fully-qualified filename of the current Start Page XAML file + active Start Page Data Source + + + Microsoft internal use only. + My Documents Start Pages directory + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Represents a markup extension that enables custom start pages to use paths relative to the XAML file on any property expecting a , an , or a string. + + + Initializes a new instance of with the specified relative path. + The relative path from the Start Page XAML file location. + + + Gets the object that is defined in the XAML. + An object which may be a , an , or a string. + The service provider. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Converts an XML string to an . + + + Initializes a new instance of . + + + Converts an XML string to an . + An . If the string is null or empty, or the XML is not valid, the data provider is empty. + The XML string. + The conversion parameter. Unused. + The culture. + + + Converts from an XML data provider to an XML string. This method throws a . + This method throws a . + The XML data provider + The conversion parameter. + The culture. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + The type with which this StyleKey is associated with. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only.. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Gets of sets the AutoShowToolTipWhenObscured attribute. + Returns the AutoShowToolTipWhenObscured attribute. + + + Flag determining whether to automatically show the tool tip when it is obscured. + + + Gets the value of the AutoShowToolTipWhenObscured attribute for the specified element. + Returns the AutoshowToolTipWhenObscured attribute value of the specified element. + The element to get the AutoShowToolTipWhenObscured flag for. + + + Gets the ToolTipBounds of the specified element. + Returns the ToolTipBounds of the specified element. + The element to get the bounds for. + + + Gets the ToolTipText of the specified element. + Returns the ToolTipText of the specified element. + The element to get the text for. + + + Sets the AutoShowToolTipWhenObscured attribute to the specified value for the given element. + The element to set the AutoShowToolTipWhenObscured attribute for. + The value to set the AutoShowToolTipWhenObscured attribute to. + + + Sets the ToolTipBounds attribute to the specified value for the given element. + The element to set the ToolTipBounds attribute for. + The value to set the ToolTipBounds attribute to. + + + Sets the ToolTipOffsets attribute to the specified values for the given element. + The element to set the ToolTipOffsets attribute for. + The value to set the ToolTipOffsets horizontal to. + The value to set the ToolTipOffsets vertical to. + + + Sets the ToolTipPlacement attribute to the specified value for the given element. + The element to set the ToolTipPlacement attribute for. + The value to set the ToolTipPlacement attribute to. + + + Sets the ToolTipText attribute to the specified value for the given element. + The element to set the ToolTipText attribute for. + The value to set the ToolTipText attribute to. + + + Gets or sets the ToolTipBounds attribute. + Returns the ToolTipBounds attribute. + + + + Gets or sets the ToolTipText attribute. + Returns the ToolTipText attribute. + + + + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Defines the TreeView colors resource keys generated by the Visual Studio theme. + + + Gets the BackgroundBrushKey attribute. + Returns the BackgroundBrushKey attribute. + + + Gets the BackgroundColorKey attribute. + Returns the BackgroundColorKey attribute. + + + Gets the BackgroundTextBrushKey attribute. + Returns the BackgroundTextBrushKey attribute. + + + Gets the BackgroundTextColorKey attribute. + Returns the BackgroundTextColorKey attribute. + + + The category of the TreeView colors. + + + Gets the DragDropInsertionArrowBorderBrushKey attribute. + Returns the DragDropInsertionArrowBorderBrushKey attribute. + + + Gets the DragDropInsertionArrowBorderColorKey attribute. + Returns the DragDropInsertionArrowBorderColorKey attribute. + + + Gets the DragDropInsertionArrowBrushKey attribute. + Returns the DragDropInsertionArrowBrushKey attribute. + + + Gets the DragDropInsertionArrowColorKey attribute. + Returns the DragDropInsertionArrowColorKey attribute. + + + Gets the DragOverItemBrushKey attribute. + Returns the DragOverItemBrushKey attribute. + + + Gets the DragOverItemColorKey attribute. + Returns the DragOverItemColorKey attribute. + + + Gets the DragOverGlyphBrushKey attribute. + Returns the DragOverGlyphBrushKey attribute. + + + Gets the DragOverGlyphColorKey attribute. + Returns the DragOverGlyphColorKey attribute. + + + Gets the DragOverItemGlyphMouseOverBrushKey attribute. + Returns the DragOverItemGlyphMouseOverBrushKey attribute + + + Gets the DragOverItemGlyphMouseOverColorKey attribute. + Returns the DragOverItemGlyphMouseOverColorKey attribute. + + + Gets the DragOverItemTextBrushKey attribute. + Returns the DragOverItemTextBrushKey attribute. + + + Gets the DragOverItemTextColorKey attribute. + Returns the DragOverItemTextColorKey attribute. + + + Gets the FocusVisualBorderBrushKey attribute. + Returns the FocusVisualBorderBrushKey attribute. + + + Gets the FocusVisualBorderColorKey attribute. + Returns the FocusVisualBorderColorKey attribute. + + + Gets the GlyphBrushKey attribute. + Returns the GlyphBrushKey attribute. + + + Gets the GlyphColorKey attribute. + Returns the GlyphColorKey attribute. + + + Gets the GlyphMouseOverBrushKey attribute. + Returns the GlyphMouseOverBrushKey attribute. + + + Gets the GlyphMouseOverColorKey attribute. + Returns the GlyphMouseOverColorKey attribute. + + + Gets the HighlightedSpanBrushKey attribute. + Returns the HighlightedSpanBrushKey attribute. + + + Gets the HighlightedSpanColorKey attribute. + Returns the HighlightedSpanColorKey attribute. + + + Gets the HighlightedSpanTextBrushKey attribute. + Returns the HighlightedSpanTextBrushKey attribute. + + + Gets the HighlightedSpanTextColorKey attribute. + Returns the HighlightedSpanTextColorKey attribute. + + + Gets the SelectedItemActiveBrushKey attribute. + Returns the SelectedItemActiveBrushKey attribute. + + + Gets the SelectedItemActiveColorKey attribute. + Returns the SelectedItemActiveColorKey attribute. + + + Gets the SelectedItemActiveGlyphBrushKey attribute. + Returns the SelectedItemActiveGlyphBrushKey attribute. + + + Gets the SelectedItemActiveGlyphColorKey attribute. + Returns the SelectedItemActiveGlyphColorKey attribute. + + + Gets the SelectedItemActiveGlyphMouseOverBrushKey attribute. + Returns the SelectedItemActiveGlyphMouseOverBrushKey attribute. + + + Gets the SelectedItemActiveGlyphMouseOverColorKey attribute. + Returns the SelectedItemActiveGlyphMouseOverColorKey attribute. + + + Gets the SelectedItemActiveTextBrushKey attribute. + Returns the SelectedItemActiveTextBrushKey attribute. + + + Gets the SelectedItemActiveTextColorKey attribute. + Returns the SelectedItemActiveTextColorKey attribute. + + + Gets the SelectedItemInactiveBrushKey attribute. + Returns the SelectedItemInactiveBrushKey attribute. + + + Gets the SelectedItemInactiveColorKey attribute. + Returns the SelectedItemInactiveColorKey attribute. + + + Gets the SelectedItemInactiveGlyphBrushKey attribute. + Returns the SelectedItemInactiveGlyphBrushKey attribute. + + + Gets the SelectedItemInactiveGlyphColorKey attribute. + Returns the SelectedItemInactiveGlyphColorKey attribute. + + + Gets the SelectedItemInactiveGlyphMouseOverBrushKey attribute. + Returns the SelectedItemInactiveGlyphMouseOverBrushKey attribute. + + + Gets the SelectedItemInactiveGlyphMouseOverColorKey attribute. + Returns the SelectedItemInactiveGlyphMouseOverColorKey attribute. + + + Gets the SelectedItemTextBrushKey attribute. + Returns the SelectedItemTextBrushKey attribute. + + + Gets the SelectedItemTextColorKey attribute. + Returns the SelectedItemTextColorKey attribute. + + + Gets the ValidationSquigglesBrushKey attribute. + Returns the ValidationSquigglesBrushKey attribute. + + + Gets the ValidationSquigglesColorKey attribute. + Returns the ValidationSquigglesColorKey attribute. + + + Unboxes an object that contains a value type into a specific, possibly different value type. + + + Unboxes the specified object into a Boolean object. + Returns a Boolean object. + The original value to unbox. + + + Unboxes the specified object into a Double object. + Returns a Double object. + The original value to unbox. + + + Unboxes the specified object into an Int16 object. + Returns an Int16 object. + The original value to unbox. + + + Unboxes the specified object into an Int32 object. + Returns an Int32 object. + The original value to unbox. + + + Unboxes the specified object into an Int64 object. + Returns an Int64 object. + The original value to unbox. + + + Unboxes the specified object into an Int8 object. + Returns an Int8 object. + The original value to unbox. + + + Unboxes the specified object into an IntPtr object. + Returns an IntPtr object. + The original value to unbox. + + + Unboxes the specified object into a UInt16 object. + Returns a UInt16 object. + The original value to unbox. + + + Unboxes the specified object into a Uint32 object. + Returns the Uint32 object. + The original value to unbox. + + + Unboxes the specified object into a Uint64 object. + Returns the Uint64 object. + The original value to unbox. + + + Unboxes the specified object into a UInt8 object. + Returns the UInt8 object. + The original value to unbox. + + + Microsoft internal use only. + + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + Returns . + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Returns . + + + Helper to get colors from the current Visual Studio theme and provide notifications when the theme or colors change. + + + Gets the color of the specified resource key. + Returns the color. + The resource key to get the color for. + + + Raised when Visual Studio theme color changes. + + + Use this class as the base class for Visual Studio dialogs used with objects. + + + Initializes a new instance of . + + + Invokes Help for the dialog window. + + + Microsoft internal use only. + + + + Microsoft internal use only. + + + Microsoft internal use only. Adds a to the item to the collection. + The item to add to the collection. + + + Microsoft internal use only. Clears all items from the list. + + + Gets the number of strong references remaining in the collection. + Returns the number of strong references. + + + Microsoft internal use only. Removes an item from the underlying collection, if it exists. + Returns true if the item was found and removed; otherwise returns false. + The item to remove. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Gets a list containing strong references to the items in this collection. + Returns a list containing strong references to the items in this collection. + + + Extends to resize any item that implements the interface. + + + Creates a new instance of the class. + + + Gets of sets the ResizeGripDirection attribute. + Returns the ResizeGripDirection. + + + + Gets or sets the ResizeGripMode attribute. + Returns the ResizeGripMode. + + + + Gets or sets the target element that this class will resize. + Returns the target element to resize. + + + + Defines direction values for dependency property. + + + The left of the window. + + + The right of the window. + + + The top of the window. + + + The bottom of the window. + + + The top left of the window. + + + The top right of the window. + + + The bottom left of the window. + + + The bottom right of the window. + + + Determines whether the specified resize direction affects the left of the resized element. + + + Determines whether the specified resize direction affects the right of the resized element. + + + Determines whether the specified resize direction affects the top of the resized element. + + + Determines whether the specified resize direction affects the bottom of the resized element. + + + Determines whether the specified resize direction affects the horizontal width of the resized element. + + + Determines whether the specified resize direction affects the height of the resized element. + + + + Determines whether the specified resize direction affects the bottom of the resized element. + Returns true if the resize direction is , or ; otherwise returns false. + The resize direction to check. + + + Determines whether the specified resize direction affects the horizontal width of the resized element. + Returns true if the resize direction is not and not ; otherwise returns false. + The resize direction to check. + + + Determines whether the specified resize direction affects the left of the resized element. + Returns true if the resize direction is , or ; otherwise returns false. + The resize direction to check. + + + Determines whether the specified resize direction affects the right of the resized element. + Returns true if the resize direction is , or ; otherwise returns false. + The resize direction to check. + + + Determines whether the specified resize direction affects the top of the resized element. + Returns true if the resize direction is , or ; otherwise returns false. + The resize direction to check. + + + Determines whether the specified resize direction affects the height of the resized element. + Returns true if the resize direction is not and not ; otherwise returns false. + The resize direction to check. + + + Determines the mode of the current resize operation. + + + Resizing mode is splitter. + + + Resizing mode is direct update. + + + Represents a Boolean option for use by the search control for window search. + + + Creates a new instance of a Boolean search option for use by the search control for window search. + The display text for the search option. + The tooltip text for the search option. + The initial value to return for the search option. + + + Creates a new instance of a Boolean search option for use by the search control for window search. + The display text for the search option. + The tooltip text for the search option. + The function which performs the option action and gets the option value. Must return a Boolean value. + The function which performs the option action. + + + Gets or sets the value of the Boolean option. + Returns the value of the option. True indicates check box is checked; false indicates check box is unchecked. + + + Represents a command option for use by the search control for window search. + + + Creates a new instance of a command option for use by the search control for window search. + The display text for the search option. + The tooltip text for the search option. + The function which performs the option action. + + + Invokes the specified command function. Invoke is called when the corresponding command push button is pressed. + + + Represents a base class from which users can derive classes to implement advanced search filters for use by the search control for window search. + + + Creates a new instance of a search filter with an apply-filter method for use by the search control for window search. + The display text for the search filter. . Must be non-whitespace. + The tooltip text for the search filter. . Must not be an empty string. + + + Override this method in derived classes to provide specific implementation for the custom filter, by manipulating the search text from the search control and changing the selection as needed. + The search string from which to obtain the filter selection. + The location within the search string to start the filter selection. + The location within the search string to end the filter selection. + + + Represents a search filter for use by the search control for window search. + + + Creates a new instance of a search filter for use by the search control for window search. + The display text for the search filter. . Must be non-whitespace. + The tooltip text for the search filter. . Must not be an empty string. + + + Gets or sets the display text for the search filter + Returns the display text for the search filter. + + + Gets or sets the tooltip text for the search filter + Returns the tooltip text for the search filter. + + + Represents an enumerated set of search filters for use by the search control for window search. + + + Creates a new instance of an enumerated set of search filters for use by the search control for window search. + The collection of search filters. + + + Creates a new enumerated set of search filters that has the same state as this one. + Pointer to the new search filter enumerator. + + + Retrieves a specified number of search filters from the enumerated set. + Returns S_OK if the method is successful; otherwise, returns S_FALSE. + The number of search filters requested. + Array of size (or larger) of search filters. + Pointer to the number of search filters actually returned in . If is 1, can be null. + + + Resets the search filters enumerator to the beginning. + + + Skips a specified number of search filters in the enumerated sequence. + Returns S_OK if the number of filters skipped is ; otherwise, returns S_FALSE. + The number of search filters to be skipped. + + + Represents an option for use by the search control for window search. + + + Creates a new instance of a search option for use by the search control for window search. + The display text for the search option + The tooltip text for the search option + + + Gets or sets the display text for the search option. + Returns the display text. + + + Gets or sets the tooltip for the search option. + Returns the tooltip. + + + Represents an enumerated set of search options for use by the search control for window search. + + + Creates a new instance of an enumerated set of search options for use by the search control for window search. + The collection of search options. + + + Creates a new enumerated set of search options that has the same state as this one. + Pointer to the new search option enumerator. + + + Retrieves a specified number of search options from the enumerated set. + Returns S_OK if the method is successful; otherwise, returns S_FALSE. + The number of search options requested. + Array of size (or larger) of search options. + Pointer to the number of search options actually returned in . If is 1, can be null. + + + Resets the search options enumerator to the beginning. + + + Skips a specified number of search options in the enumerated sequence. + Returns S_OK if the number of options skipped is ; otherwise, returns S_FALSE. + The number of search options to be skipped. + + + Represents a search filter with a default value and a filter field for use by the search control for window search. + + + Creates a new instance of a search filter with a default value and a filter field for use by the search control for window search. + The display text for the search filter. . Must be non-whitespace. + The tooltip text for the search filter. . Must not be an empty string. + The filter field for the search filter. Must not be an empty string. + The default value for the search filter. Must not be an empty string. + + + Gets or sets the default filter value for the search filter. + Returns the default filter value for the search filter. + + + Gets or sets the filter field value for the search filter. + Returns the filter field value for the search filter. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The component being activated, or null if none. + A value indicating if the caller of the is being activated. + The activating components info, if any. + A value indicating whether the component host is activating. + The host info, if any. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + True if the host application is gaining activation, false otherwise. + If is true this represents the thread ID if the thread that owns the window being deactivated. If it is false it is the thread ID of the thread that owns the window that is being activated. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The object that holds the serialized object data. + The contextual information about the source or destination. + + + Microsoft internal use only. + The message that describes the exception. The caller of this constructor is required to ensure that this string has been localized for the current system culture. + + + Microsoft internal use only. + The message that describes the exception. The caller of this constructor is required to ensure that this string has been localized for the current system culture. + The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The object that holds the serialized object data. + The contextual information about the source or destination. + + + Microsoft internal use only. + The message that describes the exception. The caller of this constructor is required to ensure that this string has been localized for the current system culture. + + + Microsoft internal use only. + The message that describes the exception. The caller of this constructor is required to ensure that this string has been localized for the current system culture. + The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only.. + + + Microsoft internal use only. + + + Microsoft internal use only. + The MSO flags that indicate what kind of idle tasks the user should perform. Exposed through the property. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Throws this if is null. + Can throw this exception if returns FALSE (0) from . + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + for which messages will be pumped. + Delegate to use to continue / cancel pumping. If null, will always continue pumping. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The reason given by the caller of . + Private data provided by the caller of . + The message from the queue, or null if there was none. + + + Microsoft internal use only. + A group of bit flags that indicate what type of tasks to perform (maps directly to . + + + Microsoft internal use only. + The object to pre-translate. + + + Microsoft internal use only. + A value indicating whether user prompting should occur if necessary. + + + Microsoft internal use only. + + + Microsoft internal use only. + The type of window to retrieve, maps directly to a value in . + Reserved for future use and should be zero + + + Microsoft internal use only. + If non-NULL, then this is the component that is being activated. + True if is the component that called this method. + + of if is non-null. + If is null and this is TRUE (1) it indicates the host is activating. If is null and this is FALSE (0) then there is no current active object. + If is TRUE (1) then this is the hosts , otherwise this is null. + Reserved for future use, should be 0. + + + Microsoft internal use only. + If TURE (1), the host app is being activated, if FALSE (0) the host app is being deactivated. + If is TRUE (1) then this is the thread ID of the thread owning the window being deactivated. If is FALSE (0) this is the thread ID of the thread owning the window being activated. + + + Microsoft internal use only. + The state being entered or exited, maps directly to + If the value is TRUE (1) then we are entering the state described by otherwise we are exiting it. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + Reason of the message loop. + Private data for the loop. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + The object given to + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + A value indicating if the component should prompt the user for a termination decision, if necessary. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Microsoft internal use only. + + + Represents the settings stored in Visual Studio. + + + + Returns the folder that Visual Studio uses for storing various files such as cache files, backup files, and template files. + The full path of the requested folder. + The requested folder. + + + Outputs the scopes that contain the given collection. + The enclosing scopes. + The path of the collection to be searched. + + + Returns the list of folders that Visual Studio uses to install or look for machine-wide extensions. + + + Outputs the scopes that contain the given property. + The enclosing scopes. + The path of the collection of the property. + The name of the property to be searched. + + + Provides the class for the requested scope which can be used for read-only operations. + A instance that can be used to access the scope. + The requested scope. + + + Provides the class for the requested scope which can be used for reading operations and writing operations. + A instance that can be used to access the scope. + The requested scope. + The given scope is not writable. + + + This enumeration is used to specify the scope of the settings that is retrieved from the SettingsManager class. + + + Denotes the installation specific configuration scope. This scope is read-only to the users. + + + Denotes the user-configurable user settings scope. + + + Data types of the properties that are stored inside the collections. + + + Invalid data type. + + + Data type used to store 4 byte (32 bits) properties which are Boolean, Int32 and UInt32. + + + Data type used to store 8-byte (64-bit) properties which are Int64 and UInt64. + + + Data type used to store the strings. + + + Data type used to store byte streams (arrays). + + + Abstract class for both reading and writing the selected scope's collections and properties. It is obtained from method. + + + + Creates the given collection path by creating each nested collection while skipping the ones that already exist. + Path of the collection. + If empty string ("") which deis passed to the method it throws this exception. + + + Deletes the given collection recursively deleting all of the sub-collections and properties in it. If the collection does not exist or an empty string ("") is passed then the method returns false. + Path of the collection to be deleted. + + + Deletes the given property from the collection. If the property or the collection does not exist then the method returns false. + Collection that contains the property to be deleted. + Name of the property. + + + Updates the value of the specified property to the given Boolean value while setting its data type to . + Path of the collection of the property. + Name of the property. + New value of the property. + If the collection does not exist, this exception is thrown. + + + Updates the value of the specified property to the given integer value while setting its data type to . + Path of the collection of the property. + Name of the property. + New value of the property. + If the collection does not exist, this exception is thrown. + + + Updates the value of the specified property to the given long value while setting its data type to . + Path of the collection of the property. + Name of the property. + New value of the property. + If the collection does not exist, this exception is thrown. + + + Updates the value of the specified property to the bits of the MemoryStream while setting its data type to . + Path of the collection of the property. + Name of the property. + MemoryStream to set the bits of the property. + If the collection does not exist, this exception is thrown. + + + Updates the value of the specified property to the given string value while setting its data type to . + Path of the collection of the property. + Name of the property. + New value of the property. + If the collection does not exist, this exception is thrown. + + + Updates the value of the specified property to the given unsigned integer value while setting its data type to . + Path of the collection of the property. + Name of the property. + New value of the property. + If the collection does not exist, this exception is thrown. + + + Updates the value of the specified property to the given unsigned long value while setting its data type to . + Path of the collection of the property. + Name of the property. + New value of the property. + If the collection does not exist, this exception is thrown. + + + Provides methods for logging messages to the . + + + Logs an error message in the activity log with the given source. + A name associated with the source contributing the message. + The message to be written to the activity log. + + + Gets the path to the activity log for the current application. + The log file path + + + Logs an information message in the activity log with the given source. + A name associated with the source contributing the message. + The message to be written to the activity log. + + + Logs a warning message in the activity log with the given source. + A name associated with the source contributing the message. + The message to be written to the activity log. + + + Specifies the results of the close operation. + + + The close operation completed successfully. + + + The close operation did not complete because the user cancelled the PromptSave dialog, and therefore the document remained open. + + + Adds a custom file generator registry entry for a specific file type. + + + Initializes a new instance of the class. Creates a new CodeGeneratorRegistrationAttribute attribute to register a custom code generator for the provided context. + Type of the code generator. This parameter is a type that implements . + Generator name. + Context GUID under which this code generator would appear. + The , , or is set to null. + + + Gets the GUID representing the project type. + + + Gets or sets the GeneratesDesignTimeSource registry value. + + + Gets or sets the GeneratesSharedDesignTimeSource registry value. + + + Get the GUID representing the generator type. + + + Gets the generator name. + + + Gets or sets the generator registry key name. + + + Gets the generator type. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Unregisters the code generator with the given context. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Allows callers to block the current thread until a handle or handles have been signaled. + + + Initializes a new instance of . + + + Determines whether the wait dialog has an enabled cancel button. + true if the wait dialog has an enabled cancel button, otherwise false. + + + Gets the current step for the progress control of the wait dialog. + The current step for the progress control of the wait dialog. + + + Determines the type of progress control to use in the wait dialog. + true indicates a percentage progress, false indicates a marquee-type progress + + + Called during each iteration of a message loop. + false (0) if the wait was canceled, otherwise true (1). + The reason given by the originator of the message. + Private data provided by the caller. + The message from the queue, or null if there was none. + + + Does idle processing. + Always returns 0. + Flags from the enumeration. + + + Handles the message. + Always returns 0. + The message. + + + Called when the component manager wishes to know whether the component is in a state in which it can terminate. + Always returns 1. + true if the component should prompt the user if it needs to terminate, false if it should not prompt the user. + + + Reserved. + Always returns true. + Reserved. + Reserved. + Reserved. + Reserved. + + + Gets the wait handles and the timeout value. + If the method succeeds, it returns . If it fails, it returns an error code. + The handles. + [out] The number of handles returned. + [out] The timeout. + The loop data. + + + Gets the associated window. + Always returns . + A value from . + Reserved. + + + Called when a new object is being activated. + An , or null. + true if is the same component as the callee of this method, otherwise false. + An array of structures, which represent registry information for . + true if the host is being activated, otherwise false. + An array of structures, which represent host information. + Reserved. + + + Called when an application is being activated or deactivated. + true if the application is being activated, otherwise false. + If the host application is being activated, the ID of the thread that owns the window being deactivated. If the host application is being deactivated, the ID of the thread that owns the window being activated. + + + Called when the environment has entered or left a state. + A member of . + true if the state is being entered, false if the state is being exited. + + + Called when a wait handle has been signaled. + If the method succeeds, it returns . If it fails, it returns an error code. + The index of the handle that was signaled. + The data. + [out] true if the component re-entered the message loop, or false if it exited the message loop immediately + + + Called when the component has lost its active status because the host or another component has become active. + + + Called when there is a timeout on a message loop. + If the method succeeds, it returns . If it fails, it returns an error code. + The data object. + true to have this component re-enter the message loop, false to exit the message loop immediately. + + + Terminates the message loop. + + + Called during each iteration of a message loop. + true if the message loop should continue, false otherwise. If false is returned, the component manager terminates the loop without removing from the queue. + The representing the reason. + The component data that was sent to . + The peeked message (from PeekMessage). + + + Gives the component a chance to do idle time tasks. + true if more time is needed to perform the idle time tasks, false otherwise. + A set of flags indicating the type of idle tasks to perform, from . + + + Processes the message before it is translated and dispatched. + true if the message is consumed, false otherwise. + The message. + + + Called when the component manager wishes to know if the component is in a state in which it can terminate. + true if it is possible to terminate, otherwise false. + true if the user should be prompted, otherwise false. + + + Reserved. + Always returns true. + Reserved. + Reserved. + Reserved. + Reserved. + + + Retrieves a window associated with the component. + The HWND, or null if no such window exists. + A value from . + Reserved for future use. Should be 0. + + + Notifies the component when a new object is being activated. + The component that is being activated + true if is the same as the callee of this method, otherwise false. + The component registration information. + true if the host that is being activated, otherwise false. + The OLE host information. + Reserved. + + + Notifies the component when the host application gains or loses activation. + True if the application is being activated, false if it is losing activation. + The ID of the thread that owns the window. + + + Notifies the component when the application enters or exits the specified state. + The state, from . + true if the application is entering the state, false if it is exiting the state. + + + Notifies the active component that it has lost its active status because the host or another component has become active. + + + Terminates the message loop. + + + Determines the kind of progress to be displayed + If the method succeeds, it returns . If it fails, it returns an error code. + True if the progress dialog shows a percent control, false to show a marquee-style control. + + + Blocks the current thread by pumping messages until either a timeout or one of the specified handles has been signaled. + If the method succeeds, it returns . If it fails, it returns an error code. + The array of handles to wait on. + The number of handles. + [out] The index to the signaled handle, or WAIT_TIMEOUT if the wait timed out. + + + Blocks the current thread by pumping messages until either a timeout or one of the specified handles has been signaled. + If the method succeeds, it returns . If it fails, it returns an error code. + Array of handles to wait on. + Count of handles + The caller implementation of . + + + Determines whether the wait dialog has an enabled cancel button. + If the method succeeds, it returns . If it fails, it returns an error code. + true if the wait dialog has an enabled cancel button, otherwise false. + + + Sets progress information for the message. + If the method succeeds, it returns . If it fails, it returns an error code. + The total number of steps for progress control. + The current step. A value between 1 and . + Describes the current step. + + + Sets the text of the status bar during the wait. + If the method succeeds, it returns . If it fails, it returns an error code. + The status bar text. + + + Sets the timeout value for the modal wait. + If the method succeeds, it returns . If it fails, it returns an error code. + The timeout value. Use 0xFFFFFFFF for an infinite wait. + + + Sets the wait dialog text. + If the method succeeds, it returns . If it fails, it returns an error code. + The wait text. + + + Sets the title of the wait dialog with the specified title. + If the method succeeds, it returns . If it fails, it returns an error code. + The title. + + + Blocks the current thread by pumping messages until either a timeout or the specified handle has been signaled. + The exit code. + The wait handle. + + + Blocks the current thread by pumping messages until either a timeout or one of the specified handles has been signaled. + The exit code. + The wait handles. + Caller implementation of . + + + Blocks the current thread by pumping messages until either a timeout or one of the specified handles has been signaled. + The exit code. + The handles + [out] The index to the handle that was signaled. + + + Gets the progress text. + The progress text. + + + Gets or sets the text of the status bar during the wait. + The text of the status bar during the wait. + + + Gets or sets the timeout value for the modal wait. + The timeout value for the modal wait. + + + Gets the total number of steps for the progress control of the wait dialog. + The total number of steps for the progress control of the wait dialog + + + Gets or sets the wait dialog text. + The wait dialog text. + + + Gets or sets the title of the wait dialog. + The title of the wait dialog. + + + Represents exit codes that are possible for . + + + There was a timeout. + + + The message was canceled by the user. + + + The application exited. + + + The handle was signaled. + + + Adds the property page registration for a component picker. + + + Initializes a new instance of the class. + Type of package that provides the page. + Page type that needs to be registered. + Registry key name for the page. + + + Gets or sets the AddToMru value. + + + Gets or sets the component type value. + + + Gets or sets the default page name value. + + + Gets the package GUID. + + + Gets the GUID representing the property page. + + + Gets the property page register key name. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets or sets the Sort registry value. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Provides miscellaneous methods that can be used when interacting with unmanaged code (COM objects) or interop types. + + + Gets a .NET-style enumerator (IEnumerable<>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Gets a .NET-style enumerator (IEnumerable<>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Gets a .NET-style enumerator (IEnumerable<Guid>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Gets a .NET-style enumerator (IEnumerable<>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Gets a .NET-style enumerator (IEnumerable<>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Gets a .NET-style enumerator (IEnumerable<>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Gets a .NET-style enumerator (IEnumerable<string>) from the specified Visual Studio COM enumeration interface. + The .NET-style enumerator. + The Visual-Studio COM enumeration (). + + + Verifies that the specified objects represent the same instance of an object. This method essentially compares the IUnknown pointers of the two objects, which is needed in scenarios where aggregation is involved. + true if the two items represent the same thing, false otherwise. + The first item to compare. This parameter can be an object, interface or IntPtr. + The second item to compare. This parameter can be an object, interface or IntPtr. + + + Retrieves the IUnknown for the specified managed or COM object. + Pointer to the IUnknown interface of the object. + Managed or COM object. + + + Defines the default registry root used to register VSPackage information. This class cannot be inherited. + + + Initializes a new object with the given registry root. + The default registry root used to register VSPackage information. + The constructor throws an if the root argument is null. + + + Gets the value of the default registry root for the VSPackage. + The value of the default registry root for the VSPackage. + + + A specialization of that allows customization of the display name of the property in the property grid. + + + Initializes a new instance of for the specified property descriptor. + + . + + + Determines whether or not resetting the object changes its value. + true if resetting the component changes its value, otherwise false. + The component that owns the property. + + + Gets the component type. + The type of the component. + + + Gets the type converter for the property. + + . + + + Gets the display name for this property. + The display name. + + + Gets an editor of the specified type. + The editor, or null if it cannot be found. + The type of the editor. + + + Converts the name to a . + + . + The name of the type. + + + Gets the value of the property. + The value of the property. + The component that owns the property. + + + Gets whether or not the property is read-only. + true if the property is read-only, otherwise false. + + + Gets the type of the property. + The type of the property. + + + Resets the value to the default value. + The component that owns the property. + + + Sets the value of the property to the specified value. + The component that owns the property. + The value to set. + + + Determines whether or not the property's value should be persisted. + true if the property should be persisted, otherwise false. + The component that owns the property. + + + Use this class to implement modal forms in Visual Studio. The implementation enables the form to host a Visual Studio command bar so that it participates in standard command routing. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and sets the service provider. + The service provider that the window can subsequently query to retrieve Visual Studio services. + + + Initializes a new instance of the class and sets the service provider and the control that is contained by the form. + The service provider that the window can subsequently query to retrieve Visual Studio services. + The control that is contained by the form. + + + Initializes a new instance with its contained control, and an implementation that is in addition to the one owned by the . + The . + The that is to be contained. + The parent . + + + Returns the command service that is used to check the status or execute the commands on the toolbar. + + . + + + Explicitly called to release resources. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Returns the border information for a tool window. + If the method succeeds, it returns S_OK. If it fails, it returns an error code. + Pointer to the location and size of the tool window border. + + + Stores toolbar information and resizes the main pane to leave room for the command bar. + If the method succeeds, , otherwise an error code. + The new desired bounds. + + + Sets the site for this window. + The service provider. + + + Shows a dialog. + + . + + + Gets the service of the specified type. + An object that represents the requested service. + The type of service requested. + + + Filters mouse messages before they are dispatched. + true if the message was filtered and not dispatched, false if it was dispatched. + A message from the toolbar. + + + A target that allows intercepting drag and drop operations on the toolbar. + If the tool window has a toolbar, this property allows intercepting drag and drop operations on the toolbar. Otherwise this is null. + + + Returns the corresponding . + + . + + + Gets or sets the command ID of the toolbar that is contained in this dialog box. + The command ID of the toolbar that is contained in this dialog box. + + + Gets and sets the value of the enumeration that describes the toolbar location. + The enumeration is defined as follows. Copy Codetypedef enum {VSTWT_LEFT, VSTWT_TOP, VSTWT_RIGHT, VSTWT_BOTTOM} VSTWT_LOCATION;This corresponds to toolbar locations of left, top, right, and bottom. + + + Represents the event arguments used by . + + + Gets the key being pressed within . + + + Provides a standard dialog box functionality for implementing Toolbox property sheets, ToolsOptions pages, or custom UI dialog boxes, with support for the Visual Studio automation model, Windows Forms, and state persistence by using the Visual Studio settings mechanism. + + + Initializes a new instance of . + + + Gets the DTE automation model object for a given instance of a dialog page class. + An instance of the automation object, or null if no automation support is available. + + + Releases the unmanaged resources that are used by a dialog page class and optionally releases the managed resources; the parent class, supports unmanaged resources. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Called by Visual Studio to load the settings of a dialog page from local storage, generally the registry. + + + Called by Visual Studio to load the settings of a dialog page from the Visual Studio settings storage on disk. + [in]An interface that is provided by the environment to the VSPackage to give read access to the Visual Studio settings file. + + + Handles Windows Activate messages from the Visual Studio environment. + [in] Arguments to event handler. + + + Handles Apply messages from the Visual Studio environment. + [in] Arguments to event handler. + + + Handles Close messages from the Visual Studio environment. + [in] Arguments to event handler. + + + Handles Deactive messages from the Visual Studio environment. + [in] Arguments to event handler. + + + Should be overridden to reset settings to their default values. + + + Called by Visual Studio to store the settings of a dialog page in local storage, typically the registry. + + + Called by Visual Studio to store the settings of a dialog page to the Visual Studio settings storage on disk. + [in]A  interface that is provided by the environment to the VSPackage to give write access to the Visual Studio settings file. + + + Gets or sets the sub-key under the Visual Studio version-specific root for storing settings data for a dialog page. + The sub-key of the Visual Studio version-specific registry tree that contain the settings for a given dialog page. + + + Gets or sets the site of the dialog page. Overrides the implementation inherited from . + + . + + + Gets the handle of the window of the dialog page. + A pointer that is the handle of an . + + + Gets the window that is used as the user interface of the dialog page. + An that provides the handle to the window that acts as the user interface for the dialog page. + + + An enumeration that describes dialog page apply behavior. + + + Allows the changes to be applied + + + Cancels the apply event and navigates to the page cancelling the event. + + + Cancels the apply event and returns the active page, not the page canceling the event. + + + Event arguments that allow the method to indicate how to handle the apply event. + + + Initializes a new instance of . + + + Gets or sets the kind of behavior that should take plan on Apply. + + . + + + Adds a file extension for a Project System so the Project will call methods when an item of this type is added or renamed. + + + Initializes a new instance of the class, which registers a file extension with a project. + The type of project. This parameter can be a Type, a GUID, or a string representation of a GUID. + The file extension the is to handle. + The type of factory. This parameter can be a Type, a GUID, or a string representation of a GUID. + + + Gets the object representing the type of the editor factory. + + + Gets the extension of the XML files that supports this view. + + + Gets the object representing the project type. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Provides a generic base class for types that provide an wrapper around COM-style IEnumXXX interfaces. + A COM enumerator type (e.g. IEnumString). + The type of the enumerator. + + + Initializes a new instance of for the provided enumerator. + The enumerator. + + + Initializes a new instance of for the provided enumerator and cache size. + The enumerator. + The cache size. + + + Clones the item with the specified enumerator . + If the method succeeds, it returns . If it fails, it returns an error code. + The enumerator. + [out] The cloned item. + + + The default cache size. + + + Gets the enumerator. + The enumerator. + + + Gets the specified number of items. + If the method succeeds, it returns . If it fails, it returns an error code. + The enumerator + The number of items to get. + An array of items. + [out] The number of items that were returned. + + + Resets the counter of the collection. + If the method succeeds, it returns . If it fails, it returns an error code. + The enumerator. + + + Skips the specified number of items. + If the method succeeds, it returns . If it fails, it returns an error code. + The enumerator. + The number of items to skip. + + + Gets the enumerator. + The enumerator. + + + Provides a base class that supports a simple iteration over a hierarchy collection. + + + Initializes a new instance of the class. + The Visual Studio-style enumerator that contains the collection. + + + Clones the item with the specified enumerator. + The enumerator. + [out] The cloned item. + + + Gets the specified number of items. + The enumerator. + The number of items to get. + An array of items. + [out] The number of items that were returned. + + + Resets the counter of the collection. + The enumerator. + + + Skips the specified number of items. + The enumerator. + The number of items to skip. + + + This task provider is used to provide tasks for the Visual Studio Error List window. + + + Creates an ErrorListProvider object. + + object. + + + Activates the Error List window and makes it visible. + + + Activates the Error List window and makes it visible. + Parameter is set to true if the task list can be disposed, that is, if the contains tasks. + + + Destructor for ErrorListProvider. + + + Shows the errors in the Error List window. + + + Creates a Error List tool window and shows the errors in it. + + + Returns the service that allows VSPackage implementers to store and manage their tasks as a part of the environment's task list. + Returns an object. + + + Represents an error task on the Task List. This class implements . + + + Initializes a new instance of an . + + + Initializes a new instance of an for the specified error. + + . + + + Gets or sets the error category of this task. + + . + + + Gets or sets the hierarchy item associated with this task. + The item associated with the task. + + + Gets the category of the error. + + . + [out] Returns the . + + + Gets the hierarchy node associated with the task. + + . + [out] Returns the interface of the node associated with this task. + + + Maps objects to and from event "cookies" that represent a client's registration with an event provider. + + + Initializes a new instance of an object. + + + Adds an event and returns its cookie. + The cookie of the added event. + An object to be added to the event collection. + + + Removes all event cookies. + + + Gets the total number of event cookies in the collection. + The number of cookies in the collection. + + + Gets or sets the specified cookie from the collection. + The cookie. + The cookie to get. + + + Removes the specified event cookie from the collection. + The event cookie to be removed. + + + Removes the event cookie. + The event cookie. + + + Updates the event associated with the given cookie. + A cookie specifying an event. + The value to which the event sink is set. + + + Microsoft Internal Only. + Returns an . + + + Represents an extended version of the base class that implements . + + + Initializes a new instance of the class. + + + Creates the diagnostics provider for the given registered provider GUID. + The requested diagnostics provider. + GUID of the requested diagnostics provider. + The requested provider was not found. + The requested provider does not implement the interface. + + + Creates an extension point. + The requested extension point or null on failure. If null is returned, the package will throw an to its caller. + The requested extension point type. + Instance identifier of the requested extension point. + + + Creates the extension provider declared with the attribute on the package, implementing an extension point of type . + The requested extension provider. + GUID of the requested extension provider. + The attribute of the package. + The extension point. + The requested provider was not found. + The requested provider does not implement the interface. + + + Creates the global search provider for the given registered provider GUID. + The requested search provider. + GUID of the requested search provider. + The requested provider was not found. + The requested provider does not implement the interface. + + + Creates an instance of the requested extension. + The requested extension point instance. + Type of extension point. + Instance identifier of the requested extension point. + + + Registers an extension point provider of the type specified by derived classes such as . + + + Initializes a new instance of the class. + The type implementing the generic's argument extension. + A short, non-localized human-readable name of the provider. + + + Gets the path in registry where the extension providers are declared. Overridden in derived classes. + + + Gets the type of the extension provider the interface implemented. + + + Gets the human-readable name of the extension point provider. + + + Gets the provider’s GUID. + + + Gets the provider’s GUID expressed as a string. + + + Gets the type that implements the associated extension point in this package. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Facilitates deterministic restoration of an . + + + Initializes a new instance of the class. + The hierarchy manipulation state, typically specified with flags. + + + Performs application-defined tasks associated with freeing, releasing, or resetting managed resources. + + + Base class which implements some of the boilerplate parts of an . + + + Initializes a new instance of the class. + + + Creates a new filter for the given collection of root hierarchy items. + A HierarchyTreeFilter instance that can be applied to the tree to control which items are included in the tree's filtered subset. + + + Creates a new filter for the specified collection of root items. + An instance that can be applied to the tree to control which items are included in the tree's filtered subset. + The current collection of root items in the tree. + + + Determines whether this type of filter is supported when the specified collection of items is at the root of the tree. + true if the filter is supported, otherwise false. + The current collection of root items in the tree. + + + Base class that implements some of the boilerplate parts of an ISolutionTreeFilter. This includes behavior to ensure newly-added hierarchy items are always visible through the filtered view, even if those items do not match the filter. Derived types must still implement the logic for constructing the set of included items. + + + Initializes a new instance of the class. + + + Gets a CancellationToken that will be cancelled when this filter is disposed. + The CancellationToken. + + + Allows derived classes to provide custom dispose handling for managed resources. + + + Indicates whether to include descendants if none are explicitly specified. + Whether to exclude or include descendants by default. + The item for which to decide. + + + Asynchronously initializes and returns the set of items that are included by the filter. + A task that represents the asynchronous included items initialization. + The current collection of root hierarchy items in the tree. + + + Gets the set of items that are included by the filter. + The set of items that are included by the filter. + + + Occurs when initialization of the component is completed. + + + Gets a value indicating whether the component is initialized. + true if the component is initialized, otherwise false. + + + Occurs when a property value changes. + + + Signals the object that initialization is starting. + + + Signals the object that initialization is complete. + + + Provides typed enumeration methods. + A COM enumerator type (e.g. IEnumString). + The type of the enumerator. + + + Clones the enumerator. + The enumerator. + [out] The cloned enumerator. + + + Gets the next chunk of items. + The enumerator. + The number of items. + The array of items. + [out] The number of items fetched. + + + Resets the enumerator. + The enumerator. + + + Skips the specified number of items. + The enumerator. + The number of items to skip. + + + Provides the ability to configure objects dynamically by adding additional data to the toolbox item's Properties dictionary. This data is then serialized as a permanent part of the toolbox item. + + + Called by the toolbox service to configure objects. + [in] The object whose configuration is to be modified. + + + Provides information for the Visual Studio splash screen and the Help About dialog box when applied to a -derived class or a class that implements . This class cannot be inherited. + + + Initializes a new InstalledProductRegistrationAttribute instance for the specified product. + true if the package implements the interface to collect and display the information, otherwise false. + The name of the product. + The detailed description of the product. + The product ID. + + + Initializes a new instance of with the specified product information. + The product name. + The product details. + The product ID. + + + Initializes a new instance of the specified product details.. + The product name. + The product details. + The product ID. + Reserved for Microsoft internal use. + + + Gets or sets the resource ID of the icon associated with the product. + The resource ID of the icon associated with the product. + + + Gets or sets the (non-localized) name of the product. + The (non-localized) name of the product. + + + Gets or sets the detailed description of the product. + The detailed description of the product. + + + Gets or sets the product details resource ID. + The product details resource ID. + + + Gets or sets the product ID. + The ID of the product. + + + Gets or sets the name of the product. + The name of the product. + + + Gets or sets the resource ID of the product name. + The product name resource ID. + + + Registers information about a VSPackage when called by an external registration tool such as regpkg.exe. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + is null. + + + Removes the registration information about a VSPackage when called by an external registration tool such as regpkg.exe. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Gets or whether the package implements the interface to display a bitmap in the splash screen and information in the About dialog box on the Help menu. + The value is true if the product installation implements the interface and false otherwise. + + + Gets or sets whether the product installation uses the package ID. + The value is true if the product installation uses the package ID, and false otherwise. + + + Determines whether the product ID is the same as the Visual Studio ID. + true if the product ID is the same as the Visual Studio ID, otherwise false. + + + Supplies information about an existing toolbox item. + + + Initializes a new instance of the class. + Full hierarchical type name of the item. + Assembly name of the item. + Strings to display in the dialog’s “custom” columns. + The or parameters are null. + + + Gets the assembly name of the item. + + + Gets the strings to display in the dialog’s “custom” columns, or null if no custom properties are needed. + + + Gets the full hierarchical type name of the item (not including the assembly name). + + + Interface implemented by classes supporting VSPackages by persisting their state information through the Visual Studio settings mechanism. + + + Reads a VSPackage's configuration from local storage (typically the registry) and updates its state. + + + Writes a VSPackage's configuration to disk using the Visual Studio settings mechanism when the export option of an Import/Export Settings feature available on the IDE’s Tools menu is selected by a user. + [in] An  interface provided by the environment to the VSPackage providing read access to the Visual Studio settings file. + + + Resets the user settings. + + + Writes a VSPackage's configuration to local storage (typically the registry) following state update. + + + Writes a VSPackage's configuration to disk using the Visual Studio settings mechanism when an import option of the Import/Export Settings command on the IDE’s Tools menu is selected by a user. + [in] An  interface provided by the environment to the VSPackage providing write access to the Visual Studio settings file. + + + Supports the migration of user settings from one version of Visual Studio to another. + + + Migrates the settings with the specified settings reader and settings writer. + The settings reader. + The settings writer. + + + An abstraction layer that lets clients control the resx readers and writers used within Visual Studio. + + + Returns a resx resource reader given a and name. + + . + The that is wrapped by the returned . + If this value is true the reader returns one or more s instead of the object type the resource becomes at runtime in order to figure out which files the resx references + The path of the resource file. + + + Returns a resx resource reader that matches a given a . + + . + Creates a reader for the specified file. + If this value is true the reader returns one or more s instead of the object type the resource becomes at runtime in order to figure out which files the resx references + + + Returns a resx resource writer given a and . + + . + The that is wrapped by the returned . + The path of the resource file. + + + Returns a resx resource writer given resXFullName. + + . + Creates a reader for the specified file. + + + Supplies predefined, well-known color themes. + + + + The color theme used for debugging the theme color service. Each color name is mapped to a neon color to make it easy to inspect colors usage that is not from the theme color service. + + + The color theme used when the Windows theme is set to one of the high-contrast Windows themes. + + + + Supplies predefined, well-known UI contexts. + + + Gets a UI context indicating that the Application Designer is active. + + + Gets a UI context indicating that a project load operation is occurring in the background, and should not present any UI prompts to the user. + + + Gets a UI context indicating that a code window is active. + + + Gets a UI context indicating that a C# project is active. + + + Gets a UI context indicating that a solution is being debugged. + + + Gets a UI context indicating that the environment is in design mode (that is, not debugging). + + + Gets a UI context indicating that a drag-drop operation in the Solution Explorer is in progress. + + + Gets a UI context indicating that a solution is loaded, but has no projects. + + + Gets a UI context indicating that this is the first launch after setup. + + + Gets a UI context indicating that an F# project is active. + + + Gets a UI context indicating that the environment is in full screen mode. + + + Gets a UI context indicating that IntelliTrace (historical debugging) is active. + + + Gets a UI context indicating that no solution is loaded. + + + Gets a UI context indicating that the environment is neither building nor debugging a solution. + + + Gets a UI context indicating that the current operating system is Windows 8. + + + Gets a UI context indicating that a project's target framework is being changed. + + + Gets a UI context indicating that the Property Page Designer is active. + + + Gets a UI context indicating that the RESX designer is active. + + + Gets a UI context indicating that the Settings Designer is active. + + + Gets a UI context indicating that a solution is being built. + + + Gets a UI context indicating that a solution is fully loaded. + + + Gets a UI context indicating that a solution is loaded, and the environment is neither building nor debugging it. + + + Gets a UI context indicating that a solution is loaded. + + + Gets a UI context indicating that a solution with at least one app container project is loaded. + + + Gets a UI context indicating that a solution with more than one project is loaded. + + + Gets a UI context indicating that a solution with exactly one project is loaded. + + + Gets a UI context indicating that a solution is about to be opened. + + + Gets a UI context indicating that a solution or project is being upgraded. + + + Gets a UI context indicating that the standard previewers (browsers) configuration is changing, either browsers are added or removed, or the default browser(s) changed. + + + Gets a UI context indicating that the toolbox has been initialized. + + + Gets a UI context indicating that the toolbox is visible. + + + Gets a UI context indicating that a Visual Basic project is active. + + + Gets a UI context indicating that a Visual C++ project is active. + + + + provides a class that supplies custom type information on localizable properties for an object. + + + This default constructor creates a object. + + + Returns a wrapper on the given property descriptor. + Returns a . + Property descriptor. + + + Gets a collection of attributes for this component. + Returns a collection of attributes. + + + Returns the class name of this object. + A string containing the class name. + + + Returns the name of this object. + A string containing the component name. + + + Returns a type converter for this object. + Returns a . + + + Returns the default event for this object. + Returns an . + + + Gets the default property for a component. + Returns a . + + + Retrieves the editor for this object. + Returns the editor object. + A that represents the base type of the editor you want to find. + + + Gets the collection of events for a specified component. + An with the events for this component. + + + Gets the collection of events for a specified component using a specified array of attributes as a filter. + An with the events that match the specified attributes for this component. + An array of type to use as a filter. + + + Gets the collection of properties. + Returns a . + + + Returns the properties for selected object using the attribute array as a filter. + Returns a . + An array of type to use as a filter. + + + Returns the brows-able object. + Returns the browsable object. + + object. + + + Specifies the localizable display name for a property, event, or public void method which takes no arguments. + + + Initializes a new instance of for the specified name. + The name to localize. + + + Gets the localized display name. + The localized display name. + + + This enumeration lists the supported logical views. + + + The corresponding GUID value is 00000000-0000-0000-0000-000000000000. + + + The corresponding GUID value is FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF. + + + The corresponding GUID value is 7651A700-06E5-11D1-8EBD-00A0C90F26EA. + + + The corresponding GUID value is 7651A701-06E5-11D1-8EBD-00A0C90F26EA. + + + The corresponding GUID value is 7651A702-06E5-11D1-8EBD-00A0C90F26EA. + + + The corresponding GUID value is 7651A703-06E5-11D1-8EBD-00A0C90F26EA. + + + The corresponding GUID value is 7651A704-06E5-11D1-8EBD-00A0C90F26EA. + + + The corresponding GUID value is 80A3471A-6B87-433E-A75A-9D461DE0645F. + + + Defines the Windows Installer component ID. The component ID is used by the Windows Installer to indicate the installation path to the VSPackage. + + + This constructor creates a new MsiComponentIdAttribute object. + The Windows Installer component ID. The MSI component registration ID is used to indicate the installation path to the component within the Windows Installer. + + + The Id property returns a string containing the Windows Installer component registration ID. + Returns a string containing the Windows Installer component registration ID. + + + Defines a token string for the MSI installer. + + + Creates an MsiTokenAttribute object. + Name of the MsiTokenAttribute. + Value of the MsiTokenAttribute. + + + Returns the MsiTokenAttribute name. + Returns a string containing the MsiTokenAttribute name. + + + Returns the MsiTokenAttribute value. + Returns a string containing the MsiTokenAttribute value. + + + Facilitates deterministic restoration of an . + + + Initializes a new instance of the class. + State used for the next document to be opened. + Reason the state is being set (typically this is a tool window or language service GUID). + + + Disposes of the native resources. + + + Provides a managed class that implements the IOleDataObject interface. + + + Initializes a new instance of . + + + Initializes a new instance of for the specified object implementing . + The underlying . + + + Initializes a new instance of for the specified . + The underlying . + + + Initializes a new instance of for the specified . + The underlying . + + + Establishes a connection between the data object and a caller object implementing . + If the method succeeded, , otherwise an error code. + Pointer to a FORMATETC structure that defines the format, target device, aspect, and medium that will be used for future notifications. For example, one sink may want to know only when the bitmap representation of the data in the data object changes. Another sink may be interested in only the metafile format of the same object. Each advise sink is notified when the data of interest changes. This data is passed back to the advise sink when notification occurs. + DWORD that specifies a group of flags for controlling the advisory connection. Valid values are from the enumeration ADVF. However, only some of the possible ADVF values are relevant for this method. + Pointer to the interface on the advise sink that will receive the change notification. + Pointer to a DWORD token that identifies this connection. You can use this token later to delete the advisory connection (by passing it to DUnadvise. If this value is zero, the connection was not established. + + + Terminates an advise connection previously established through DAdvise. + DWORD token that specifies the connection to remove. Use the value returned by DAdvise when the connection was originally established. + + + Creates an enumerator to iterate through the current advisory connections. + If the method succeeded, , otherwise an error code. + Address of * pointer variable that receives the interface pointer to the new enumerator object. If the implementation sets * to NULL, there are no connections to advise sinks at this time. + + + Creates an enumerator to iterate through the structures supported by the data object. + If the method succeeded, , otherwise an error code. + Direction of the data through a value from the enumeration . + Address of * pointer variable that receives the interface pointer to the new enumerator object. + + + Retrieves a structure that is logically equivalent to one that is more complex. + If the method succeeded, , otherwise an error code. + Pointer to the structure that defines the format, medium, and target device that the caller would like to use to retrieve data in a subsequent call such as GetData. The TYMED member is not significant in this case and should be ignored. + Pointer to a structure that contains the most general information possible for a specific rendering, making it canonically equivalent to . + + + Transfers data from the data object to the client. The parameter must specify a storage medium type of . + Pointer to the structure that defines the format, medium, and target device to use when passing the data. + Pointer to the STGMEDIUM structure that indicates the storage medium containing the returned data through its tymed member, and the responsibility for releasing the medium through the value of its punkOuter member. + + + Transfers data from the data object to the client. The client must allocate the structure. + Pointer to the structure that defines the format, medium, and target device to use when passing the data. Only one medium can be specified in the tymed member of the FORMATETC structure. These values are valid:TYMED_STORAGETYMED_STREAMTYMED_HGLOBALTYMED_FILE + Pointer to the structure that defines the storage medium containing the data being transferred. + + + Determines whether the data object supports a particular structure for transferring data. + If the method succeeded, , otherwise an error code. + Pointer to the structure that defines the format, medium, and target device to use when passing the data. Only one medium can be specified in the tymed member of the FORMATETC structure. These values are valid:TYMED_STORAGETYMED_STREAMTYMED_HGLOBALTYMED_FILE + + + Transfers data from the client to the data object. + Pointer to the structure that defines the format, medium, and target device to use when passing the data. Only one medium can be specified in the member of the FORMATETC structure. These values are valid:TYMED_STORAGETYMED_STREAMTYMED_HGLOBALTYMED_FILE + Pointer to the structure that defines the storage medium containing the data being transferred. The medium must be allocated by the caller and filled in by GetDataHere. The caller must also free the medium. The implementation of this method must always supply a value of NULL for the punkForRelease member of the STGMEDIUM structure to which this parameter points. + If TRUE, the data object called, which implements SetData, owns the storage medium after the call returns. + + + The set of arguments passed to an object when the function is called. + + + Initializes a new instance of the specified in and out parameters. + The input parameters to the command function. + A pointer to the parameter returned by the function. + + + Initializes a new instance of with the specified parameters and options. + The in parameter. + The out parameter. + The set of values. + + + Gets the in parameters to the command. + The in parameters to the command. + + + Gets the execution options for the command. + The execution options. + + + Gets a pointer to the parameter used as output by the command function. + A pointer to the out parameter. + + + Represents a menu command in Visual Studio. + + + Initializes a new instance of for the specified command. + The event handler called to execute the command. + ID of the command. + + + Initializes a new instance of for the specified command. + The event handler called to execute the command. + ID of the command. + The text of the command. + + + Initializes a new instance of for the specified command with the specified invocation and status handlers. + The event handler called to execute the command. + The event handler called when the command's status changes. + ID of the command. + + + Initializes a new instance of for the specified command with the specified invocation and status handlers. + The event handler called to execute the command. + The event handler called when the command's status changes. + ID of the command. + The text of the command. + + + Initializes a new instance of for the specified command with the specified pre-QueryStatus, invocation, and status handlers. + The event handler called to execute the command. + The event handler called when the command's status changes. + Event handler called when a client requests the command status. + ID of the command. + + + Initializes a new instance of for the specified command with the specified pre-QueryStatus, invocation, and status handlers. + The event handler called to execute the command. + The event handler called when the command's status changes. + Event handler called when a client requests the command status. + ID of the command. + The text of the command. + + + Called when a client requests the status of the command. + + + Allows a dynamic item command to match the subsequent items in its list. + true if the dynamic item found a match, otherwise false. + The command ID. + + + Executes the command. + The parameter passed to the command. + + + Executes the command. + The parameter passed to the command. + The parameter returned by the command. + + + Executes the command with the specified parameters and execution options. + The parameter passed to the command. + The parameter returned by the command. + The execution options for the command. + + + Gets or sets the command ID. + The command ID that was most recently used to match this command. + + + Gets the OLE command status code for this menu item. + The flags that represent the OLE command status. The values include members of the enumeration. + + + Gets or sets the description of the parameters of the command. + The description of the parameters of the command. + + + Gets or sets the text for the command. + The text for the command. + + + This class derives from the class and implements . is the managed class used to add handlers for menu commands and to define verbs. + + + Creates a new menu command service. + The service provider that this service uses to obtain other services. If the service is being used with a designer, this should be the service provider for the designer (such as the instance). + + + Creates a new menu command service. + The service provider that this service uses to obtain other services. If the service is being used with a designer, this should be the service provider for the designer (such as the instance). + Allows the service to defer command searching to a parent IOleCommandTarget if the command is not found in this object. + Throws an if is null. + + + Can be used to invoke any command within Visual Studio. + true if the invocation succeeded; otherwise, false. + The command ID of the command to search for and execute. + + + Can be used to invoke any command within Visual Studio. + true if the invocation succeeded; otherwise, false. + The command ID of the command to search for and execute. + The optional command argument. + + + Executes the selected command. + An HRESULT code indicating the success or failure of the call. The following HRESULTs may be returned:ValueDescriptionThe command was successfully invoked.The group GUID did not match the commandID’s Guid property for any command or verb.The group was found, but there is no command or verb with an ID that matches. This is also returned if the OleStatus property of a command that was found returns zero. + The menu group. This implementation maps the group to CommandID.Guid. + The ID code of the command. This implementation maps nCmdId to CommandID.ID. + The number of command options. This implementation ignores this parameter. + The actual command options. This implementation ignores this parameter. + Output data for the command. This implementation ignores this parameter. + + + Sets command status. + An HRESULT code indicating the success or failure of the call. The following HRESULTs may be returned:ValueDescriptionThe command was successfully invoked.The group GUID did not match the commandID’s Guid property for any command or verb.The group was found, but there is no command or verb with an ID that matches. This is also returned if the OleStatus property of a command that was found returns zero. + System.Guid . The menu group. This implementation maps the group to CommandID.Guid. + System.UInt32 . The ID code of the command. This implementation maps nCmdId to CommandID.ID. + Microsoft.OLE.Interop._tagOLECMD[] . A command structure that contains data about the status of the command. + System.IntPtr. A pointer to a text BSTR. If the command is a verb the name of the verb will be filled in here. + + + Called by a menu command when its status has changed. + Signifies that there has been a change in (added or removed) on the related object. + + + Gets or sets the parent command target. + The parent command target. + + + Gets the service provider. + The service provider. + + + Shows the shortcut menu with the given command ID at the given location. + A command ID representing the shortcut menu to show. + The horizontal position, in screen coordinates, of the top, left corner of the shortcut menu. If the shortcut menu does not fit on the screen, the operating system relocates it to fit. + The vertical position, in screen coordinates, of the top, left corner of the shortcut menu. If the shortcut menu does not fit on the screen, the operating system relocates it to fit. + + is null. + + + A delegate used by the class. When you create an instance of the SingleTaskIdleManager class, you pass in this delegate, which is then called at idle time. + + + Provides a managed implementation of the interfaces required to create a fully functional VSPackage. + + + Initializes a new instance of . + + + Adds a user option key name into the list of option keys. + The name of the option key to add. An option key name must not have any periods in it. + + + Gets the root registry key of the current Visual Studio registry hive. + The root of the Visual Studio registry hive. + + + Creates the specified COM object using the Visual Studio's local registry CLSID object. + An instance of the created object. + The CLSID of the object to create. + The interface IID the object implements. + The managed type of the object to return. + + + Enables derived classes to provide an implementation if necessary. + + if successful, otherwise an error code. + The GUID of the tool window that should be created. + + + Creates a tool window of the specified type with the specified ID. + An instance of the requested tool window. + The type of tool window to create. + The tool window ID. This is 0 for a single-instance tool window. + + is null. + + is less than 0. is not derived from type. + + + Releases the resources used by the object. + true if the object is being disposed, false if it is being finalized. + + + Gets the tool window corresponding to the specified type and ID. + An instance of the requested tool window. If is false and the tool window does not exist, null is returned. + The type of tool window to create. + The tool window ID. This is 0 for a single-instance tool window. + If true, the tool window is created if it does not exist. + + is null. + + is not derived from . does not have a public constructor . + + + Gets the window pane corresponding to the specified type and ID, and if no window pane of that type exists creates one if told to do so. + The . + The type of the window to be created. + The instance ID. + true to create a window pane if none exists, otherwise false. + + + Gets the automation object for the VSPackage. + An instance of the automation object, or null if no automation support is available. + The name of the automation object to return. If is null, GetAutomationObject returns the default automation object for the VSPackage. + Thrown by the base implementation of GetAutomationObject. + + + Gets the requested dialog page. + An instance of the requested page. + The type of dialog page to retrieve. + + is null. + + is not derived from . does not have a public constructor. + + + Gets a service proffered globally by Visual Studio or one of its packages. This is the same as calling GetService() on an instance of a package that proffers no services itself. + The service being requested if available, otherwise null. + The type of the service requested. + + + Gets the requested output window. + The interface. Returns null in case of failure. + The GUID corresponding to the pane. (See class for the GUIDs which correspond to output panes.) + The caption to create if the pane does not exist. + + + Returns the locale associated with this service provider. + Returns the locale identifier for the service provider. + + + Gets type-based services from the VSPackage service container. + An instance of the requested service, or null if the service could not be found. + The type of service to retrieve. + + is null. + + + Gets the content of the data format for the specified toolbox item ID and data format. + The content of the data format. + The item ID. + The data format. + + + Called when the VSPackage is loaded by Visual Studio. + + + Executes a specified command or displays help for a command. + This method returns if it succeeds, otherwise an error code. If no instance of can be found, returns . + The GUID specifying the command group to which the command belongs. + The ID of the command. + A pointer to an structure specifying how the command should be executed. + A pointer to a VARIANTARG structure containing input arguments. Can be null. + A pointer to a VARIANTARG structure to receive command output. Can be null. + + + Queries the object for the status of one or more commands generated by user interface events. + + if the method succeeded, otherwise an error code. This method returns if no instance of can be found. + The GUID of the command group to which the command belongs. + The number of elements in the array. In Visual Studio this number is always 1. + An array of structures representing the commands being queried. + A pointer to an structure in which to return name and/or status information for a single command. Can be null to indicate that the caller does not need this information. + + + Internal IServiceProvider implementation. + If the method succeeds, it returns , otherwise it returns an error code. + GUID of the service. + GUID of the requested interface + Pointer to the object requested. + + + Closes and disposes the package. + If the method succeeds, , otherwise an error code. + + + Gets an automation-friendly object for this package. + If the method succeeds, , otherwise an error code. + String containing the automation property name. + [out] Returns the automation object. + + + Proffers access to the Tools menu Options and the property pages of the Customize Toolbox dialog boxes. + If the method succeeds, it returns , otherwise it returns an error code. + Unique identifier of the requested property page. + Specifies the property page whose values are taken from the structure. + + + Called to ask the VSPackage if the Visual Studio shell can be closed. + If the method succeeds, it returns , otherwise it returns an error code. + Set to false if you want to prevent the shell from closing + + + Resets Toolbox defaults. + If the method succeeds, it returns , otherwise it returns an error code. + Flags whose values are taken from the enumeration + + + Initializes the VSPackage in the Visual Studio environment. + If the method succeeds, it returns . If it fails, it returns an error code. + + object. + + + Loads user options for a given solution. + If the method succeeds, it returns . If it fails, it returns an error code. + + object. + User options whose value is taken from the + + + Reads user options for a given solution. + If the method succeeds, it returns . If it fails, it returns an error code. + + object from which the VSPackage should read the user-specific options + Name of the stream. + + + Saves user options for a given solution. + If the method succeeds, it returns . If it fails, it returns an error code. + + object. + + + Writes user options for a given solution. + If the method succeeds, it returns . If it fails, it returns an error code. + + object to which the VSPackage writes the user-specific options. + Name of the stream. + + + Gets an item. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] The Item ID. + [in] The format of the data to return. + [out] The location to which to return a global handle to the item content. This global is owned and should be freed by the caller. + + + Creates a tool window of the specified type with the specified ID. + If the method succeeds, it returns . If it fails, it returns an error code. + Type of the window to be created. + Instance ID + + + This method implements the Interface used to manage profiles and import/export settings to XML files. + If the method succeeds, it returns . If it fails, it returns an error code. + GUID of the page. + + object. + + + Retrieves a VSPackage's configuration using the Visual Studio settings mechanism when a user selects the import option of the Import/Export Settings feature on the IDE’s Tools menu. This method is part of the implementation of the interface used to manage profiles and import/export settings to XML files. + If the method succeeds, it returns . If it fails, it returns an error code. + GUID of the page. + + object. + Values from the returned by the shell, specifying how the settings are to be processed. + true if the Visual Studio IDE must be restarted. + + + Migrates settings from a previous version. + If the method succeeds, it returns . If it fails, it returns an error code. + The settings reader. + The settings writer. + The GUID of the settings category. + + + + Invoked by the package class when there are options to be read out of the solution file. + The name of the option key to load. + The stream to load the option data from. + + + Invoked by the class when there are options to be saved to the solution file. + The name of the option key to save. + The stream to save the option data to. + + + Parses an embedded text resource of appropriate format for information about which items should be added to the Toolbox. + A text reader that provides toolbox item data in the format described in Remarks. + The GUID of the VSPackage. + + + Parses an embedded text resource of appropriate format for information about which items should be added to the Toolbox. + A text reader that provides toolbox item data in the format described in Remarks. + A resource manager that provides localized lookup names for the categories provided in the resource data. This parameter can be null, in which case the category names are directly used. + + + Called to ask the package if the shell can be closed. + + if the method succeeded, otherwise an error code. + [out] Returns true if the shell can be closed, otherwise false. + + + Registers an editor factory with Visual Studio. + The editor factory to register. + + is null. + + + Registers a project factory with Visual Studio. + The project factory to register. + + is null. + + + Displays a specified tools options page. + The options page to open. The options page is identified by the GUID of the object passed in. + + is null. + + + Adds the given service to the VSPackage's service container. + Type of service to add. + + that can create the service. This allows a service to be declared as available, but delays creation of the object until the service is requested. + + + Adds the given service to the service container by means of the specified . + The type of service to add. + + that can create the service. This allows a service to be declared as available, but delays creation of the object until the service is requested. + true if this service should be added to any parent service containers; otherwise, false. + + + Adds the given service to the VSPackage's service container. + Type of service to add. + Service object. + + + Adds the given service to the VSPackage's service container. + Type of service to add. + Service object. + true if this service should be added to any parent service containers; otherwise, false. + + + Removes the given service type from the service container. + The type of service to remove. + + + Removes the given service type from the service container, and optionally promotes the removal of the service to parent service containers. + The type of service to remove. + true to promote this request to any parent service containers; otherwise, false. + + + Gets the service of the specified type. + An object representing the requested service, or null if none can be found. + The type of the service to get. + + + Event generated whenever Visual Studio initializes its Toolbox. + + + Event generated whenever Visual Studio upgrades its Toolbox. + + + Gets the path to user data storage for Visual Studio. + The path to user data storage. + + + Gets the path to local user data storage for Visual Studio. + The path to local user data storage. + + + Gets a registry key that can be used to store user data. + A that can be used to store user data. + + + Gets a value indicating whether the package in the process of shutdown. + true if the package is in the process of shutdown, otherwise false. + + + Modify your class that implements by using this attribute so that the registration tool, RegPkg.exe, will look for additional attributes. For more information, see Registering VSPackages. + + + Initializes an instance of this attribute. + + + Creates registry entries that correspond to the value of this attribute. + Contains information about the whole installation so that registry entries that are specific to this attribute may be created. + + + Gets or sets the method of registration. + + . + + + Gets or sets the non-default resource .dll location. + The non-default resource .dll location. + + + Removes attribute-specific registry entries. + Contains information about the whole installation so that registry entries that are specific to this attribute may be removed. + + + Gets or sets whether package resources are described in a managed package or in a satellite UI .dll file. + Set to true if package resources are described in a managed package, false if they are in a satellite UI .dll file. + + + A set of static utilities for filenames, paths, enumeration/string conversions, images, and other functions. + + + Determines whether or not a string contains characters that are invalid for file names or paths. + true if the string contains invalid characters, false if the string is a valid file name or path. + The file name or path. + + + Converts a string to an enumeration using a converter. + The enumeration value. + The string value. + The of the string. + The type of the . + + + Converts a string to an enumeration type. + The enumeration type. + The enumeration to which the string is to be converted. + The value to convert. + A object describing the culture to use to read localized strings. + The enum to which to convert. + + + Copies the specified file to the local project directory. + The to copy. + The local resource to copy it to. + + + Creates a CAUUID from a GUID array. + A structure. + An array of GUIDs. + + + + + + Creates the directories necessary for the given path. + The path to create. + + + Creates an image list from the specified stream. + An containing a series of 16 by 16 pixel bitmaps with a magenta background color. + The stream from which to extract the bitmaps. + + + Creates a list of bitmaps from the resource handle. + An containing a series of bitmaps. + The handle of a resource. + + + Creates a list of bitmaps from the specified assembly and resource names. + An containing a series of 16 by 16 pixel bitmaps. + The assembly from which to get the resources. + An array of resource names (representing bitmaps) in the assembly. + + + Gets a pointer from a bitmap image. + An integer which serves as an . + + . + + + Calculates the distance between two paths. + The relative path. + The base . + The relative . + + + Gets the path of system assemblies. + The base directory for system assemblies. + + + + + Determines whether or not the specified file name is invalid. + true if the file name is invalid, false if it is valid. + The name of the file. + + + Returns a path for the second file that is relative to the first. + The relative path of the second file. + The base path. + The relative path. + + + Returns a relative path if the specified file path is absolute and if it is in the same folder as the URL or in a child folder of the URL. + The relative path to the file. + The path to convert. + The base URL. + + + + + + + Returns a string from an enumeration value. + A string value derived from the enumeration. + The enumeration value. + The of the string. + The enum type. + + + Specifies the migration action in and . + + + No migration action. + + + The passthrough migration action. + + + The custom migration action. + + + The class representing the attribute describing how to convert property values on property pages in a package. Use this attribute rather than . + + + Creates a new instance of the class for the specified type. + The type to convert. + + + The type that is to be converted. + + . + + + Adds a command line option to devenv for a specfic package type. + + + Initializes a new instance of the class. + Name of the new command line option. + The package type. + + + Gets or sets the default arguments for the command line. + + + Gets or sets whether the package should be demand loaded. + + + Gets or sets a help string to show for the command. The value of this property can be a resource ID. + + + Gets or sets the name of the command line. + + + Gets or sets the GUID of the package providing the command line. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Describes the assemblies that the class supports. + + + Creates a new instance of a object with the specified assembly name. + [in] The full name of an assembly. + + + Gets the full assembly specification of the filter. + A string containing the full assembly specification of the filter. + + + Apply this attribute to your VSPackage class to cause it to be automatically loaded when a specified UI context is active. This class cannot be inherited. + + + Returns a new instance of this attribute with the specified . + The GUID of the command context which will cause this package to load. + + + Returns the UI context GUID which will cause your package to load. + The UI context GUID. + + + Provides registration information about a VSPackage when called by an external registration tool like regpkg.exe. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Removes registration information about a VSPackage when called by an external registration tool like regpkg.exe. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Modifying your -derived class with this attribute declares that it provides a particular automation object. + + + Initializes a new instance of . + The name of the automation object. + + + Gets or sets the description of the automation object. + The description of the automation object. + + + Gets the name of the automation object. + The name of the automation object. + + + Registers this attribute when called by an external registration tool such as RegPkg.exe. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Removes the registry key when called by an external registration tool such as RegPkg.exe. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Registers a path that should be probed for candidate assemblies at assembly load time.You should use instead of ProvideBindingPathAttribute. Registering a specific assembly location instead of a directory to probe results in better performance. + + + Initializes a new instance of the class. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + This method throws an if the argument is null. + + + Gets or sets an optional SubPath to set after $PackageFolder$. You can use this property if the assemblies to be probed reside in a different directory than the pkgdef file. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + This method throws an if the argument is null. + + + Registers a set of values that define a binding redirection. These values are merged at startup into the CLR runtime configuration. + + + Initializes a new instance of the class. + + + Gets or sets the generated code base element. When false, no corresponding CodeBase element is generated for the redirected assembly (used for assemblies in the GAC). + + + Gets or sets the version of the assembly to use instead of the originally-requested version. + + + Gets the range of versions that will be redirected. + + + Gets or sets the lower bound (inclusive) of the range of versions that will be redirected. + + + Gets or sets the upper bound (inclusive) of the range of versions that will be redirected. + + + Registers a set of values that define a dependent assembly tag with a code base. These values are merged at startup into the CLR runtime configuration. + + + Initializes a new instance of the class. + + + Gets or sets the version of the assembly to use instead of the originally-requested version. + + + Registers a component diagnostics provider and its associated view. + + + Initializes a new instance of the class. + The type implementing . + A short, non-localized human-readable name that appears in the Component Diagnostics tool window's list of available providers. + + + Initializes a new instance of the class. + The type implementing . + A short, non-localized human-readable name that appears in the Component Diagnostics tool window's list of available providers. + GUID of the UI factory containing the view for this provider's data model. + Identifier of the element in the UI factory. + + + Gets whether the provider uses the default, general-purpose view. If this property is false, the provider specifies its own custom view. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets or sets the version of the provider's data model. + + + Gets the element identifier in the UI factory of the view for this provider. + + + Gets the GUID of the UI factory containing the view for this provider. + + + Parent class for attributes that generate dependentAssembly entries. + + + Initializes a new instance of the class. + + + Indicates whether a GUID update is required. If true, a GUID update is required. If false (default), no update is required. + + + Gets or sets the name of the target assembly. + When this property is set, this exception is thrown if the value of this property contains invalid file name characters. + + + Gets or sets a relative path from $PackageFolder$, or an absolute path rooted from an environment variable substitution (of format %variable%). + When this property is set, this exception is thrown if the value of this property contains invalid path or file name characters. + + + Gets or sets a string that specifies the language and country/region of the assembly. + When this property is set, this exception is thrown if the value of this property is not a valid culture name. + + + Gets or sets the assembly to which the generated dependentAssembly registry entry refers. + + + Formats a binary public key token into a hexadecimal string. + The binary public key token to format. + + + Gets the string that will be hashed into the identifier of the attribute. + + + Gets the path to the key were the values for this attribute will be registered. + + + Gets the identifier of this attribute instance. + + + Gets or sets a 16-character hexadecimal number which is the token part of the strong name of the assembly being redirected. + When this property is set, this exception is thrown if the value of this property is not a valid public key token. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Set values handled by this attribute in the given key. + The key in which to set the values. + + + Tries to parse a string into a version. + true if the string was parsed successfully, false if the string was not parsed successfully. + String to be parsed. + A containing the results of the parsed string. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Updates all information not provided from the assembly to which this attribute is applied. + + + Validates that all the required information has been supplied. + + + Associates a file extension to a given editor factory when applied to a class that inherits from or implements the interface . + + + Initializes an instance of ProvideEditorExtensionAttribute. + One of following types:The type of the editor factory expressed as a string.The GUID of the editor factory.The type of the editor factory. + The file extension to associate with the editor factory. This extension should include the prefix ".". + The priority of this editor factory. The editors with the higher priority number is given a chance to read a file first. Upon failure, the next editor in priority is used. + + + Gets or sets the default name of the editor. + The default name of the editor. + + + Determines whether or not the extension should be registered with a EditorFactoryNotify registry value, which associates a file extension with a specific editor factory. + true if the EditorFactoryNotify registry value should be created, otherwise false (the default). + + + Gets the file extension associated with this editor. + The file extension for this editor. + + + Returns the GUID of the associated factory. + The GUID of the editor factory. + + + Gets and sets the integer NameResourceID. + Name resource ID. + + + Gets the editor's priority as set in the constructor. + The priority for this editor for its file extension. + + + Sets and gets the GUID of the project associated with this editor. + The project GUID. + + + Called to register this attribute with the given context. The context contains the location where the registration information should be placed. It also contains the type being registered and path information. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + This method throws an if the argument is null. + + + Gets or sets the template directory to be used by the editor factory to retrieve its source files. + The template directory. + + + Removes the registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + This method throws an if the argument is null. + + + This attribute declares that the VSPackage provides an editor factory. + + + This constructor creates a new object. + The object type that implements . + The resource ID in the unmanaged resource file that contains the localized name of the editor factory. + + + + Gets the editor factory type. + The editor factory type. + + + Gets resource ID. + Returns the editor factory esource ID specified in the resource file. + + + Called to register this attribute with the given context. + + . Contains the location where the registration information should be placed, and also contains information about the editor type being registered, and path information. + + + Gets or sets the trust level for the editor. + + . + + + Called to un-register this attribute with the given context. + + . Contains the location where the registration information should be placed, and also contains information about the editor type being registered, and path information. + + + Adds a logical view to the editor created by an editor factory. + + + Initializes a new instance of for the specified factory type and logical view. + The type of factory. This may be a type, a GUID or a string representation of a GUID + The GUID of the logical view to register. + + + Gets the GUID of the factory type. + The GUID of the factory type. + + + Gets or sets the trust flag for this logical view. + true if the logical view is trusted, otherwise false. + + + Gets the GUID of the logical view. + The GUID of the logical view. + + + Registers this attribute with the given context. + + . The context contains the location where the registration information should be placed. It also contains other information such as the type being registered and path information. + + + Unregisters the logical view. + + . The context contains the location where the registration information should be placed. It also contains other information such as the type being registered and path information. + + + Provides an extender for Visual Studio. This class cannot be inherited. + + + Initializes a new instance of for the specified extender. + The CATID of the element to be extended. + The GUID of the extender. + The name of the extender. + + + Gets the GUID category ID of the element to be extended. + The GUID category ID of the element to be extended. + + + Gets the GUID of the extender. + The GUID of the extender. + + + Gets the name of the extender. + The name of the extender. + + + Provides registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Removes registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Provides a key binding table GUID. + + + Initializes a new instance of for the specified table and name resource ID. + The GUID of the key binding table in the Command Table Configuration (.ctc) File. + The resource ID in the unmanaged resource file that contains the localized name of the key binding table. + + + Gets or sets whether the user is allowed to bind new commands to navigation keys. + true if the user is allowed to bind new commands to navigation keys, otherwise false. + + + Gets the name resource ID. + The name resource ID + + + Called to register this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the GUID of the key binding table. + The GUID of the key binding table. + + + Removes the registration information about a VSPackage when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Registers language service support for code snippets. + + + Initializes a new instance of the class. + [in] This is either a string containing a GUID or a type representing the class that implements the language service. The language service GUID is derived from this string or type. + [in] The name of the language. This name is used in the registry for registry key and entry names. + [in] The resource ID for the localized version of the language name. This is used to present the language name in dialog boxes and other user interface elements. + [in] A string containing an identifier specific to the language that is used to mark and identify code snippets. + [in] A string containing the path to the code snippets index file for the language. + + + Gets or sets a semicolon-delimited string containing the directory or directories that should be created. + The directory or directories that should be created. + + + Gets the name of the language. + The name of the language. + + + Gets the GUID of the language service. + The GUID of the language service. + + + Creates all of the registry keys and entries as specified by the class constructor. + [in] A object used to manage registry keys. + + + Gets or sets a semicolon-delimited string containing the default paths to search for snippets. + Returns a semicolon-delimited string containing the paths to search for snippets. + + + Gets or sets whether or not the roots of the code snippets should be shown. + true if the roots should be shown, otherwise false. + + + Removes all of the registry keys and entries as specified by the class constructor. + [in] A object used to manage registry keys. + + + Provide a general method for setting a language service's editor tool option page. + + + Initializes a new instance of for the specified page. + The type of the option page. + The language name. + The option page category. + The caption of the option page. + The resource ID of the page. + + + + + + + Gets the name of the language. + The name of the language. This is the same string that was passed to the class constructor. + + + Gets the GUID of the option page. + The GUID of the option page. + + + Creates all the registry keys and entries as specified by the class constructor. + [in] A object used to manage registry keys. + + + Removes all of the registry keys and entries. + [in] A object used to manage registry keys. + + + This attribute is used to declare a Tools Option category for a language. + + + Initializes a new instance of for the language and option category. + The name of the language. + The name of the category. + The resource ID of the category. + + + Registers the Tools Option page. + A that describes the location of the key and its values in the registry + + + Unregisters the Tools Option page. + A that describes the location of the key and its values in the registry. + + + Associates a file extension with a particular language service. + + + Initializes a new instance of the attribute, using the specified language service GUID. + [in] A string containing the GUID of the language service. + [in] A string containing the file extension to associate with the language service. + + + Initializes a new instance of the attribute, using the type of your language service class. + [in] The type of the language service class. + [in] A string containing the file extension to associate with the language service. + + + Returns the associated file extension. + Returns the string containing the file extension that was passed to the constructor of the class. + + + Returns the language GUID. + Returns a object containing the GUID of the language service that was passed to the class constructor. + + + Puts the file extension and language service GUID into the registry. + [in] A object used to create registry keys and to log progress. + + + Removes the file extension and language service GUID from the registry. + [in] A object used to remove registry keys and to log progress. + + + Informs Visual Studio that a VSPackage provides a language service. Used with the managed package framework (MPF). + + + Initializes a new instance of the Shell.ProvideLanguageServiceAttribute class. + [in] This is either a string containing a GUID or a type representing the class that implements the language service. The language service GUID is derived from this string or type. + [in] The name of the language. This name is used in the registry for registry key and entry names. + [in] The resource ID for the localized version of the language name. This is used to present the language name in dialog boxes and other user interface elements. + + + Determines if the language service supports automatic outlining. + Returns true if the language service supports automatic outlining; otherwise, returns false. + + + Determines if the language service supports IntelliSense operations. + Returns true if the language service supports IntelliSense operations; otherwise, returns false. + + + Determines the amount of time before a parse operation is started to support an IntelliSense operation. + Returns the number of milliseconds delay before a parse is started. + + + Determines the expression evaluator that is used for evaluating expressions. + Returns a string containing the GUID of an expression evaluator; otherwise, returns a null value. + + + Determines the default setting for the Insert spaces option in the Options dialog box for a language service. + Returns true if the language service initially uses spaces for formatting; otherwise, returns false to indicate the language service uses tabs. + + + Determines the initial setting of the Enable single-click URL navigation option in the Options dialog box. + Returns true if the Enable single-click URL navigation should be turned off; otherwise, returns false, the option is initially turned on. + + + Determines whether the Hide Advanced Members option is enabled in the Options dialog box. + Returns true if the Hide Advanced Members option is enabled; otherwise, returns false. + + + Determines whether the language supports background parsing. + Returns true if background parsing is allowed; otherwise, returns false. + + + Determines whether the language service can comment and uncomment source code using a single command. + Returns true if commenting is supported; otherwise, returns false. + + + Determines if the language service supports automatic formatting of the source code. + Returns true if formatting is supported; otherwise, returns false. + + + Determines if the Line numbers option can be selected in the Options dialog box. + Returns true if the Line numbers option is enabled for use; otherwise, returns false. + + + Determines the initial state of the Hide Advanced Members option in the Options dialog box. + Returns true if the Hide Advanced Members is initially selected; otherwise, returns false. + + + Returns the name of the language. + Returns a string containing the name of the language. This is the same string that was passed to the class constructor. + + + Returns the resource ID used to obtain the localized version of the language name. + Returns a number representing the resource ID. This is the same value that was passed to the class constructor. + + + Returns the GUID of the language service. + Returns the GUID of the language service. This is the value that was derived from the object passed to the class constructor. + + + Determines if the language service supports matching language pairs. + Returns true if matching language pairs is supported; otherwise, returns false. + + + Determines if a language service supports matching language pairs while typing. + Returns true if language pairs can be matched while typing; otherwise, returns false. + + + Determines the maximum number of errors message that a language service can report for a parsing operation. + Returns a number indicating the maximum number of errors that can be reported. + + + Determines if the language service supports the IntelliSense Quick Info. + Returns true if the IntelliSense Quick Info is supported; otherwise, returns false. + + + Creates all of the registry keys and entries as specified by the class constructor. + [in] A object used to manage registry keys. + + + Determines if the language service is using the built-in colorable items as supplied by Visual Studio. + Returns true if the language service uses the built-in colorable items; otherwise, returns false, indicating the language service is supplying custom colorable items. + + + Determines if the Statement completion options are enabled in the Options dialog box. + Returns true if the Statement completion options are enabled; otherwise, returns false. + + + Determines if the Navigation bar option is enabled in the Options dialog box. + Returns true if the Navigation bar option is to be enabled; otherwise, returns false. + + + Determines if URLs are displayed in such a way as to show they can be clicked. This option is not used. + Returns true if URLs are to be displayed "hot" or clickable; otherwise, returns false. + + + Determines if the matching language pair is shown in the status bar. + Returns true if the matching language pair is shown in the status bar; otherwise, returns false. + + + Determines if the Smart Indenting option is enabled in the Options dialog box. + Returns true if the Smart Indenting option is enabled; otherwise, returns false. + + + Determines if the Window -> New Window command is disabled for a language service. + Returns true if the Window -> New Window command is disabled; otherwise, returns false. + + + Determines if the language service supports the clipboard format HTML for copy and paste operations. + Returns true if the HTML clipboard format is supported, otherwise, returns false. + + + Removes all of the registry keys and entries as specified by the class constructor. + [in] A object used to manage registry keys. + + + This attribute provides a package load key for your package. Not needed in Visual Studio 2010. + + + Creates a new . + The minimum edition of Visual Studio on which the VSPackage is loaded. This must be the literal edition value provided by Microsoft when obtaining your Package Load Key (PLK). + The version of the product that this VSPackage implements. + Name of the product that this VSPackage delivers. Products comprised of multiple VSPackages each need their own PLK. + VSIP Partner/creator of the VSPackage. Must exactly match the name you provided to Microsoft when you registered for a PLK. is case-sensitive. + Resource ID for VSPackage load key. + + orare null. + + + Gets the company name. + The name of your company. + + + Gets the minimum edition of Visual Studio needed to load your VSPackage. + The minimum edition of Visual Studio needed to load your VSPackage. + + + Gets the name of your VSPackage. + The name of your VSPackage. + + + Gets the version number of your VSPackage. + The version number of your VSPackage. + + + Provides registration information about a VSPackage when called by an external registration tool such as regpkg.exe. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Returns the registry key name for this package's load key information. + The Registry Key name for the load key information of the VSPackage. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the resource ID for the Package Load Key. + The resource ID for the Package Load Key. + + + Removes the registration information about a VSPackage when called by an external registration tool such as regpkg.exe. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Provides registration information about menu resources used in a VSPackage. This class cannot be inherited. + + + This constructor creates a new ProvideMenuResourceAttribute object with the given resource ID and version number. + The ID of the menu resource. It must match the resource ID used in both the satellite (resource-only) DLL and the Command Table Configuration (.ctc) File. + The version number of the menu resource. + + + Initializes a new instance of with the specified resource ID and version. + The resource ID. + The version. + + + Provides registration information about a VSPackage when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + The ResourceID property returns the value of the resource ID set in the constructor. + The resource ID of the menu resource. + + + Removes registration information about a VSPackage when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Returns the version number of the menu resource. + The version number of the menu resource. + + + Obsolete. Do not use.Registers a custom targets file to the list of the targets known and trusted by MSBuild. + + + Obsolete. Do not use.Initializes a new instance of the class to register a targets file to the list of the MSBuild safe imports. + Label to identify the targets. + Full path to the targets file. + This exception is thrown if or are null or empty. + + + Obsolete. Do not use.Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + This exception is thrown if is null. + + + Obsolete. Do not use.Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Informs Visual Studio that the VSPackage provides an object that can be created from the interface. This class cannot be inherited. + + + This constructor creates a new object with the given object type. + The type of object that the VSPackage can create. This type can have any scoping (public, internal, etc.) but must have a public constructor that takes no arguments. + + + The ObjectType property returns the object type set in the constructor. + Returns the object type set in the constructor. + + + Provides registration information about a VSPackage when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets or sets the registration method. + + . + + + Removes registration information about a VSPackage when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + The base class for all the attributes that are used to register an option page. + + + Initializes a new instance of for the specified page. + The type of the page. + The name resource ID of the page. + + + Gets the name resource ID of the page. + The name resource ID of the page. + + + Gets the type of the page. + The type of the page. + + + Apply this attribute to independent objects to allow users to configure VSPackages through a custom Tools Options page. + + + Initializes a new instance of indicating that a particular class implements user configuration support for the VSPackage based on a Tools Options page. + The of the class implementing the Tools Options page. + The canonical nonlocalized name of the Tools Options page category. + The canonical nonlocalized name of the Tools Options page subcategory. + The localized resource ID of the Tools Options page category. + The localized resource ID of the Tools Options page subcategory. + If true, the Tools Options page can be accessed through the Visual Studio automation mechanism. + + + + + + Gets the canonical nonlocalized name of the Tools Options page's category. + The canonical nonlocalized name of the Tools Options page category. + + + Gets the category resource ID for a Tools Options page. + The category resource ID for the Tools Options page. + + + + Gets or sets whether aggregated Tools Options pages are shown. + true if the Tools Options page is to be displayed in the default (complex) view of Tools Options pages. + + + Gets the canonical nonlocalized name of the Tools Options page. + The canonical nonlocalized name of the Tools Options page. + + + Sets the profile migration type. + The profile migration type. + + + + Registers the Tools Options page. + A describing the location in the registry and values to be registered. + + + Gets whether a Tools Options page implementation supports automation. + true if a Tools Options page supports the Visual Studio automation model and can be accessed through the mechanism. + + + Gets or sets whether a Tools Options page implementation uses the Visual Studio settings mechanism to persist its state. + true if the Tools Options page implementation supports the use of Visual Studio settings to persist its state. + + + Gets the current instance of . + The current instance of . + + + Removes the Tools Options page key from the registry. + A describing the location in the registry and values to be removed. + + + Declares the attributes for a physical view offered by an editor. + + + Initializes a new instance of the class. + Name of the physical view. + Attributes for the physical view. + + + Gets the attributes for the physical view. + + + Gets the name of the physical view. + + + Apply this attribute to independent objects used to implement a VSPackage's Visual Studio settings support. + + + Initializes a new instance of ProvideProfileAttribute. + The of the class implementing Visual Studio settings support. + The canonical, nonlocalized name of a Visual Studio settings category. + The canonical, nonlocalized name used to identify the object implementing a Visual Studio settings category. + The localized resource ID of a Visual Studio settings category's name. + The localized resource ID of the name used to identify the object implementing a Visual Studio settings category. + This argument is not implemented. + + + Gets or sets the name of a different category in the profile. + The name of a different category in the profile. + + + Gets the canonical nonlocalized name of the Visual Studio settings category. + The canonical nonlocalized name of the Visual Studio settings category. + + + Gets the name resource ID for a Visual Studio settings category. + The localized name resource ID of the Visual Studio settings category. + + + Gets the localized resource ID of the description of this page of the profile. + The localized resource ID of the description of this page of the profile. + + + Gets the nonlocalized name of this group. + The nonlocalized name of this group. + + + Gets or sets the localized resource ID of the group to which this page belongs. + The localized resource ID of the group to which this page belongs. + + + Gets whether this is also a Tools Options page. + true if this is also a Tools Options page, otherwise false. + + + Sets the migration action to take for this category. + The migration action to take for this category. + + + Gets the canonical nonlocalized name of this page in the profile. + The canonical, nonlocalized name of the page. + + + Gets the localized resource ID of the name of this page in the profile. + The localized resource ID of the name of this page in the profile. + + + Gets the type of the page. + A of the page. + + + Registers this attribute. + A describing the location of the key and its values in the registry. + + + Gets or sets the GUID of a package providing the resource strings. + The GUID of a package providing the resource strings. + + + Removes the key from the registry. + A describing the location of the key and its values in the registry. + + + ProvideProjectFactoryAttribute declares that a package provides a project factory. + + + Initializes a new instance of . + The type of factory the VSPackage offers. + The name of the project. + The resource ID of the project file extensions. + The default project extension. + The possible project extensions supported by this project factory. + The directory containing this project factory’s templates. + + + Gets the default extension of the project file. + The default project extension. + + + Determines whether to disable online templates. + true if online templates are disabled, otherwise false. + + + Gets the resource ID for project file extensions. + The resource ID for project file extensions. + + + Gets or sets the Visual Studio template for the project. + The Visual Studio template for the project. + + + Gets the type of the project factory. + The type of the project factory. + + + Gets or sets the GUID of the folder for this type of project. + The GUID of the folder for this type of project. + + + Gets and sets the Visual Studio language template. + The Visual Studio language template. + + + Gets the name of the type of project. + The project node name. + + + Gets or sets whether this type of project requires a Visual Studio template that creates a new folder. + true if this type of project requires a Visual Studio template that creates a new folder, otherwise false. + + + Gets the set of possible project extensions. + The set of possible project extensions. + + + Gets or sets the Visual Studio template for the project subtype. + The Visual Studio template for the project subtype. + + + Gets the project templates directory. + The path to the directory where the project templates are located. + + + Registers this attribute. + + . Contains the location where the registration information should be placed, the type being registered, and path information. + + + Gets or sets the Visual Studio template to be shown in the New Project dialog. + The Visual Studio template. + + + Gets or sets the order in which projects are displayed in the New Project dialog. + The sort priority for the New Project dialog. + + + Gets or sets the Visual Studio template's group ID. + The template's group ID. + + + Gets or sets the Visual Studio template ID. + The template ID. + + + Removes the key for this attribute from the registry. + + . Contains the location where the registration information should be placed, the type being registered, and path information. + + + This attribute registers items to be included in the Add New Item dialog for the specified project type. It is placed on a VSPackage. + + + Initializes a new instance of for the item. + The type of project factory. This can be a , a GUID, or the string form of the GUID. + The display name of the type of item. + The directory in which the templates for this project type can be found. + The priority of this type (for sorting purposes). + + + Gets the name of this type of item. + The name of this type of item. + + + Gets the sort priority of this type. + The sort priority of this type. + + + Gets the GUID of the type of project factory. + The GUID of the type of project factory. + + + Registers this item type. + A that describes the location and values of the registry key. + + + Gets the directory in which the templates for this project type are found. + The directory in which the templates for this project type are found. + + + Removes the registry key for this item type. + A that describes the location and values of the registry key. + + + Registers the package as a search provider () extender. The Type and names passed in determine the search provider being registered. + + + Initializes a new instance of the class. + The type implementing the extension. + A short, non-localized human-readable name of the provider. + + + This attribute indicates that the package proffers a service when applied to a subclass of or a class that implements . + + + Initializes a new instance of . + [in] The type of the service. + + + Declares that a package provides a particular service when applied to a subclass of or a class that implements . The attributes on a package do not control the behavior of the package, but they can be used by registration tools to register the proper information with Visual Studio. + + + Initializes a new instance of the class. + [in] Type of the service. + [in] Root of the registry for the service. + + + Registers this attribute with the given context. + [in] A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the type of the service. + The service type. + + + Gets or sets the name of the service. + The service name. + + + Gets the service's GUID declared in this attribute. + The GUID of the service declared in this attribute. + + + Unregisters this attribute. + [in] A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + This attribute indicates that the package proffers a replacement for a default service. This attribute is included in the definition of a subclass of or a class that implements . + + + Initializes a new instance of . + [in] The type of the service. + + + This attribute declares a toolbox group which will be created on toolbox initialization. + + + Initializes a new instance of . + The name. + ID + + + Gets the group ID. + The group ID. + + + Gets the index of the toolbox group. + The index of the toolbox group. + + + Gets the name of the toolbox group. + The name of the toolbox group. + + + Called to register this attribute with the given context. + The context. + + + Removes the registration data. + The context. + + + This attribute declares a toolbox item which the toolbox will read from the registry. See the comments on for more details. + + + Initializes a new instance of with the specified data. + The group ID. + The name. + The ID + The formats. + The help keyword. + The bitmap resource ID. + The color. + + + Initializes a new instance of with multitargeting metadata. + The group ID. + The name. + The ID. + The formats. + The help keyword. + The bitmap resource ID. + The color. + The assembly name. + The type name. + The targeted item provider. + The supported frameworks. + + + Gets the assembly name. + The assembly name. + + + Gets the bitmap index. + The bitmap index. + + + Gets the bitmap resource ID. + The bitmap resource ID. + + + Gets the formats. + The formats. + + + Gets the group ID. + The group ID. + + + Gets the help keyword. + The help keyword. + + + Gets the ID. + The ID. + + + Gets the index. + The index. + + + Gets the name. + The name. + + + Called to register this attribute with the given context. + The context. + + + Gets the supported frameworks. + The supported frameworks. + + + Gets the targeted item provider. + The targeted item provider. + + + Gets the tip component type. + The tip component type. + + + Gets the tip description. + The tip description. + + + Gets the tip publisher. + The tip publisher. + + + Gets the tip title. + The tip title. + + + Gets the tip version. + The tip version. + + + Gets the color. + The color. + + + Gets the type name. + The type name. + + + Removes the registration data. + The context. + + + Determines whether to use the target framework version in the tooltip. + true if the target framework version should be used in the tooltip, otherwise false. + + + Apply this attribute to classes implementing VSPackages to declare that the VSPackage provides Toolbox items with the specified clipboard format and to enable drag-and-drop support in the Visual Studio Toolbox. + + + Initializes a new instance of for the specified format. + The name of a supported format. + Thrown if the argument is null. + + + Gets the name of a supported clipboard format. + The name of the clipboard format. + + + Registers a VSPackage as supplying a particular implementation of . Used in conjunction with . + + + Initializes a new instance of . + [in] . + + + Gets the type of the toolbox item configuration. + The type of the toolbox item configuration. + + + Registers the toolbox item configuration. + A describing the location and values of the registry key. + + + Removes the registry key. + A describing the location and values of the registry key. + + + Defines a toolbox item type. Toolbox item types are exposed as pages in the Choose Toolbox Items dialog (where one page is created for each type). + + + Initializes a new instance of the class. + Name of this item type (for example, ".NET Framework Components"). If localizable, this parameter is a resource identifier. + Help keyword for this item type. + Type of a class implementing . + Type of a class implementing . + A collection of framework identifiers indicating the frameworks that should be enumerated to populate the list in this item type's Choose Toolbox Items page. + + + Gets or sets the type of the implementation. + + + Gets or sets the file filter for the browse dialog. + + + Gets or sets the type of the helper object that will be passed to your implementation's constructor. + + + Gets or sets whether the current tab is to hide the assembly name column in the Choose Toolbox Items dialog. If true, the assembly name column is hidden; if false (default), the assembly name column is displayed. + + + Gets or sets whether the current tab is to hide the language information in the Choose Toolbox Items dialog. If true, the language information is hidden; if false (default), the language information is displayed. + + + Gets or sets whether the current tab is to hide the directory column in the Choose Toolbox Items dialog. If true, the directory column is hidden; if false (default), the directory column is displayed. + + + Gets or sets whether the current tab is to hide the namespace column in the Choose Toolbox Items dialog. If true, the namespace column is hidden; if false (default) the namespace column is displayed. + + + Gets or sets whether the current tab is to hide the version in the Choose Toolbox Items dialog. If true, the version is hidden; if false (default), the version is displayed. + + + Gets the type of the implementation. + + + Gets the type of the implementation. + + + Gets a collection of extra columns (as identifier-Display-Name pairs) to display in the dialog. + + + Gets or sets the sort order of the page. If zero, the page is left unsorted and will appear after all pages with nonzero order values. Pages with equal order values are sorted alphabetically by name. + + + Gets or sets a collection of platform identifiers indicating the platforms that should be enumerated to populate the list in this item type's Choose Toolbox Items page. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the identity of this instance of the attribute. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Gets or sets a list of UIContexts that controls the visibility of the tab. The tab is hidden if none of the UI contexts are set. Only non-dynamic UI contexts are supported (for example, OsWindows8OrHigherContext). Use of dynamic contexts like is not supported and results in non-deterministic behaviors. + + + Apply this attribute to classes implementing VSPackages to declare if they offer a set of items to the Visual Studio Toolbox. + + + Creates a new instance of which indicates if a class implementing a VSPackage is providing Toolbox items. + The version of the Toolbox items a VSPackage supplies. + + + Initializes a new instance of for the specified version. + The version of the items. + If true, then set the registry key that forces a event after each toolbox reset. + + + Gets or sets whether the event should be raised after each toolbox reset. + true if the event should be raised after each toolbox reset, otherwise false. + + + Registers a VSPackage as a Toolbox item provider for specified formats when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context is used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Reverses the changes that the method had applied to the registry. + A registration context provided by an external registration tool. The context is used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Property returning the version of Toolbox items a VSPackage provides. + An integer value containing the version number of the Toolbox items a VSPackage supports. + + + Registers a VSPackage as providing one or more dialog pages in the Customize Toolbox dialog page of the Visual Studio IDE. + + + Initializes a new instance of , using the type of the class implementing the Customize Toolbox dialog page, and a resource ID. + [in] The of the class implementing the Customize Toolbox dialog page. This type must derive from the class. + [in] The native resource ID in a VSPackage's satellite dll containing the name for the tab hosting this Customize Toolbox dialog page. + + + Initializes a new instance of , using the type of the class implementing the Customize Toolbox dialog page, a resource ID, and a page order. + [in] The type of the class implementing the Customize Toolbox dialog page. This type must derive from the class. + [in] The native resource ID in a VSPackage's satellite dll containing the name for the tab of hosting this Customize Toolbox dialog page. + [in] The Customize Toolbox dialog page placement in the pages of the Visual Studio Customize Toolbox Dialog. A value of 0 indicates that no order is requested. + + + Initializes a new instance of , using the of the class implementing the Customize Toolbox dialog page, a resource ID, a page order, and a help string. + [in] The type of the class implementing the Customize Toolbox dialog page. This type must derive from the class. + [in] The native resource ID in a VSPackage's satellite dll containing the name for the tab of hosting this Customize Toolbox dialog page. + [in] The Customize Toolbox dialog page placement in the pages of the Visual Studio Customize Toolbox Dialog box. A value of zero indicates that no order is requested. + [in] A help keyword used by the help system to find the correct help topic information. + + + Gets a help keyword associated with the Customize Toolbox dialog page. + The help keyword used to obtain information about the Customize Toolbox dialog page. + + + Gets the page order requested for the Customize Toolbox dialog page + The page order requested for the Customize Toolbox dialog page. + + + Registers the toolbox page. + A describing the location and values of the registry key. + + + Gets the instance of the class implementing the Customize Toolbox dialog page. + The current instance of the class implementing the Customize Toolbox dialog page. + + + Removes the toolbox page registry key. + A describing the location and values of the registry key. + + + Notifies Visual Studio that a VSPackage owns a tool window. + + + Initializes a new instance of . + The type of the tool window. + + + + + + Gets or sets the default height of the tool window. + The height of the tool window. + + + Determines whether multiple instances of the tool window are allowed. + true if multiple instances are allowed, otherwise false. + + + Gets or sets the default orientation for the tool window relative to the window specified by the Window property. + + . + + + Gets or sets the default horizontal value of the top left corner of the tool window. + The horizontal value of the top left corner of the tool window. + + + Gets or sets the vertical value of the top left corner of the tool window. + The vertical value of the top left corner of the tool window. + + + Registers the tool window. + A describing the location and values of the registry key. + + + Gets or sets the default docking style for the tool window. + + . + + + Gets or sets the type of the tool window. + The type of the tool window. + + + Gets or sets whether the tool window should not be reopened when the IDE restarts. + false if the tool window should be displayed when the IDE restarts if it was displayed when the IDE closed, otherwise true. + + + Removes the registry key for the tool window. + A describing the location and values of the registry key. + + + Gets or sets the default width of the tool window. + The default width of the tool window. + + + Gets or sets the GUID of the default window on which the tool window should be docked. + The GUID of the default window on which the tool window should be docked. + + + Maps a tool window to one or more UI contexts, so that the window is displayed when the user switches to one of those contexts and is hidden when the user switches away from one of the contexts. + + + Initializes a new instance of for the specified type of the tool window and a GUID to associate with its visibility. + The types of the tool window. This can be the type, the GUID, or the string value of the GUID. + The GUID of the tool window to which the automatic visibility behavior should be applied. + + + Gets the GUID of a command associated with showing or hiding the tool window. + The GUID of a command associated with showing or hiding the tool window. + + + Gets or sets the name of the window. + The name of the tool window. + + + Registers the tool window visibility. + A that describes the location and values of the registry key. + + + Removes the registry key. + A that describes the location and values of the registry key. + + + This attribute declares that an editor factory class offers a particular logical view. + + + Creates a new attribute. + An enumeration of the kinds of logical views available. + The GUID of the physical view. This can be null to indicate the default physical view. + + + Gets the logical view in this attribute. + + . + + + Returns the physical view that is mapped to the logical view. + + . + + + Indicates that a custom XML designer should not allow Side-by-Side (SxS) editing with the standard text-based XML editor. + + + Initializes a new instance of the class. + Registry key name for your XML editor, for example, "RESX", "Silverlight", "Workflow", and so on. + A Type, GUID, or String object representing the editor factory. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + This exception is thrown if the value of is null. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + This exception is thrown if the value of is null. + + + Provides registration information to the XML Chooser for a custom XML designer. + + + Initializes a new instance of the class. + Registry key name for your XML editor, for example, "RESX", "Silverlight", "Workflow", and so on. + File extension for your custom XML type, for example, "xaml", "resx", "xsd", and so on. + A Type, GUID, or String object representing the editor factory for the default logical view. + Priority of the extension in the XML chooser. This value must be greater than the extension's priority value for the XML designer's EditorFactory. + The or parameters are null or empty. + The parameter is null. + + + Gets or sets the editor factory to associate with the code logical view. + + + Gets or sets the editor factory to associate with the debugging logical view. + + + Gets or sets the editor factory to associate with the designer logical view. + + + Gets or sets a special value used only by the DataSet designer. + + + Gets or sets a Boolean value indicating whether the XML chooser should match on both the file extension and the namespace. If false, the XML chooser matches on either the extension or the namespace. + + + Gets or sets the XML namespace used in documents that this editor supports. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + The parameter is null. + + + Gets or sets the editor factory to associate with the text logical view. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Specifies the results of the query and close operation. + + + The document was found and the close operation completed successfully. + + + The close operation did not complete because the user cancelled the PromptSave dialog, and therefore the document remained open. + + + The document could not be found and was not closed. + + + Provides the base class for a generic . + The type of items stored in the set. + + + Initializes a new instance of the class that is empty and uses the specified equality comparer for the set type.. + The implementation to use when comparing values in the set, or null to use the default EqualityComparer implementation for the set type. + + + Adds the specified element to a set. + true if the element is added to the object, or false if the element is already present. + The element to add to the set. + + + Removes all elements from a object. + + + Occurs when an item is added, removed, changed, moved, or the entire set is refreshed. + + + Determines whether an element is in the . + true if item is found in the ReadOnlyObservableSet(T), otherwise false. + The object to locate in the ReadOnlyObservableSet(T). + + + Determines whether an element is in the . + true if item is found in the ReadOnlyObservableSet(T), otherwise false. + The object to locate in the ReadOnlyObservableSet(T). + + + Gets the number of elements actually contained in the . + The number of elements in the set. + + + Returns an enumerator that iterates through the . + An enumerator object for the ReadOnlyObservableSet(T) object. + + + Invoked when the collection is changed. + Arguments of the event being raised, describing the changes made to the set. + + + Invoked when an element is added to the set. + The element that was added to the set. + + + Invoked when an element is removed from the set. + The element that was removed from the set. + + + Invoked when the set is cleared. + The elements that were cleared from the set. + + + Removes the specified element from a object. + true if the element is successfully found and removed, otherwise false. This method returns false if item is not found in the ReadOnlyObservableSet(T) object. + The element to remove from the set. + + + Returns an enumerator that iterates through the . + An enumerator object for the ReadOnlyObservableSet(T) object. + + + Registers the VSPackage as an extender that is automatically loaded in response to a particular context GUID. This class cannot be inherited. + + + Creates a new RegisterAutoLoadAttribute object and saves the GUID of the package that initiated package loading. + Context GUID that triggers the loading of the VSPackage + + + Returns the context GUID that triggers package load. + The context GUID that triggers package load. + + + Provides registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Removes registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. + A registration context provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + See . Registers a file extension with a given editor factory. This class cannot be inherited. + + + Initializes a new for the supplied factory type and extension. + One of following types:The type of the editor factory expressed as a string.The GUID of the editor factory.The type of the editor factory. + The file extension to associate with the editor factory. This extension should include the prefix ".". + The priority of this editor factory. Editors with higher priority numbers are given a chance to read a file first. Upon failure, the next editor in priority order is used. + This method throws an if:Factory GUID value passed in is null. is null. + This method throws an if:The factory GUID string cannot be converted to a GUID object. Extension does not begin with a ".". + + + Gets or sets whether or not to create the EditorFactoryNotify registry key on registration. + true if the EditorFactoryNotify registry key should be created, otherwise false. + + + Gets the file extension of the file. + The file extension for this editor. + + + Gets the editor factory GUID. + The GUID of the editor factory. + + + Gets or sets the name resource ID. + The name resource ID. + + + Gets the priority of this extension registration. + The priority for this editor for its file extension. + + + Gets or sets the project GUID. + The project GUID. + + + Registers the editor extension. + A that describes the location and values of a registry key. + This method throws an if is null. + + + Gets or sets the template directory. + The template directory. + + + Removes the editor extension registry key. + A that describes the location and values of a registry key. + This method throws an if the argument is null. + + + Adds a logical view to the editor created by an editor factory. This attribute has been deprecated. Please use instead. + + + Initializes a new instance of . + The type of factory. This may be a Type, a GUID or a string representation of a GUID + The GUID of the logical view to register. + + + Gets the GUID of the factory type. + The GUID of the factory type. + + + Gets the GUID of the logical view. + The GUID of the logical view. + + + Registers logical view. + A that describes the location and values of the registry key. + + + Removes the editor logical view registry key. + A that describes the location and values of the registry key. + + + Registers an extender with Visual Studio. This class cannot be inherited. This class is obsolete. Please use instead. + + + This constructor creates a new object. + The CATID of the extendee. + The GUID of the extender. + The name of the extender. + + + Gets the CATID of the object to be extended. + The CATID of the object to be extended. + + + Gets the GUID of the extender. + The GUID of the extender. + + + Gets the name of the extender. + The name of the extender. + + + Provides registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Removes registration information about a VSPackage when called by an external registration tool such as RegPkg.exe. + A registration context provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Registers a file extension with a given language service by applying the attribute to a VSPackage when registered using a registration tool like regpkg.exe. For more information, see Registering VSPackages. + + + Initializes a new instance of RegisterLanguageExtensionAttribute. + The GUID of language service class that is derived from as a string. + The file extension associated with the language service. Include a "." in the value of . + + + Initializes a new instance of RegisterLanguageExtensionAttribute and initializes the values of the language service and file extension that it associates. + The GUID of language service class that is derived from as a string. + The file extension associated with the language service. Include a "." in the value of . + + + Gets the associated file extension. + The associated file extension. + + + Gets the GUID of the language service. + The GUID of the language service. + + + Registers this attribute with the given context. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Removes the registration information about a VSPackage when called by an external registration tool such as regpkg.exe. For more information, see Registering VSPackages. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + This attribute registers a package load key for your package. This attribute has been deprecated. + + + Creates a new . This attribute has been deprecated. + The minimum edition of .NET needed to load the VSPackage. + The version number of the VSPackage. + The name of the VSPackage. + The name of your company. + The resource ID for the VSPackage load key. + + orare null. + + + Gets the name of your company. This attribute has been deprecated. + The name of your company. + + + Gets the minimum edition of Visual Studio needed to load your VSPackage. This attribute has been deprecated. + The minimum edition of Visual Studio needed to load your VSPackage. + + + Gets the name of your VSPackage. This attribute has been deprecated. + The name of your VSPackage. + + + Gets the version number of your VSPackage. This attribute has been deprecated. + The version number of your VSPackage. + + + Provides registration information about a VSPackage when called by an external registration tool such as regpkg.exe. This attribute has been deprecated. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the registry key name for the load key information of the VSPackage. This attribute has been deprecated. + The Registry Key name for the load key information of the VSPackage. + A registration context provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the resource ID for the Package Load Key. This attribute has been deprecated. + The resource ID for the Package Load Key. + + + Removes the registration information about a VSPackage when called by an external registration tool such as regpkg.exe. This attribute has been deprecated. + A registration context provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + + has been deprecated. Please use instead + + + Initializes a new instance of . + The type of the project factory. + The name of the item category. + The template directory for this project type. + The priority of the project type. + + + Gets the name of this type of item. + The name of this type of item. + + + Gets the sort priority of this type. + The sort priority of this type. + + + Gets the GUID of the type of project factory. + The GUID of the type of project factory. + + + Registers this item type. + A that describes the location and values of the registry key. + + + Gets the directory in which the templates for this project type are found. + The directory in which the templates for this project type are found. + + + Removes the registry key for this item type. + A that describes the location and values of the registry key. + + + Represents information about a document in the . It includes all the information returned by . + + + The document cookie. + + + The document object in the Running Document Table (RDT). + + + The number of edit locks held on the document. + + + The set on the document. + + + The interface of the hierarchy node that owns the document. + + + The item ID of the node that holds the document. + + + The absolute path of the document. + + + The number of read locks held on the document. + + + Provides access to the running document table (RDT) that tracks all currently opened documents in Visual Studio. + + + + Initializes a new instance of the class. + [in] An object used to access services. This cannot be a null value. + + + Enables the client to receive events about changes to the Running Document Table (RDT). + A cookie associated with the given object. If an error occurs, this method throws an exception. + [in] An object representing an entity to be called for various running document table events. + + + + + + + + + Gets an object from the Running Document Table (RDT) that represents the document specified by the given path. + An object that can be cast to an appropriate interface to access the document (see Remarks for details), or null if the document is not registered with Visual Studio. + [in] Path to the desired document. + + + Gets an object, cookie, and owning project type from the Running Document Table (RDT) for the document specified by the given path. + An object that can be cast to an appropriate interface to access the document (see Remarks for details). If a null value is returned, the document is not registered with Visual Studio. + [in] Path to the desired document. + [out] Returns an object that represents the project that owns the requested document. + [out] Returns the ID of the document in the object. + [out] Returns the unique value that represents the requested document in the RDT. + + + Gets a cookie from the Running Document Table (RDT) that represents the document specified by the given path. + An object that can be cast to an appropriate interface to access the document (see Remarks for details), or null if the document is not registered with Visual Studio. + [in] Path to the desired document. + [out] Returns the unique value that represents the requested document in the RDT. + + + + + + Gets information about a document registered in the Running Document Table, given the identifier of the document. + The for the specified document. + The identifier of the document data object in the Running Document Table. + + + Gets an enumerator of the documents in the Running Document Table. + An of type . + + + Gets the project that owns the specified document. + + , otherwise null. + [in] Path to the desired document. + + + + Uses the Running Document Table (RDT) to obtain the contents of a document given the path to the document. + The contents of the document in a string format, or null if the document is not registered with the RDT. + [in] Path to the desired document. + + + Uses the Running Document Table (RDT) to obtain the contents of a document given the path to the document. + The contents of the document in a string format, or null if the document is not registered with the RDT. + [in] The unique value that represents the requested document in the RDT. + + + Gets a read or edit lock on the specified document. + Lock values from the enumeration. + The identifier of the document to lock. + + + + Creates an entry in the running document table when a document is created or opened. + If the method succeeds, it returns . If it fails, it returns an error code. + Lock values from the enumeration. + The absolute path of the document. + The interface of the hierarchy element that owns the document. + The item ID of the node. + [out] Returns a pointer to the IUnknown interface of the document data object. + + + Renames a document and optionally gives ownership of the document to the specified project. + [in] The full path representing the original name. + [in] The full path representing the new name. + [in] An object representing the project that is to take ownership of the document. Pass the value (IVsHierarchy)-1 to indicate no change in ownership is to take place + [in] This value can be , , or . Pass to indicate no change in ownership is to take place. + + + Saves the specified file if it has changed since the last save. + The path to which the file was saved. This is either the original path or a new path specified by the user. + [in] The full path to the document to be saved. + + + Enumerates the documents in the Running Document Table. + An of type . + + + Indicates the client is no longer interested in receiving Running Document Table (RDT) events. + [in] A unique value returned from the method. See Remarks. + + + Releases a read or edit lock on the open document. + Lock values from the enumeration. + The identifier of the document data in the Running Document Table. + + + Provides a unified interface for accessing a set of selected objects. + + + Initializes a new object. The overload provides the ability to restrict user control over the and collections. + + + Creates a new object with the ability to restrict user control over the and collections. + If true, a request to change the throws a . If false, a request to change the is handled normally. + If false, a request to change the throws a . If false, a request to change the is handled normally. + + + Overriding this method enables an object to respond when selected. + + + Refers to all . + + + Determines the number of objects either those or items. + Returns if the operation is successful. + Use to indicate all members and to indicate only those selected. + A pointer to the number of items, this value is set by the method call. + + + Sets with the number of items or items and populates array with pointers to those objects. + Returns if the operation is successful. + Use to indicate all members and to indicate only those selected. + A pointer to the number of items, this value is set by the method call. + An array of size that contains pointers to the retrieved objects. + + + Sets the collection of selectable objects. + Returns if the operation is successful. + The size of the array of selected objects. + The array of objects to be selected. + If this value is true, ActivateObjects will be performed on the array of objects. + + + Gets the collection of selectable objects. + Returns a collection of selectable objects. + + + Refers to all . + + + Gets or sets the collection of selected objects. + Returns a collection of selected objects. + + + Raised when an external object calls the method with the flag set. + + + Represents a collection of services. + The type of the collection. + + + Initializes a new instance of T + + + Provides a unified service provider for managed VSPackages. + + + Initializes a instance with an existing interface. + A interface. + + + Initializes a new instance of the class with an existing object and optionally passes all requests to the underlying service provider. + An interface used to resolve services. + Determines if this service should respond to queries for and . + + + Create a new ServiceProvider for the given site. + The service provider. + The OLE service provider + + + Releases the resources used by the object. + + + Gets the specified service from the unmanaged service provider. + The requested service, or null if the service could not be located. + The GUID of the service to retrieve. + + + Gets type-based services from the unmanaged service provider. + The requested service, or null if the service could not be located. + The type of service to retrieve. The GUID of this type is used to obtain the service from the native service provider. + + + Gets the global service provider for the calling thread. + The global service provider. + + + Gets the current site object to resolve services. + The GUID of the requested interface. + The retrieved interface or null. + + + Sets the site object to resolve services. + The site to be set. + + + + + Acts as a hierarchical service provider. + + + Initializes a new instance of . + + + Gets a service of the specified type. + The requested service, or null if the service cannot be found. This service must be cast to the required service type. + The type of the service. + + + Provides a recommended service resolution order for common service providers. When multiple service providers are combined in a service provider hierarchy, they are given a numeric ordering. + + + Initializes a new instance of . + + + The order for a package service provider. + + + The order for a project item context service provider. + + + The order for a window pane service provider. + + + Represents an OLE-compatible data object. + + + Initializes a new instance of . + The . + + + Establishes a connection between the data object and the advise sink. + If the method succeeds, otherwise, an error code. + The structure that defines the format, target device, aspect, and medium that will be used for future notifications. + A set of flags that control the advise connection. + The advise sink. + [out] The token of the connection. This token is used to delete the connection later. + + + Deletes the advise connection. + The token that was returned from . + + + Gets an object that can be used to enumerate advise connections. + If the method succeeds, otherwise, an error code. + [out] The interface that allows you to enumerate advise connections. + + + Gets an object that allows you to enumerate the formats supported by the data object. + If the method succeeds, otherwise, an error code. + A pointer to the enumeration, which specifies the direction of the data flow. + [out] The enumerator. + + + Gets an alternate object. + If the method succeeds, otherwise, an error code. + The preferred format object. + [out] The returned format object. + + + Gets an alternate object. + The format object. + [out] The storage medium object. + + + Gets data from a source data object. + The format object. + The storage medium object. + + + Determines whether the data object is capable of rendering the data as specified. + If the method succeeds, otherwise, an error code. + The format object. + + + Transfers data. + The format object. + The storage medium object. + true if the object called owns the data, false if the caller retains ownership of the data. + + + Creates the ProjectTypeGuid key under $RegRoot$\Generators. This registration attribute is used by project systems that support single file generators. + + + Initializes a new instance of the class to register a custom code generator. + The supplied Type’s GUID (supplied by the [Guid] attribute on the class definition) that is used as the project type GUID for the path [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\{ver}\Generators\{ProjectTypeGuid}]. + The parameter is null. + + + Gets the GUID representing the generator type. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Executes a long-running operation at idle priority on the UI thread. To support yielding frequently, the operation should return null as frequently as possible to allow the component manager to schedule other tasks and yield to higher-priority operations.The task is executed repeatedly until SingleTaskIdleManager is disposed. + + + Initializes a new instance of the class. + Delegate that is called at idle time. + + + Unregisters the object from being called on Idle. This method is called when the object is disposed. + + + Called during each iteration of a message loop. + true if the message loop should continue, false otherwise. If false is returned, the component manager terminates the loop without removing from the queue. + The representing the reason. + The component data that was sent to . + The peeked message (from ). + + + Gives the component a chance to do idle time tasks. + true if more time is needed to perform the idle time tasks, false otherwise. + A set of flags indicating the type of idle tasks to perform, from . + + + Processes the message before it is translated and dispatched. + true if the message is consumed, false otherwise. + The message. + + + Called when the component manager wishes to know if the component is in a state in which it can terminate. + If is false, the component should simply return true if it can terminate, false otherwise. If is true, the component should return true if it can terminate without prompting the user. Otherwise it should prompt the user, either asking the user if it can terminate and returning true or false appropriately, or giving an indication as to why it cannot terminate and returning false. + true if the user should be prompted, otherwise false. + + + Reserved. + Always returns true. + Reserved. + Reserved. + Reserved. + Reserved. + + + Gets a window associated with the component. + The HWND, or null if no such window exists. + A value from . + Reserved for future use. Should be 0. + + + Notifies the component when a new object is being activated. + The component that is being activated. + true if is the same as the caller of this method, otherwise false. + The component registration information. + + if the host that is being activated, otherwise false. + The OLE host information. + Reserved. + + + Notifies the component when the host application gains or loses activation. + true if the application is being activated, false if it is losing activation. + The identifier of the thread that owns the window. + + + Notifies the component when the application enters or exits the specified state. + The state, from . + true if the application is entering the state, false if it is exiting the state. + + + Notifies the active component that it has lost its active status because the host or another component has become active. + + + Terminates the message loop. + + + Adds a solution persistence property name and related GUID. + + + Initializes a new instance of the class to register a solution persistence attribute for the provided property. + Name of the property. + + + Gets the property name. + + + Registers this attribute with the given context. + + + Unregisters this property. + + + An implementation of , used to modify the appearance and functionality of a task in the task list. + + + Initializes a new instance of . + + + Initializes a new instance of for the supplied exception. + The used to create the task. + + + Gets or sets whether or not the task can be deleted. + true if the task can be deleted, otherwise false. + + + Gets or sets the task's category. + + . + + + Gets or sets whether not the task's check box is currently selected or cleared. + true if the task is checked, otherwise false. + + + Gets or sets the column number within the file associated with the task. + The column number of the task. + + + Represents the keyword for the user context. This field is constant. + + + Handles events. + + + Gets or sets the file associated with the task. + The name of the file. + + + Creates a new user context. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] The that has been created. + + + Handles events. + + + Gets or sets the Help keyword associated with the task. + The Help keyword. + + + Gets or sets the index of the image associated with the task. + The index of the image associated with the task. + + + Gets or sets whether or not it is possible to edit the checked state of the task. + true if it is possible to edit the checked state of the task, otherwise false. + + + Gets or sets whether or not it is possible to edit the priority of a task. + true if it is possible to edit the priority of a task, otherwise false. + + + Gets or sets whether or not it is possible to edit the description of a task. + true if it is possible to edit the description of a task, otherwise false. + + + Gets or sets the line number of the file associated with the task. + The line number of the file associated with the task. + + + Gets whether or not it is possible to delete the task. + + . + [out] Returns true if it is possible to delete the task, otherwise false. + + + Sets the task category. + If the method succeeds, it returns . If it fails, it returns an error code. + An array of objects. + + + Gets the column number of the file associated with the task. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns the column number. + + + Gets the name of the file associated with the task. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns the name of the file. + + + Determines whether the task item's check box is currently selected or cleared. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns true if the check box is selected, otherwise false. + + + Gets the priority of the task. + If the method succeeds, it returns . If it fails, it returns an error code. + An array of objects. + + + Gets the description of the task. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] The description of the task. + + + Determines whether or not the task has associated help. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns true if there is help associated with the task, otherwise false. + + + Gets the index of the image associated with the task. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] The index of the associated image. + + + Determines whether or not the specified task field is read-only. + If the method succeeds, it returns . If it fails, it returns an error code. + The . + [out] Returns true if the field is read-only, otherwise false. + + + Gets the line number of the file associated with the task. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns the line number of the file. + + + Opens a file associated with a task and moves to the appropriate position in the file. + + . + + + Opens the Help resource associated with a task. + + . + + + Raised when a task has been deleted. + + . + + + Raised when a task has been filtered into or out of a view. + + . + If true, the task has become visible, otherwise it has become invisible. + + + Sets whether a task item's check box is selected or cleared. + + . + true if the check box is selected, false if it is cleared. + + + Sets the priority level of a task item. + + . + The . + + + Sets the description of the task. + + . + The description of the task. + + + Gets the index of the task in the subcategory list. + + . + [out] Returns the index. + + + Handles events. + + + Raised when the task has been deleted. + + . + + + Raised when the user requests Help; for example by right-clicking and selecting Show Error Help. + + . + + + Raised when the user attempts to navigate to the task's location in the file, for example by double-clicking on the task. + + . + + + Raised when a task has been removed from the task list. + + . + + + Gets or sets the priority of a task. + + . + + + Handles events. + + + Gets or sets the index of the subcategory of the task. + The index of the subcategory of a task. + + + Gets or sets the description of a task. + The description of a task. + + + Provides a set of task categories that specify the kind of task that is to be performed. + + + All tasks. Not a real category. It is used to allow a task list view to show all of the tasks in the task list.  + + + Build errors and warnings, and possibly deployment errors. + + + Tasks generated by special comments, such as "TODO," "UNDONE," or "TBD." Also used for informational messages.  + + + Errors generated as the user types source code. + + + Short cuts to code. Shortcuts are generated by the user right-clicking the editor window, and choosing Add Task List Shortcut from the pop-up menu. + + + User-defined tasks. + + + Miscellaneous tasks. + + + Tasks which pertain to Web page development. . + + + Represents a collection of values that identify types or severity of error messages that can appear in the Error List Options task window. + + + Represents an error. + + + Represents a warning. + + + Represents an informational note. + + + Provides values for task priorities. + + + High priority. + + + Normal priority. + + + Low priority. + + + This class implements . It provides a framework-friendly way to define a task provider and its associated services. + + + Initializes a new instance of the with the supplied service provider. + + . + + + Determines whether or not the provider is always visible in the dropdown menu even though it has no tasks. + true if it is always visible, otherwise false. + + + Gets or sets whether autorouting should be disabled. + true if autorouting should be disabled, false if it should be enabled. + + + Disposes this provider. + + + Disposes the resources (task collection, task list, and image list) of this provider. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Destroys the provider. + + + Gets the service of the specified type. + An object representing the service. + The type of the service. + + + Gets or sets the provider's image list (a list of icons for the tasks that belong to the provider). + + . + + + Gets or sets whether or not the task list should maintain the task order given to it by the task provider. + true if the task order should be maintained, otherwise false. + + + Gets an enumerator over the task items. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] . + + + Gets this provider's image list. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] . + + + Notifies the client to unregister the task provider from the task list if it has not been unregistered by the time the task list is closing. + + . + The task list. + + + Gets the re-registration key. + + . + [out] Returns the key. + + + Gets a list of subcategories for the tasks of this task provider. + + . + The number of subcategories in . + An array of subcategories + [out] The number of subcategories. + + + Gets an enumerator over task items. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] . + + + Gets this provider's image list. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] . + + + Gets or sets whether or not the task list should maintain the task order given to it by the task provider. + + . + [out] Returns true if the task order should be maintained, otherwise false. + + + Notifies the client to unregister the task provider from the task list if it has not been unregistered by the time the task list is closing. + If the method succeeds, it returns . If it fails, it returns an error code. + The task list. + + + Gets the reregistration key. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns the key. + + + Gets a list of subcategories for the tasks of this task provider. + If the method succeeds, it returns . If it fails, it returns an error code. + The number of subcategories in . + An array of subcategories + [out] The number of subcategories. + + + Gets the definition of the column with the specified index. + When implemented by derived classes, or an error code. + The index of the column. + An array of structures. + + + Gets the total number of columns supported by this provider, including columns that are not visible by default. + When implemented by derived classes, or an error code. + [out] Returns the total number of columns. By default returns 0. + + + Gets the behavior flags for this provider. + + . + [out] Returns . + + + Gets a unique GUID for this provider. This is used to persist and restore provider-specific data managed by the task list, such as user customizations of column width and order. + + . + [out] The GUID of the provider's type. + + + Gets the name of the provider. + + . + [out] The name of the provider. + + + Gets the provider's toolbar. + + . + [out] The GUID of the group to which the toolbar belongs. + [out] The ID of the toolbar. + + + If this method is implemented, all the provider's tasks will be listed under the surrogate provider in the list as though they belonged to the surrogate provider. + When implemented by derived classes, or an error code. + [out] The GUID of the surrogate provider. By default returns an empty GUID. + + + Raised when the user begins editing a task in place. + + . + The being edited. + + + Raised when the user finishes editing a task in-place. + + . + The being edited. + true if the user wishes to commit the changes, false if the user wishes to discard them. + [out] Returns true if the changes have been committed, false to disallow the user from leaving edit mode. + + + Navigates from the task to the correct position in the document, shown in the specified logical view. + true if it was possible to perform the navigation, otherwise false. + The task from which to do the navigation. + The logical view in which to display the document. + + + Gets or sets the GUID of this provider. + The GUID of this provider. + + + Gets or sets a localized name for this provider. + The localized name of the provider. + + + Informs the task list that there are new or edited tasks. + + + Restarts the refreshing of the task list after it has been suspended. + + + Displays the task list window. + + + Gets a collection of task subcategories. + A of task subcategories. + + + Stops refreshing the task list until is called. + + + Gets a collection of tasks. + + . + + + Gets or sets a group GUID and toolbar ID indicating which toolbar should be displayed when this provider is active. + The group GUID and toolbar ID indicating which toolbar should be displayed when this provider is active. + + + Gets or sets this provider's toolbar ID. + The toolbar ID. + + + Gets the task list. + + . + + + A container for objects. + + + Initializes a new instance of for the supplied task provider. + The task provider that owns these tasks. + + + Adds a task to the collection. + The index of the added task. + The task to add. + + + Removes all the tasks from the collection. + + + Gets whether or not the task exists in the collection + true if the task exists in the collection, otherwise false. + The task for which to search. + + + Gets the number of tasks in the collection. + The number of tasks in the collection. + + + Gets an enumerator for the collection. + + . + + + Gets the index of the specified task in the collection. + The index of the task. + The task for which to search. + + + Inserts a task in the collection at the specified index. + The index at which to insert the task. + The task to insert. + + + Gets or sets the task at the given index. + + . + The index of the task. + + + Removes a task from the collection. + The task to remove. + + + Removes the task at the specified index. + The index at which to remove the task. + + + Copies the collection to an array, starting at the specified index. + The array to which to copy the collection. + The index of the array at which to start the copy. + + + Gets whether or not the collection is synchronized. + By default returns false. + + + Gets the object that can be used to synchronize access to the collection. + By default returns the current instance of this collection. + + + Adds the task to the collection. + The index at which the task was added. + The task object. + + + Removes all the tasks from the list. + + + Gets whether or not the specified task exists in the collection. + true if the task exists in the collection, otherwise false. + The task to find. + + + Gets the index of the collection at which the specified task exists. + The index of the collection at which the task exists. + The task to find. + + + Inserts a task in the collection at the specified index. + The index at which to insert the task. + The task to insert. + + + Gets whether or not the collection is of a fixed size. + By default returns false. + + + Gets whether or not the collection is read-only. + By default returns false. + + + Gets or sets the task at the specified index. + The specified task. + The index of the collection. + + + Removes the specified task from the collection. + The task to be removed. + + + Removes the task from the specified index of the collection. + The index at which to remove the task. + + + Provides a generic dispatcher helper to ensure that a method is invoked on the application's main thread. + + + Initializes a new instance of . + + + Schedules an action for execution on the UI thread asynchronously. + The action to runnn. + + + Schedules an action for execution on the UI thread asynchronously. + The priority at which to run the action. + The action to run. + + + Determines whether the call is being made on the UI thread. + Returns true if the call is on the UI thread, otherwise returns false. + + + Gets a generic . + A generic . + + + Gets the invocation wrapper. + A disposable wrapper. + + + Calls an action on the UI thread, re-entering (if necessary) any code already executing on the UI thread. + The action to perform. + + + Evaluate a function on the UI thread. + Returns the result of the specified function evaluation. + The function to evaluate on the UI thread. + The type of the function evaluation result. + + + This enumeration provides a number of possible tool window orientations with respect to a docking window. + + + No tool window orientation indicated. + + + Tool window initially oriented against the top of the docking window. + + + Tool window initially oriented to the left of the docking window. + + + Tool window initially oriented to the right of the docking window. + + + Tool window initially oriented against the bottom of the docking window. + + + A default implementation for a tool window. It can be subclassed to implement a customized tool window. + + + Initializes a new instance of with a null service provider + + + Initializes an instance of this class. + The single constructor argument is a service provider that the created window can use to obtain services. This parameter must not be null because the tool window cannot add itself to the shell. + + + Gets or sets the index of the image in the bitmap strip to use for the window frame icon. + The index of the image to use for the window frame icon. + + + Gets or sets the resource ID for the bitmap strip from which to take the window frame icon. + The resource ID for the bitmap strip. + + + Gets or sets the caption for the tool window. + The caption of the tool window. + + + + + Gets or sets the that hosts the ToolWindowPane. + + . + + + Gets the that is associated with the tool window. + + . + + + + + Called when a toolbar is added to the tool window. + + + This method can be overridden by the derived class to execute any code that must run after the creation of . + + + Gets or sets the package that owns the tool window. + + . + + + + + + + + + Gets or sets the . + + if the tool window has a toolbar; otherwise, null. + + + + Gets or sets the toolbar drop target. + The drop target, if the window has a toolbar, otherwise null. + + + Gets or sets the location of the toolbar in the tool window. + A value from the enumeration. + + + Gets or sets the CLSID of a tool that should be used for this tool window. + The CLSID of the tool. + + + Represents the active state of a UI context. + + + Constructs a instance identified with the given GUID. + The constructed UIContext instance. + GUID of the UIContext. + + + Gets the current state of the UI context, whether it is active or not. + + + Occurs when the property changes values. + + + Occurs whenever the UI context becomes active or inactive. + + + Event arguments for the event. + + + Initializes a new instance of the class. + Specifies whether is active or not. + + + Gets whether the has become active or not. If true, it is active. + + + Provides seamless hosting of Windows Presentation Foundation (WPF) content inside a native dialog running an IsDialogMessage-style message loop. This class enables tabbing into and out of the WPF child window handle (HWND), and enables keyboard navigation within the WPF child HWND. + + + Initializes a new instance of the class. + + + Gets the Windows Presentation Foundation (WPF) child element to be hosted inside the dialog page. + The WPF child element. + + + Routed event used to determine whether or not key input in the dialog should be handled by the dialog or by the content of this page. If this event is marked as handled, the key press is handled by the content and DLGC_WANTALLKEYS is returned from WM_GETDLGCODE. If the event is not handled, then only arrow keys, tabbing, and character input is handled in this dialog page. + + + Gets the handle to the UI control hosted in the ToolsOption page. + The handle to the UI control. + + + Specifies the results of the unlock operation. + + + The unlock operation completed successfully. + + + The close operation did not complete because the user cancelled the PromptSave dialog, and therefore the document remained unlocked. + + + Wraps the class. Provides an unescaped version of for file URL types and for HTTP URL types. Also returns an unescaped result from so that it can be presented to the user. + + + Initializes a new instance of that is based on the specified base and relative path. + The base . + The relative path. + + + Initializes a new instance of for the specified path. + The path for which to create the URL. + + + Gets the absolute URL as a string. + The string value of the absolute URL. + + + Returns the unescaped absolute URL for the parent directory that contains the file that is referenced by this URL object. + The unescaped absolute URL of the parent directory. + + + Gets the unescaped path up to the specified index. + The unescaped path up to the specified index of the array. + The index of the array up to which to get the path. + + + Gets the unescaped path between the two specified points + The unescaped path. + The start point. + The end point. + + + Gets the unescaped remainder of the path, starting at the specified segment. + The unescaped remainder of the path, starting with the specified index of the array. + The index of the array at which to start getting the path. + + + Determines whether the URL represents a file (as opposed to an HTTP location). + true if the URL represents a file; otherwise, false. + + + Joins the specified segments into a path. + The unescaped path, starting at segment and not including segment or higher. + The index of the array at which to start the path. + The index of the array at which to stop adding segments to the path. + + + Makes the specified relative with respect to the current one. + Using the current as the base, the relative path of . + The to make relative. + + + Moves the URL from the old base to the new one. + The new . + The original base. + The new base. + + + Gets an array of the segments of the URL. + An array of the segments of the URL. + + + Converts an escaped string to an unescaped string. + The unescaped string. + The string to convert. + true if the string represents a file URL; otherwise, false. + + + Gets the URI for this URL. + + . + + + Keeps a list of tokens, and values that correspond to those tokens. This class is used to tokenize and untokenize a given string. + + + Initializes a new instance of the class. + + + Add a token and its value to the list. + Name of the token to add. + Value of the token. + + + Gets a Boolean value that indicates if environment variables will be replaced when untokenizing a string. To be replaced, environment variables must be in the format "%variable%". + + + Replaces a value with its corresponding token if the list contains a value that is at the front of the parameter string. + The tokenized string. + String to be converted. + + + Replaces a token with its corresponding value if the list contains a token that is part of the parameter string. Optionally, this method replaces the environment variables found in the parameter string. + The untokenized string. + String to be converted. + + + Class used to map between identifiers (used by ) and keys used by WPF objects. The keys provided by this class can be used to reference instances that Visual Studio places in . + + + Gets the accent border key. + The accent border key. + + + Gets the accent dark key. + The accent dark key. + + + Gets the accent light key. + The accent light key. + + + Gets the accent medium key. + The accent medium key. + + + Gets the accent pale key. + + + Gets the active border key. + The active border key. + + + Gets the active caption key. + The active caption key. + + + Gets the application workspace key. + The application workspace key. + + + Gets the auto-hide resize grip key. + The auto-hide resize grip key. + + + Gets the auto-hide tab background key. + The auto-hide tab background key. + + + Gets the auto-hide tab background key. + The auto-hide tab background key. + + + Gets the auto-hide tab background horizontal gradient key. + The auto-hide tab background horizontal gradient key. + + + Gets the auto-hide tab background vertical gradient key. + The auto-hide tab background vertical gradient key. + + + Gets the auto-hide tab border key. + The auto-hide tab border key. + + + Gets the auto-hide tab mouse-over background begin key. + + + Gets the auto-hide tab mouse-over background end key. + The auto-hide tab mouse-over background end key. + + + Gets the auto-hide tab mouse-over background horizontal gradient key. + The auto-hide tab mouse-over background horizontal gradient key. + + + Gets the auto-hide tab mouse-over background vertical gradient key. + The auto-hide tab mouse-over background vertical gradient key. + + + Gets the auto-hide tab mouse-over border key. + The auto-hide tab mouse-over border key. + + + Gets the auto-hide tab mouse-over text key. + The auto-hide tab mouse-over text key. + + + Gets the auto-hide tab text key. + The auto-hide tab text key. + + + Gets the background key. + The background key. + + + Gets the branded UI background key. + The branded UI background key. + + + Gets the branded UI border key. + + + Gets the branded UI fill key. + The branded UI fill key. + + + Gets the branded UI text key. + The branded UI text key. + + + Gets the branded UI title key. + The branded UI title key. + + + Gets the button face key. + The button face key. + + + Gets the button highlight key. + The button highlight key. + + + Gets the button shadow key. + The button shadow key. + + + Gets the button text key. + The button text key. + + + Gets the caption text key. + The caption text key. + + + Gets the class designer class compartment key. + The class designer class compartment key. + + + Gets the class designer class header background key. + The class designer class header background key. + + + Gets the class designer class header background key. + The class designer class header background key. + + + Gets the class designer comment shape background key. + The class designer comment shape background key. + + + Gets the class designer comment text key. + The class designer comment text key. + + + Gets the class designer compartment separator key. + The class designer compartment separator key. + + + Gets the class designer connection route border key. + The class designer connection route border key. + + + Gets the class designer default connection key. + The class designer default connection key. + + + Gets the class designer default shape background key. + The class designer default shape background key. + + + Gets the class designer default shape border key. + The class designer default shape border key. + + + Gets the class designer default shape subtitle key. + The class designer default shape subtitle key. + + + Gets the class designer default shape text key. + The class designer default shape text key. + + + Gets the class designer default shape title background key. + The class designer default shape title background key. + + + Gets the class designer default shape title key. + The class designer default shape title key. + + + Gets the class designer delegate compartment key. + The class designer delegate compartment key. + + + Gets the class designer delegate header key. + The class designer delegate header key. + + + Gets the class designer diagram background key. + The class designer diagram background key. + + + Gets the class designer emphasis border key. + The class designer emphasis border key. + + + Gets the class designer enumeration header key. + The class designer enumeration header key. + + + Gets the class designer field association key. + The class designer field association key. + + + Gets the class designer gradient end key. + The class designer gradient end key. + + + Gets the class designer inheritance key. + The class designer inheritance key. + + + Gets the class designer interface compartment key. + The class designer interface compartment key + + + Gets the class designer interface header key. + The class designer interface header key. + + + Gets the class designer lasso key. + The class designer lasso key. + + + Gets the class designer lollipop key. + The class designer lollipop key. + + + Gets the class designer property association key. + The class designer property association key. + + + Gets the class designer referenced assembly border key. + The class designer referenced assembly border key. + + + Gets the class designer resizing shape border key. + The class designer resizing shape border key. + + + Gets the class designer shape border key. + The class designer shape border key. + + + Gets the class designer shape shadow key. + The class designer shape shadow key. + + + Gets the class designer temporary connection key. + The class designer temporary connection key. + + + Gets the class designer typedef header key. + The class designer typedef header key + + + Gets the class designer typedef key. + The class designer typedef key. + + + Gets the class designer unresolved text key. + The class designer unresolved text key. + + + Gets the class designer Visual Basic module compartment key. + The class designer Visual Basic module compartment key. + + + Gets the class designer Visual Basic module header key. + The class designer Visual Basic module header key. + + + Gets the combo box background key. + The combo box background key. + + + Gets the combo box border key. + The combo box border key. + + + Gets the combo box disabled background key. + The combo box disabled background key. + + + Gets the combo box disabled border key. + The combo box disabled border key. + + + Gets the combo box disabled glyph key. + The combo box disabled glyph key. + + + Gets the combo box glyph key. + The combo box glyph key. + + + Gets the combo box mouse down background key. + The combo box mouse down background key. + + + Gets the combo box mouse down border key. + The combo box mouse down border key. + + + Gets the combo box mousse over background begin key. + The combo box mousse over background begin key. + + + Gets the combo box mouse over background end key. + The combo box mouse over background end key. + + + Gets the combo box mouse over background gradient key. + The combo box mouse over background end key. + + + Gets the combo box mouse over background middle1 key. + The combo box mouse over background middle1 key. + + + Gets the combo box mouse over background middle2 key. + The combo box mouse over background middle2 key. + + + Gets the combo box mouse over border key. + The combo box mouse over border key. + + + Gets the combo box mouse over glyph key. + The combo box mouse over glyph key. + + + Gets the combo box popup background begin key. + The combo box popup background begin key. + + + Gets the combo box popup background end key. + The combo box popup background end key. + + + Gets the combo box popup background gradient key. + The combo box popup background gradient key. + + + Gets the combo box popup border key. + The combo box popup border key. + + + Gets the command bar border key. + The command bar border key. + + + Gets the command bar checkbox key. + The command bar checkbox key. + + + Gets the command bar drag handle key. + The command bar drag handle key. + + + Gets the command bar drag handle shadow key. + The command bar drag handle shadow key. + + + Gets the command bar gradient begin key. + The command bar gradient begin key. + + + Gets the command bar gradient end key. + The command bar gradient end key. + + + Gets the command bar gradient key. + The command bar gradient key. + + + Gets the command bar gradient middle key. + The command bar gradient middle key. + + + Gets the command bar horizontal gradient key. + The command bar horizontal gradient key. + + + Gets the command bar hover key. + The command bar hover key. + + + Gets the command bar hover over selected icon border key. + The command bar hover over selected icon border key. + + + Gets the command bar hover over selected icon key. + The command bar hover over selected icon key. + + + Gets the command bar hover over selected key. + The command bar hover over selected key. + + + Gets the command bar menu background gradient begin key. + The command bar menu background gradient begin key. + + + Gets the command bar menu background gradient end key. + The command bar menu background gradient end key. + + + Gets the command bar menu background gradient key. + the command bar menu background gradient key. + + + Gets the command bar menu border key. + The command bar menu border key. + + + Gets the command bar menu icon background key. + The command bar menu icon background key. + + + Gets the command bar menu mouse over submenu glyph key. + The command bar menu mouse over submenu glyph key. + + + Gets the command bar menu separator key. + The command bar menu separator key. + + + Gets the command bar menu submenu glyph key. + The command bar menu submenu glyph key. + + + Gets the command bar mouse down background begin key. + The command bar mouse down background begin key. + + + Gets the command bar mouse down background end key. + The command bar mouse down background end key. + + + Gets the command bar mouse down background gradient key. + The command bar mouse down background gradient key. + + + Gets the command bar mouse down background middle key. + The command bar mouse down background middle key. + + + Gets the command bar mouse down border key. + The command bar mouse down border key. + + + Gets the command bar mouse over background begin key. + The command bar mouse over background begin key. + + + Gets the command bar mouse over background end key. + The command bar mouse over background end key. + + + Gets the command bar mouse over background gradient key. + The command bar mouse over background gradient key. + + + Gets the command bar mouse over background middle1 key. + The command bar mouse over background middle1 key. + + + Gets the command bar mouse over background middle2 key. + The command bar mouse over background middle2 key. + + + Gets the command bar options background key. + The command bar options background key. + + + Gets the command bar options glyph key. + The command bar options glyph key. + + + Gets the command bar options mouse down background begin key. + The command bar options mouse down background begin key. + + + Gets the command bar options mouse down background end key. + The command bar options mouse down background end key. + + + Gets the command bar options mouse down background horizontal gradient key. + The command bar options mouse down background horizontal gradient key. + + + Gets the command bar options mouse down background middle key. + The command bar options mouse down background middle key. + + + Gets the command bar options mouse down background vertical gradient key. + The command bar options mouse down background vertical gradient key. + + + Gets the command bar options mouse over background begin key. + The command bar options mouse over background begin key. + + + Gets the command bar options mouse over background end key. + The command bar options mouse over background end key. + + + Gets the command bar options mouse over background horizontal gradient key. + The command bar options mouse over background horizontal gradient key. + + + Gets the command bar options mouse over background middle1 key. + The command bar options mouse over background middle1 key. + + + Gets the command bar options mouse over background middle2 key. + The command bar options mouse over background middle2 key. + + + Gets the command bar options mouse over background vertical gradient key. + The command bar options mouse over background vertical gradient key. + + + Gets the command bar options mouse over glyph key. + The command bar options mouse over glyph key. + + + Gets the command bar selected border key. + The command bar selected border key. + + + Gets the command bar selected key. + The command bar selected key. + + + Gets the command bar shadow key. + The command bar shadow key. + + + Gets the command bar text active key. + The command bar text active key. + + + Gets the command bar text hover key. + The command bar text hover key. + + + Gets the command bar text inactive key. + The command bar text inactive key. + + + Gets the command bar text selected key. + The command bar text selected key. + + + Gets the command bar toolbar border key. + The command bar toolbar border key. + + + Gets the command bar toolbar separator key. + The command bar toolbar separator key. + + + Gets the command shelf background gradient begin key. + The command shelf background gradient begin key. + + + Gets the command shelf background gradient end key. + The command shelf background gradient end key. + + + Gets the command shelf background gradient key. + The command shelf background gradient key. + + + Gets the command shelf background gradient middle key. + The command shelf background gradient middle key. + + + Gets the command shelf highlight gradient begin key. + The command shelf highlight gradient begin key. + + + Gets the command shelf highlight gradient end key. + The command shelf highlight gradient end key. + + + Gets the command shelf highlight gradient key. + The command shelf highlight gradient key. + + + Gets the command shelf highlight gradient middle key. + The command shelf highlight gradient middle key. + + + Gets the control edit hint text key. + The control edit hint text key. + + + Gets the control edit required background key. + The control edit required background key. + + + Gets the control edit required hint text key. + The control edit required hint text key. + + + Gets the control link text hover key. + The control link text hover key. + + + Gets the control link text key. + The control link text key. + + + Gets the control link text pressed key. + The control link text pressed key. + + + Gets the control outline key. + The control outline key. + + + Gets the debugger data tip active background key. + The debugger data tip active background key. + + + Gets the debugger data tip active border key. + The debugger data tip active border key. + + + Gets the debugger data tip active highlight key. + The debugger data tip active highlight key. + + + Gets the debugger data tip active highlight text key. + The debugger data tip active highlight text key. + + + Gets the debugger data tip active separator key. + The debugger data tip active separator key. + + + Gets the debugger data tip active text key. + The debugger data tip active text key. + + + Gets the debugger data tip inactive background key. + The debugger data tip inactive background key. + + + Gets the debugger data tip inactive border key. + The debugger data tip inactive border key. + + + Gets the debugger data tip inactive highlight key. + The debugger data tip inactive highlight key. + + + Gets the debugger data tip inactive highlight text key. + The debugger data tip inactive highlight text key. + + + Gets the debugger data tip inactive separator key. + The debugger data tip inactive separator key. + + + gets + + + Gets the designer background key. + The designer background key. + + + Gets the designer selection dots key. + The designer selection dots key. + + + Gets the designer tray key. + The designer tray key. + + + Gets the designer watermark key. + The designer watermark key. + + + Gets the diagnostic report background key. + The diagnostic report background key. + + + Gets the diagnostic report secondary page header key. + The diagnostic report secondary page header key. + + + Gets the diagnostic report secondary page subtitle key. + The diagnostic report secondary page subtitle key. + + + Gets the diagnostic report secondary page title key. + The diagnostic report secondary page title key. + + + Gets the diagnostic report summary page header key. + The diagnostic report summary page header key. + + + Gets the diagnostic report summary page subtitle key. + The diagnostic report summary page subtitle key. + + + Gets the diagnostic report summary page title key. + The diagnostic report summary page title key. + + + Gets the diagnostic report text key. + The diagnostic report text key. + + + Gets the dock target background key. + The dock target background key. + + + Gets the dock target border key. + The dock target border key. + + + Gets the dock target button background begin key. + The dock target button background begin key. + + + Gets the dock target button background end key. + The dock target button background end key. + + + Gets the dock target button background gradient key. + The dock target button background gradient key. + + + Gets the dock target button border key. + The dock target button border key. + + + Gets the dock target glyph arrow key. + The dock target glyph arrow key. + + + Gets the dock target glyph background begin key. + The dock target glyph background begin key. + + + Gets the dock target glyph background end key. + The dock target glyph background end key. + + + Gets the dock target glyph background gradient key. + The dock target glyph background gradient key. + + + Gets the dock target glyph border key. + The dock target glyph border key. + + + Gets the dropdown background key. + The dropdown background key. + + + Gets the dropdown border key. + The dropdown border key. + + + Gets the dropdown disabled background key. + The dropdown disabled background key. + + + Gets the dropdown disabled border key. + The dropdown disabled border key. + + + Gets the dropdown disabled glyph key. + The dropdown disabled glyph key. + + + Gets the dropdown glyph key. + The dropdown glyph key. + + + Gets the dropdown mouse down background key. + The dropdown mouse down background key. + + + Gets the dropdown mouse down border key. + The dropdown mouse down border key. + + + Gets the dropdown mouse-over background begin key. + The dropdown mouse-over background begin key. + + + Gets the dropdown mouse-over background end key. + The dropdown mouse-over background end key. + + + Gets the dropdown mouse-over background gradient key. + The dropdown mouse-over background gradient key. + + + Gets the dropdown mouse-over background middle1 key. + The dropdown mouse-over background middle1 key. + + + Gets the dropdown mouse-over background middle2 key. + The dropdown mouse-over background middle2 key. + + + Gets the dropdown mouse-over border key. + The dropdown mouse-over border key. + + + Gets the dropdown mouse-over glyph key. + The dropdown mouse-over glyph key. + + + Gets the dropdown popup background begin key. + The dropdown popup background begin key. + + + Gets the dropdown popup background end key. + The dropdown popup background end key. + + + Gets the dropdown popup background gradient key. + The dropdown popup background gradient key. + + + Gets the dropdown popup border key. + The dropdown popup border key. + + + Gets the drop shadow background key. + The drop shadow background key. + + + Gets the editor expansion border key. + the editor expansion border key. + + + Gets the editor expansion fill key. + The editor expansion fill key. + + + Gets the editor expansion link key. + The editor expansion link key. + + + Gets the editor expansion text key. + The editor expansion text key. + + + Gets the environment background gradient begin key. + The environment background gradient begin key. + + + Gets the environment background gradient end key. + The environment background gradient end key. + + + Gets the environment background gradient key. + The environment background gradient key. + + + Gets the environment background gradient middle1 key. + The environment background gradient middle1 key. + + + Gets the environment background gradient middle2 key. + The environment background gradient middle2 key. + + + Gets the environment background key. + The environment background key. + + + Gets the environment background texture1 key. + The environment background texture1 key. + + + Gets the environment background texture2 key. + The environment background texture2 key. + + + Gets the environment background texture key. + The environment background texture key. + + + Gets the extension manager star highlight1 key. + The extension manager star highlight1 key. + + + Gets the extension manager star highlight2 key. + The extension manager star highlight2 key. + + + Gets the extension manager star inactive1 key. + The extension manager star inactive1 key. + + + Gets the extension manager star inactive2 key. + The extension manager star inactive2 key. + + + Gets the file tab border key. + The file tab border key. + + + Gets the file tab channel background key. + The file tab channel background key. + + + Gets the file tab document border background key. + The file tab document border background key. + + + Gets the file tab document border highlight key. + The file tab document border highlight key. + + + Gets the file tab document border shadow key. + The file tab document border shadow key. + + + Gets the file tab gradient dark key. + The file tab gradient dark key. + + + Gets the file tab gradient key. + The file tab gradient key. + + + Gets the file tab gradient light key. + The file tab gradient light key. + + + Gets the file tab hot border key. + The file tab hot border key. + + + Gets the file tab hot glyph key. + The file tab hot glyph key. + + + Gets the file tab hot gradient bottom key. + The file tab hot gradient bottom key. + + + Gets the file tab hot gradient key. + The file tab hot gradient key. + + + Gets the file tab hot gradient top key. + The file tab hot gradient top key. + + + Gets the file tab hot text key. + Tuhe file tab hot text key. + + + Gets the file tab inactive document border background key. + The file tab inactive document border background key. + + + Gets the file tab inactive document border edge key. + The file tab inactive document border edge key. + + + Gets the file tab inactive gradient bottom key. + The file tab inactive gradient bottom key. + + + Gets the file tab inactive gradient key. + The file tab inactive gradient key. + + + Gets the file tab inactive gradient key. + The file tab inactive gradient key. + + + Gets the file tab inactive text key. + The file tab inactive text key. + + + Gets the file tab last active document border background key. + The file tab last active document border background key. + + + Gets the file tab last active document border edge key. + The file tab last active document border edge key. + + + Gets the file tab last active glyph key. + The file tab last active glyph key. + + + Gets the file tab last active gradient bottom key. + The file tab last active gradient bottom key. + + + Gets the file tab last active gradient key. + The file tab last active gradient key. + + + Gets the file tab last active gradient middle1 key. + The file tab last active gradient middle1 key. + + + Gets the file tab last active gradient middle2 key. + The file tab last active gradient middle2 key. + + + Gets the file tab last active gradient top key. + The file tab last active gradient top key. + + + Gets the file tab last active text key. + The file tab last active text key. + + + Gets the file tab selected background key. + The file tab selected background key. + + + Gets the file tab selected border key. + The file tab selected border key. + + + Gets the file tab selected gradient bottom key. + The file tab selected gradient bottom key. + + + Gets the file tab selected gradient key. + The file tab selected gradient key. + + + Gets the file tab selected gradient middle1 key. + The file tab selected gradient middle1 key. + + + Gets the file tab selected gradient middle2 key. + The file tab selected gradient middle2 key. + + + Gets the file tab selected gradient top key. + The file tab selected gradient top key. + + + Gets the file tab selected text key. + The file tab selected text key. + + + Gets the file tab text key. + The file tab text key. + + + Gets the form smart tag action tag border key. + The form smart tag action tag border key. + + + Gets the form smart tag action tag fill key. + The form smart tag action tag fill key. + + + Gets the form start tag object tag border key. + The form start tag object tag border key. + + + Gets the form smart tag object tag fill key. + The form smart tag object tag fill key. + + + Gets the WPF brush key for a given identifier. The input is. The output is + A key which can be used to reference the brush in Visual Studio from XAML. + an identifier from the enumeration. + + + Gets the identifier for a given WPF brush resource key. + An identifier from the enumeration used with . + A key that can be used to reference the color in Visual Studio from XAML. + + + Gets the gray text key. + The gray text key. + + + Gets the grid heading background key. + The grid heading background key. + + + Gets the grid heading text key. + The grid heading text key. + + + Gets the grid line key. + The grid line key. + + + Gets the help How Do I pane background key. + The help How Do I pane background key. + + + Gets the help How Do I pane link key. + The help How Do I pane link key. + + + Gets the help How Do I pane text key. + The help How Do I pane text key. + + + Gets the help How Do I task background key. + The help How Do I task background key. + + + Gets the help How Do I task link key. + The help How Do I task link key. + + + Gets the help How Do I task text key. + The help How Do I task text key. + + + Gets the help search background key. + The help search background key. + + + Gets the help search border key. + The help search border key. + + + Gets the help search filter background key. + The help search filter background key. + + + Gets the help search filter border key. + The help search filter border key. + + + Gets the help search filter text key. + The help search filter text key. + + + Gets the help search frame background key. + The help search frame background key. + + + Gets the help search frame text key. + The help search frame text key. + + + Gets the help search panel rules key. + The help search panel rules key. + + + Gets the help search provider icon key. + The help search provider icon key. + + + Gets the help search provider selected background key. + The help search provider selected background key. + + + Gets the help search provider selected text key. + The help search provider selected text key. + + + Gets the help search provider unselected background key. + The help search provider unselected background key. + + + Gets the help search provider unselected text key. + The help search provider unselected text key. + + + Gets the help search result link selected key. + The help search result link selected key. + + + Gets the help search result link unselected key. + The help search result link unselected key. + + + Gets the help search result selected background key. + The help search result selected background key. + + + Gets the help search result selected text key. + The help search result selected text key. + + + Gets the help search text key. + The help search text key. + + + Gets the highlight key. + The highlight key. + + + Gets the highlight text key. + The highlight text key. + + + Gets the inactive border key. + The inactive border key. + + + Gets the inactive caption key. + The inactive caption key. + + + Gets the inactive caption text key. + The inactive caption text key. + + + Gets the info background key. + The info background key. + + + Gets the info text key. + The info text key. + + + Gets the MDI client border key. + The MDI client border key. + + + Gets the menu key. + The menu key. + + + Gets the menu text key. + The menu key. + + + Gets the new project background key. + The new project background key. + + + Gets the new project item inactive begin key. + The new project item inactive begin key. + + + Gets the new project item inactive border key. + The new project item inactive border key. + + + Gets the new project item inactive end key. + The new project item inactive end key. + + + Gets the new project item inactive gradient key. + The new project item inactive gradient key. + + + Gets the new project item selected border key. + The new project item selected border key. + + + Gets the new project item selected key. + The new project item selected key. + + + Gets the new project provider hover begin key. + The new project provider hover begin key. + + + Gets the new project provider hover end key. + The new project provider hover end key. + + + Gets the new project provider hover foreground key. + The new project provider hover foreground key. + + + Gets the new project provider hover gradient key. + The new project provider hover gradient key. + + + Gets the new project provider hover middle1 key. + The new project provider hover middle1 key. + + + Gets the new project provider hover middle1 key. + The new project provider hover middle1 key. + + + Gets the new project provider inactive begin key. + The new project provider inactive begin key. + + + Gets the new project provider inactive end key. + The new project provider inactive end key. + + + Gets the new project provider inactive foreground key. + The new project provider inactive foreground key. + + + Gets the the new project provider inactive gradient key. + The new project provider inactive gradient key. + + + Gets the page content expander chevron key. + The page content expander chevron key. + + + Gets the page content expander separator key. + The page content expander separator key. + + + Gets the page sidebar expander body key. + The page sidebar expander body key. + + + Gets the page sidebar expander chevron key. + The page sidebar expander chevron key. + + + Gets the page sidebar expander header hover key. + The page sidebar expander header hover key. + + + Gets the page sidebar expander header key. + The page sidebar expander header key. + + + Gets the page sidebar expander header pressed key. + The page sidebar expander header pressed key. + + + Gets the page sidebar expander separator key. + The page sidebar expander separator key. + + + Gets the page sidebar expander text key. + The page sidebar expander text key. + + + Gets the panel border key. + The panel border key. + + + Gets the panel gradient dark key. + The panel gradient dark key. + + + Gets the panel gradient key. + The panel gradient key. + + + Gets the panel gradient light key. + The panel gradient light key. + + + Gets the panel hover over close border key. + The panel hover over close border key. + + + Gets the panel hover over close fill key. + The panel hover over close fill key. + + + Gets the panel hyperlink hover key. + The panel hyperlink hover key. + + + Gets the panel hyperlink key. + The panel hyperlink key. + + + Gets the panel hyperlink pressed key. + The panel hyperlink pressed key. + + + Gets the panel separator key. + The panel separator key. + + + Gets the panel subgroup separator key. + The panel subgroup separator key. + + + Gets the panel text key. + The panel text key. + + + Gets the panel title bar key. + The panel title bar key. + + + Gets the panel title bar text key. + The panel title bar text key. + + + Gets the panel title bar unselected key. + The panel title bar unselected key. + + + Gets the project designer background gradient begin key. + The project designer background gradient begin key. + + + Gets the project designer background gradient end key. + The project designer background gradient end key. + + + Gets the project designer background gradient key. + The project designer background gradient key. + + + Gets the project designer border inside key. + The project designer border inside key. + + + Gets the project designer border inside key. + The project designer border inside key. + + + Gets the project designer contents background key. + The project designer contents background key. + + + Gets the project designer tab background gradient begin key. + The project designer tab background gradient begin key. + + + Gets the project designer tab background gradient end key. + The project designer tab background gradient end key. + + + Gets the project designer tab background gradient key. + The project designer tab background gradient key. + + + Gets the project designer tab selected background key. + The project designer tab selected background key. + + + Gets the project designer tab selected border key. + The project designer tab selected border key. + + + Gets the project designer tab selected highlight1 key. + The project designer tab selected highlight1 key. + + + Gets the project designer tab selected highlight2 key. + The project designer tab selected highlight2 key. + + + Gets the project designer tab selected inside border key. + The project designer tab selected inside border key. + + + Gets the project designer tab separator bottom gradient begin key. + The project designer tab separator bottom gradient begin key. + + + Gets the project designer tab separator bottom gradient end key. + The project designer tab separator bottom gradient end key. + + + Gets the project designer tab separator bottom gradient key. + The project designer tab separator bottom gradient key. + + + Gets the project designer tab separator top gradient begin key. + The project designer tab separator top gradient begin key. + + + Gets the project designer tab separator top gradient end key. + The project designer tab separator top gradient end key. + + + Gets the project designer tab separator top gradient key. + The project designer tab separator top gradient key. + + + Gets the screen tip background key. + The screen tip background key. + + + Gets the screen tip border key. + The screen tip border key. + + + Gets the screen tip text key. + The screen tip text key. + + + Get the scrollbar arrow background key. + The scrollbar arrow background key. + + + Gets the scrollbar arrow disabled background key. + The scrollbar arrow disabled background key. + + + Gets the scrollbar arrow mouse-over background key. + The scrollbar arrow mouse-over background key. + + + Gets the scrollbar arrow pressed background key. + The scrollbar arrow pressed background key. + + + Gets the scrollbar background key. + The scrollbar background key. + + + Gets the scrollbar disabled background key. + The scrollbar disabled background key. + + + Gets the scrollbar key. + The scrollbar key. + + + Gets the scrollbar thumb background key. + The scrollbar thumb background key. + + + Gets the scrollbar thumb border key. + The scrollbar thumb border key. + + + Gets the scrollbar thumb glyph key. + The scrollbar thumb glyph key. + + + Gets the scrollbar thumb mouse-over background key. + The scrollbar thumb mouse-over background key. + + + Gets the scrollbar thumb pressed background key. + The scrollbar thumb pressed background key. + + + Gets the search box background key. + The search box background key. + + + Gets the search box border key. + The search box border key. + + + Gets the search box mouse-over background begin key. + The search box mouse-over background begin key. + + + Gets the search box mouse-over background end key. + The search box mouse-over background end key. + + + Gets the search box mouse-over background middle1 key. + The search box mouse-over background middle1 key. + + + Gets the search box mouse-over background middle2 key. + The search box mouse-over background middle2 key. + + + Gets the search box mouse-over border key. + The search box mouse-over border key. + + + Gets the search box mouse-over border key. + The search box mouse-over border key. + + + Gets the search box pressed border key. + The search box pressed border key. + + + Gets the sidebar background key. + The sidebar background key. + + + Gets the sidebar gradient dark key. + The sidebar gradient dark key. + + + Gets the sidebar gradient key. + The sidebar gradient key. + + + Gets the sidebar gradient light key. + The sidebar gradient light key. + + + Gets the sidebar text key. + The sidebar text key. + + + Gets the smart tag border key. + The smart tag border key. + + + Gets the smart tag fill key. + The smart tag fill key. + + + Gets the smart tag hover border key. + The smart tag hover border key. + + + Gets the smart tag hover fill key. + the smart tag hover fill key. + + + Gets the smart tag hover text key. + The smart tag hover text key. + + + Gets the smart tag text key. + The smart tag text key. + + + Gets the snap lines key. + The snap lines key. + + + Gets the snap lines padding key. + The snap lines padding key. + + + Gets the snap lines text baseline key. + The snap lines text baseline key. + + + Gets the sort background key. + The sort background key. + + + Gets the sort text key. + The sort text key. + + + Gets the splash screen border key. + The splash screen border key. + + + Gets the start page background gradient begin key. + The start page background gradient begin key. + + + Gets the start page background gradient end key. + The start page background gradient end key. + + + Gets the start page background key. + The start page background key. + + + Gets the start page button border key. + The start page button border key. + + + Gets the start page button mouse-over background begin key. + The start page button mouse-over background begin key. + + + Gets the start page button mouse-over background end key. + The start page button mouse-over background end key. + + + Gets the start page button mouse-over background key. + The start page button mouse-over background key. + + + Gets the start page button mouse-over background middle1 key. + The start page button mouse-over background middle1 key. + + + Gets the start page button mouse-over background middle2 key. + The start page button mouse-over background middle2 key. + + + Gets the start page button pin down key. + The start page button pin down key. + + + Gets the start page button pin hover key. + The start page button pin hover key. + + + Gets the start page button pinned key. + The start page button pinned key. + + + Gets the start page button text hover key. + The start page button text hover key. + + + Gets the start page button text key. + The start page button text hover key. + + + Gets the start page button unpinned key. + The start page button unpinned key. + + + Gets the start page selected item background key. + The start page selected item background key. + + + Gets the start page selected item stroke key. + The start page selected item stroke key. + + + Gets the start page separator key. + The start page separator key. + + + Gets the start page tab background begin key. + The start page tab background begin key. + + + Gets the start page tab background end key. + The start page tab background end key. + + + Gets the start page tab background key. + The start page tab background key. + + + Gets the start page tab mouse-over background begin key. + The start page tab mouse-over background begin key. + + + Gets the start page tab mouse-over background end key. + The start page tab mouse-over background end key. + + + Gets the start page tab mouse-over background key. + The start page tab mouse-over background key. + + + Gets the start page text body key. + The start page text body key. + + + Gets the start page text body selected key. + The start page text body selected key. + + + Gets the start page text body unselected key. + The start page text body unselected key. + + + Gets the start page text control link selected hover key. + The start page text control link selected hover key. + + + Gets the start page text control link selected key. + The start page text control link selected key. + + + Gets the start page text date key. + The start page text date key. + + + Gets the start page text heading key. + The start page text heading key. + + + Gets the start page text heading mouse-over key. + The start page text heading mouse-over key. + + + Gets the start page text heading selected key. + The start page text heading selected key. + + + Gets the start page text subheading key. + The start page text subheading key. + + + Gets the start page text subheading mouse-over key. + The start page text subheading mouse-over key. + + + Gets the start page text subheading selected key. + The start page text subheading selected key. + + + Gets the start page unselected item background begin key. + The start page unselected item background begin key. + + + Gets the start page unselected item background end key. + The start page unselected item background end key. + + + Gets the start page unselected item background key. + The start page unselected item background key. + + + Gets the start page unselected item stroke key. + The start page unselected item background key. + + + Gets the status bar text key. + The status bar text key. + + + Gets the task list grid lines key. + The task list grid lines key. + + + Gets the 3-D dark shadow key. + The 3-D dark shadow key + + + Gets the 3-D face key. + The 3-D face key. + + + Gets the 3-D highlight key. + The 3-D highlight key. + + + Gets the 3-D light shadow key. + The 3-D light shadow key. + + + Gets the 3-D shadow key. + The 3-D shadow key. + + + Gets the title bar active gradient begin key. + The title bar active gradient begin key. + + + Gets the title bar active gradient end key. + The title bar active gradient end key. + + + Gets the title bar active gradient key. + The title bar active gradient key. + + + Gets the title bar active gradient middle1 key. + The title bar active gradient middle1 key. + + + Gets the title bar active gradient middle2 key. + The title bar active gradient middle2 key. + + + Gets the title bar active key. + The title bar active key. + + + Gets the title bar active text key. + The title bar active text key. + + + Gets the title bar inactive gradient begin key. + The title bar inactive gradient begin key. + + + Gets the title bar inactive gradient end key. + The title bar inactive gradient end key. + + + Gets the title bar inactive gradient key. + The title bar inactive gradient end key. + + + Gets the title bar inactive key. + The title bar inactive key. + + + Gets the title bar inactive text key. + The title bar inactive text key. + + + Gets the toolbox background key. + The toolbox background key. + + + Gets the toolbox divider key. + The toolbox divider key. + + + Gets the toolbox gradient dark key. + The toolbox gradient dark key. + + + Gets the toolbox gradient key. + The toolbox gradient key. + + + Gets the toolbox gradient light key. + The toolbox gradient light key. + + + Gets the toolbox heading accent key. + The toolbox heading accent key. + + + Gets the toolbox heading begin key. + The toolbox heading begin key. + + + Gets the toolbox heading end key. + The toolbox heading end key. + + + Gets the toolbox heading gradient key. + The toolbox heading end key. + + + Gets the toolbox icon highlight key. + The toolbox icon highlight key. + + + Gets the toolbox icon shadow key. + The toolbox icon shadow key. + + + Gets the toolbox selected heading begin key. + The toolbox selected heading begin key. + + + Gets the toolbox selected heading end key. + The toolbox selected heading end key. + + + Gets the toolbox selected heading gradient key. + The toolbox selected heading gradient key. + + + Gets the toolbox selected heading middle1 key. + The toolbox selected heading middle1 key. + + + Gets the toolbox selected heading middle2 key. + The toolbox selected heading middle2 key. + + + Gets the tool window background key. + The tool window background key. + + + Gets the tool window border key. + The tool window border key. + + + Gets the tool window button active glyph key. + The tool window button active glyph key. + + + Gets the tool window button down active glyph key. + The tool window button down active glyph key. + + + Gets the tool window button down border key. + The tool window button down border key. + + + Gets the tool window button down inactive glyph key. + The tool window button down inactive glyph key. + + + Gets the tool window button down key. + The tool window button down key. + + + Gets the tool window button hover active border key. + The tool window button hover active border key. + + + Gets the tool window button hover active glyph key. + The tool window button hover active glyph key. + + + Gets the tool window button hover active key. + The tool window button hover active key. + + + Gets the tool window button hover inactive border key. + The tool window button hover inactive border key. + + + Gets the tool window button hover inactive glyph key. + The tool window button hover inactive glyph key. + + + Gets the tool window button hover inactive key. + The tool window button hover inactive key. + + + Gets the tool window button inactive border key. + The tool window button inactive border key. + + + Gets the tool window button inactive glyph key. + The tool window button inactive glyph key. + + + Gets the tool window button inactive key. + The tool window button inactive key. + + + Gets the tool window content tab gradient begin key. + The tool window content tab gradient begin key. + + + Gets the tool window content tab gradient end key. + The tool window content tab gradient end key. + + + Gets the tool window floating frame key. + The tool window floating frame key. + + + Gets the tool window tab border key. + The tool window tab border key. + + + Gets the tool window tab gradient begin key. + The tool window tab gradient begin key. + + + Gets the tool window tab gradient end key. + The tool window tab gradient end key. + + + Gets the tool window tab gradient key. + The tool window tab gradient key. + + + Gets the tool window tab mouse-over background begin key. + The tool window tab mouse-over background begin key. + + + Gets the tool window tab mouse-over background end key. + The tool window tab mouse-over background end key. + + + Gets the tool window tab mouse-over background gradient key. + The tool window tab mouse-over background gradient key. + + + Gets the tool window tab mouse-over border key. + The tool window tab mouse-over border key. + + + Gets the tool window tab mouse-over text key. + The tool window tab mouse-over text key. + + + Gets the tool window tab selected tab key. + The tool window tab selected tab key. + + + Gets the tool window tab selected text key. + The tool window tab selected text key. + + + Gets the tool window tab text key. + The tool window tab text key. + + + Gets the tool window text key. + The tool window text key. + + + Gets the surface brown dark key. + The surface brown dark key. + + + Gets the surface brown light key. + The surface brown light key. + + + Gets the surface brown medium key. + The surface brown medium key. + + + Gets the surface dark gold dark key. + The surface dark gold dark key. + + + Gets the surface dark gold light key. + The surface dark gold light key. + + + Gets the surface dark gold medium key. + The surface dark gold medium key. + + + Gets the surface gold dark key. + The surface gold dark key. + + + Gets the surface gold light key. + The surface gold light key. + + + Gets the surface gold medium key. + The surface gold medium key. + + + Gets the surface green dark key. + The surface green dark key. + + + Gets the surface green light key. + The surface green light key. + + + Gets the surface green medium key. + the surface green medium key. + + + Gets the surface plum dark key. + The surface plum dark key. + + + Gets the surface plum light key. + The surface plum light key. + + + Gets the surface plum medium key. + The surface plum medium key. + + + Gets the surface red dark key. + The surface red dark key. + + + Gets the surface red light key. + The surface red light key. + + + Gets the surface red medium key. + The surface red medium key. + + + Gets the surface soft blue dark key. + The surface soft blue dark key. + + + Gets the surface soft blue light key. + The surface soft blue light key. + + + Gets the surface soft blue medium key. + The surface soft blue medium key. + + + Gets the surface steel blue dark key. + The surface steel blue dark key. + + + Gets the surface steel blue light key. + The surface steel blue light key. + + + Gets the surface steel blue medium key. + The surface steel blue medium key. + + + Gets the surface strong blue dark key. + The surface strong blue dark key. + + + Gets the surface strong blue light key. + The surface strong blue light key. + + + Gets the surface strong blue light key. + The surface strong blue light key. + + + Gets the window frame key. + The window frame key. + + + Gets the window key. + The window key. + + + Gets the window text key. + The window text key. + + + Gets the wizard orientation panel background key. + The wizard orientation panel background key. + + + Gets the wizard orientation panel text key. + The wizard orientation panel text key. + + + Maps between identifiers (as used by and keys used by Windows Presentation Foundation objects. + + + Gets the accent border key. + The accent border key. + + + Gets the accent dark key. + The accent dark key. + + + Gets the accent light key. + The accent light key. + + + Gets the accent medium key. + The accent medium key. + + + Gets the accent pale key. + The accent pale key. + + + Gets the active border key. + The active border key. + + + Gets the active caption key. + The active caption key. + + + Gets the application workspace key. + The application workspace key. + + + Gets the auto-hide resize grip key. + The auto-hide resize grip key. + + + Gets the auto-hide tab background begin key. + The auto-hide tab background begin key. + + + Gets the auto-hide tab background end key. + The auto-hide tab background end key. + + + Gets the auto-hide tab border key. + The auto-hide tab border key. + + + Gets the auto-hide tab mouse-over background begin key. + The auto-hide tab mouse-over background begin key. + + + Gets the auto-hide tab mouse-over background end key. + The auto-hide tab mouse-over background end key. + + + Gets the auto-hide tab mouse-over border key. + The auto-hide tab mouse-over border key. + + + Gets the auto-hide tab mouse-over text key. + The auto-hide tab mouse-over text key. + + + Gets the auto-hide tab text key. + The auto-hide tab text key. + + + Gets the background key. + The background key. + + + Gets the branded UI background key. + The branded UI background key. + + + Gets the branded UI border key. + The branded UI border key. + + + Gets the branded UI fill key. + The branded UI fill key. + + + Gets the branded UI text key. + The branded UI text key. + + + Gets the branded UI title key. + The branded UI title key. + + + Gets the button face key. + The button face key. + + + Gets the button highlight key. + The button highlight key. + + + Gets the button shadow key. + The button shadow key. + + + Gets the button text key. + The button text key. + + + Gets the caption text key. + The caption text key. + + + Gets the class designer class compartment key. + The class designer class compartment key. + + + Gets the class designer class header background key. + The class designer class header background key. + + + Gets the class designer comment border key. + The class designer comment border key. + + + Gets the class designer comments shape background key. + The class designer comments shape background key. + + + Gets the class designer comment text key. + The class designer comment text key. + + + Gets the class designer compartment separator key. + The class designer compartment separator key. + + + Gets the class designer connection route border key. + The class designer connection route border key. + + + Gets the class designer default connection key. + The class designer default connection key. + + + Gets the class designer default shape background key. + The class designer default shape background key. + + + Gets the class designer default shape border key. + The class designer default shape border key. + + + Gets the class designer default shape subtitle key. + The class designer default shape subtitle key. + + + Gets the class designer default shape text key. + The class designer default shape text key. + + + Gets the class designer default shape title background key. + The class designer default shape title background key. + + + Gets the class designer default shape title key. + The class designer default shape title key. + + + Gets the class designer delegate compartment key. + The class designer delegate compartment key. + + + Gets the class designer delegate header key. + The class designer delegate header key. + + + Gets the class designer diagram background key. + The class designer diagram background key. + + + Gets the class designer emphasis border key. + The class designer emphasis border key. + + + Gets the class designer enumeration header key. + The class designer enumeration header key. + + + Gets the class designer field association key. + The class designer field association key. + + + Gets the class designer gradient end key. + The class designer gradient end key. + + + Gets the class designer inheritance key. + The class designer inheritance key. + + + Gets the class designer interface compartment key. + The class designer interface compartment key. + + + Gets the class designer interface header key. + The class designer interface header key. + + + Gets the class designer lasso key. + The class designer lasso key. + + + Gets the class designer lollipop key. + The class designer lollipop key. + + + Gets the class designer property association key. + The class designer property association key. + + + Gets the class designer referenced assembly border key. + The class designer referenced assembly border key. + + + Gets the class designer resizing shape border key. + The class designer resizing shape border key. + + + Gets the class designer shape border key. + The class designer shape border key. + + + Gets the class designer shape shadow key. + The class designer shape shadow key. + + + Gets the class designer temporary connection key. + The class designer temporary connection key. + + + Gets the class designer typedef header key. + The class designer typedef header key. + + + Gets the class designer typedef key. + The class designer typedef key. + + + Gets the class designer unresolved text key. + The class designer unresolved text key. + + + Gets the class designer Visual Basic module compartment key. + The class designer Visual Basic module compartment key. + + + Gets the class designer Visual Basic module header key. + The class designer Visual Basic module header key. + + + Gets the combo box background key. + The combo box background key. + + + Gets the combo box border key. + The combo box border key. + + + Gets the combo box disabled background key. + The combo box disabled background key. + + + Gets the combo box disabled border key. + The combo box disabled border key. + + + Gets the combo box disabled glyph key. + The combo box disabled glyph key. + + + Gets the combo box glyph key. + The combo box glyph key. + + + Gets the combo box mouse down background key. + The combo box mouse down background key. + + + Gets the combo box mouse down border key. + The combo box mouse down border key. + + + Gets the combo box mouse-over background begin key. + The combo box mouse-over background begin key. + + + Gets the combo box mouse-over background end key. + The combo box mouse-over background end key. + + + Gets the combo box mouse-over background middle1 key. + The combo box mouse-over background middle1 key. + + + Gets the combo box mouse-over background middle2 key. + The combo box mouse-over background middle2 key. + + + Gets the combo box mouse-over border key. + The combo box mouse-over border key. + + + Gets the combo box mouse-over glyph key. + The combo box mouse-over glyph key. + + + Gets the combo box popup background begin key. + The combo box popup background begin key. + + + Gets the combo box popup background end key. + The combo box popup background end key. + + + Gets the combo box popup border key. + The combo box popup border key. + + + Gets the command bar key. + The command bar key. + + + Gets the command bar checkbox key. + The command bar checkbox key. + + + Gets the command bar drag handle key. + The command bar drag handlekey. + + + Gets the command bar drag handle shadow key. + The command bar drag handle shadow key. + + + Gets the command bar gradient begin key. + The command bar gradient begin key. + + + Gets the command bar gradient end key. + The command bar gradient end key. + + + Gets the command bar gradient middle key. + The command bar gradient middle key. + + + Gets the command bar hover key. + The command bar hover key. + + + Gets the command bar hover over selected icon border key. + The command bar hover over selected icon border key. + + + Gets the command bar hover over selected icon key. + The command bar hover over selected icon key. + + + Gets the command bar hover over selected key. + The command bar hover over selected key. + + + Gets the command bar menu background gradient begin key. + The command bar menu background gradient begin key. + + + Gets the command bar menu background gradient end key. + The command bar menu background gradient end key. + + + Gets the command bar menu border key. + The command bar menu border key. + + + Gets the command bar menu icon background key. + The command bar menu icon background key. + + + Gets the command bar menu mouse-over submenu glyph key. + The command bar menu mouse-over submenu glyph key. + + + Gets the command bar menu separator key. + The command bar menu separator key. + + + Gets the command bar menu submenu glyph key. + The command bar menu submenu glyph key. + + + Gets the command bar mouse down background begin key. + The command bar mouse down background begin key. + + + Gets the command bar mouse down background end key. + The command bar mouse down background end key. + + + Gets the command bar mouse down background middle key. + The command bar mouse down background middle key. + + + Gets the command bar mouse down background border key. + The command bar mouse down background border key. + + + Gets the command bar mouse-over background begin key. + The command bar mouse-over background begin key. + + + Gets the command bar mouse-over background end key. + The command bar mouse-over background end key. + + + Gets the command bar mouse-over background middle1 key. + The command bar mouse-over background middle1 key. + + + Gets the command bar mouse-over background middle2 key. + The command bar mouse-over background middle2 key. + + + Gets the command bar options background key. + The command bar options background key. + + + Gets the command bar options glyph key. + The command bar options glyph key. + + + Gets the command bar options mouse-down background begin key. + The command bar options mouse-down background begin key. + + + Gets the command bar options mouse-down background end key. + The command bar options mouse-down background end key. + + + Gets the command bar options mouse-down background middle key. + The command bar options mouse-down background middle key. + + + Gets the command bar options mouse-over background begin key. + The command bar options mouse-over background begin key. + + + Gets the command bar options mouse-over background end key. + The command bar options mouse-over background end key. + + + Gets the command bar options mouse-over background middle1 key. + The command bar options mouse-over background middle1 key. + + + Gets the command bar options mouse-over background middle2 key. + The command bar options mouse-over background middle2 key. + + + Gets the command bar options mouse-over glyph key. + The command bar options mouse-over glyph key. + + + Gets the command bar selected border key. + The command bar selected border key. + + + Gets the command bar selected border key. + The command bar selected key. + + + Gets the command bar shadow key. + The command bar shadow key. + + + Gets the command bar text active key. + The command bar text active key. + + + Gets the command bar text hover key. + The command bar text hover key. + + + Gets the command bar text inactive key. + The command bar text inactive key. + + + Gets the command bar text selected key. + The command bar text selected key. + + + Gets the command toolbar border key. + The command toolbar border key. + + + Gets the command toolbar separator key. + The command toolbar separator key. + + + Gets the command shelf background gradient begin key. + The command shelf background gradient begin key. + + + Gets the command shelf background gradient end key. + The command shelf background gradient end key. + + + Gets the command shelf background gradient middle key. + The command shelf background gradient middle key. + + + Gets the command shelf background gradient begin key. + The command shelf background gradient begin key. + + + Gets the command shelf background gradient end key. + The command shelf background gradient end key. + + + Gets the command shelf background gradient middle key. + The command shelf background gradient middle key. + + + Gets the control edit hint text key. + The control edit hint text key. + + + Gets the control edit required background key. + The control edit required background key. + + + Gets the control edit required hint text key. + The control edit required hint text key. + + + Gets the control link text hover key. + The control link text hover key. + + + Gets the control link text key. + The control link text key. + + + Gets the control link text pressed key. + The control link text pressed key. + + + Gets the control outline key. + The control outline key. + + + Gets the debugger data tip active background key. + The debugger data tip active background key. + + + Gets the debugger data tip active border key. + The debugger data tip active border key. + + + Gets the debugger data tip active highlight key. + The debugger data tip active highlight key. + + + Gets the debugger data tip active highlight text key. + The debugger data tip active highlight text key. + + + Gets the debugger data tip active separator key. + The debugger data tip active separator key. + + + Gets the debugger data tip active text key. + The debugger data tip active text key. + + + Gets the debugger data tip inactive background key. + The debugger data tip inactive background key. + + + Gets the debugger data tip inactive border key. + The debugger data tip inactive border key. + + + Gets the debugger data tip inactive highlight key. + The debugger data tip inactive highlight key. + + + Gets the debugger data tip inactive highlight text key. + The debugger data tip inactive highlight text key. + + + Gets the debugger data tip inactive separator key. + The debugger data tip inactive separator key. + + + Gets the debugger data tip inactive text key. + The debugger data tip inactive text key. + + + Gets the designer background key. + The designer background key. + + + Gets the designer dots key. + The designer dots key. + + + Gets the designer tray key. + The designer tray key. + + + Gets the designer watermark key. + The designer watermark key. + + + Gets the diagnostic report background key. + The diagnostic report background key. + + + Gets the diagnostic report secondary page header key. + The diagnostic report secondary page header key. + + + Gets the diagnostic report secondary page subtitle key. + The diagnostic report secondary page subtitle key. + + + Gets the diagnostic report secondary page title key. + The diagnostic report secondary page title key. + + + Gets the diagnostic report summary page header key. + The diagnostic report summary page header key. + + + Gets the diagnostic report summary page subtitle key. + The diagnostic report summary page subtitle key. + + + Gets the diagnostic report summary page title key. + The diagnostic report summary page title key. + + + Gets the diagnostic report text key. + The diagnostic report text key. + + + Gets the dock target background key. + The dock target background key. + + + Gets the dock target border key. + The dock target border key. + + + Gets the dock target button background begin key. + The dock target button background begin key. + + + Gets the dock target button background end key. + The dock target button background end key. + + + Gets the dock target button background border key. + The dock target button background border key. + + + Gets the dock target glyph arrow key. + The dock target glyph arrow key. + + + Gets the dock target glyph background begin key. + The dock target glyph background begin key. + + + Gets the dock target glyph background end key. + The dock target glyph background end key. + + + Gets the dock target glyph border key. + The dock target glyph border key. + + + Gets the dropdown background key. + The dropdown background key. + + + Gets the dropdown border key. + The dropdown border key. + + + Gets the dropdown disabled background key. + The dropdown disabled background key. + + + Gets the dropdown disabled border key. + The dropdown disabled border key. + + + Gets the dropdown disabled glyph key. + The dropdown disabled glyph key. + + + Gets the dropdown glyph key. + The dropdown glyph key. + + + Gets the dropdown mouse-down background key. + The dropdown mouse-down background key. + + + Gets the dropdown mouse-down border key. + The dropdown mouse-down border key. + + + Gets the dropdown mouse-over background begin key. + The dropdown mouse-over background begin key. + + + The dropdown mouse-over background end key. + The dropdown mouse-over background end key. + + + Gets the dropdown mouse-over background middle1 key. + The dropdown mouse-over background middle1 key. + + + Gets the dropdown mouse-over background middle2 key. + The dropdown mouse-over background middle2 key. + + + Gets the dropdown mouse-over border key. + The dropdown mouse-over border key. + + + Gets the dropdown mouse-over glyph key. + The dropdown mouse-over glyph key. + + + Gets the dropdown popup background begin key. + The dropdown popup background begin key. + + + Gets the dropdown popup background end key. + The dropdown popup background end key. + + + Gets the dropdown popup border key. + The dropdown popup border key. + + + Gets the drop shadow background key. + The drop shadow background key. + + + Gets the editor expansion border key. + The editor expansion border key. + + + Gets the editor expansion fill key. + The editor expansion fill key. + + + Gets the editor expansion link key. + The editor expansion link key. + + + Gets the editor expansion text key. + The editor expansion text key. + + + Gets the environment background gradient begin key. + The environment background gradient begin key. + + + Gets the environment background gradient end key. + The environment background gradient end key. + + + Gets the environment background gradient middle1 key. + The environment background gradient middle1 key. + + + The environment background gradient middle2 key. + The environment background gradient middle2 key. + + + Gets the environment background key. + The environment background key. + + + Gets the environment background texture1 key. + The environment background texture1 key. + + + Gets the environment background gradient texture2 key. + The environment background texture2 key. + + + Gets the extension manager star highlight1 key. + The extension manager star highlight1 key. + + + Gets the extension manager star highlight2 key. + The extension manager star highlight2 key. + + + Gets the extension manager star inactive key. + The extension manager star inactive1 key. + + + Gets the extension manager star inactive2 key. + The extension manager star inactive2 key. + + + Gets the file tab border key. + The file tab border key. + + + Gets the file tab channel background key. + The file tab channel background key. + + + Gets the file tab document border background key. + The file tab document border background key. + + + Gets the file tab document border highlight key. + The file tab document border highlight key. + + + Gets the file tab document border shadow key. + The file tab document border shadow key. + + + Gets the file tab gradient dark key. + Rhe file tab gradient dark key. + + + Gets the file tab gradient light key. + The file tab gradient light key. + + + Gets the file tab hot border key. + The file tab hot border key. + + + Gets the file tab hot glyph key. + The file tab hot glyph key. + + + Gets the file tab hot gradient bottom key. + The file tab hot gradient bottom key. + + + Gets the file tab hot gradient top key. + The file tab hot gradient top key. + + + Gets the file tab hot text key. + The file tab hot text key. + + + Gets the file tab inactive document border background key. + The file tab inactive document border background key. + + + Gets the file tab inactive document border edge key. + The file tab inactive document border edge key. + + + Gets the file tab inactive gradient bottom key. + The file tab inactive gradient bottom key. + + + Gets the file tab inactive gradient top key. + The file tab inactive gradient top key. + + + Gets the file tab inactive text key. + The file tab inactive text key. + + + Gets the file tab last active document border background key. + The file tab last active document border background key. + + + Gets the file tab last active document border edge key. + The file tab last active document border edge key. + + + Gets the file tab last active glyph key. + The file tab last active glyph key.. + + + Gets the file tab last active gradient bottom key. + The file tab last active gradient bottom key. + + + Gets the file tab last active gradient middle1 key. + The file tab last active gradient middle1 key. + + + Gets the file tab last active gradient middle2 key. + The file tab last active gradient middle2 key. + + + Gets the file tab last active gradient top key. + The file tab last active gradient top key. + + + Gets the file tab last active text key. + The file tab last active text key. + + + Gets the file tab selected background key. + The file tab selected background key. + + + Gets the file tab selected border key. + The file tab selected border key. + + + Gets the file tab selected gradient bottom key. + The file tab selected gradient bottom key. + + + Gets the file tab selected gradient middle1 key. + The file tab selected gradient middle1 key. + + + Gets the file tab selected gradient middle2 key. + The file tab selected gradient middle2 key. + + + Gets the file tab selected gradient top key. + The file tab selected gradient top key. + + + Gets the file tab selected text key. + The file tab selected text key. + + + Gets the file tab text key. + The file tab text key. + + + Gets the form smart tag action tag border key. + The form smart tag action tag border key. + + + Gets the form smart tag action tag fill key. + The form smart tag action tag fill key. + + + Gets the form smart tag object tag border key. + The form smart tag object tag border key. + + + Gets the form smart tag object tag fill key. + The form smart tag object tag fill key. + + + + Gets the identifier for a given WPF color resource key. + The color ID. + The Visual Studio color key. + + + Gets the WPF color key for a given identifier. + The color key. + The Visual Studio system color. + + + + + + + Gets the gray text key. + The gray text key. + + + Gets the grid heading background key. + The grid heading background key. + + + Gets the grid heading text key. + The grid heading text key. + + + Gets the grid line key. + The grid line key. + + + Gets the Help How do I pane background key. + The Help How do I pane background key. + + + Gets the Help How do I pane link key. + The Help How do I pane link key. + + + Gets the Help How do I pane text key. + The Help How do I pane text key. + + + Gets the Help How do I task background key. + The Help How do I task background key. + + + Gets the Help How do I task link key. + The Help How do I task link key. + + + Gets the Help How do I task text key. + The Help How do I task text key. + + + Gets the Help search background key. + The Help search background key. + + + Gets the Help search border key. + The Help search border key. + + + Gets the Help search filter background key. + The Help search filter background key. + + + Gets the Help search filter border key. + The Help search filter border key. + + + Gets the Help search filter text key. + The Help search filter text key. + + + Gets the Help search frame background key. + The Help search frame background key. + + + Gets the Help search frame text key. + The Help search frame text key. + + + Gets the Help search pane rules key. + The Help search pane rules key. + + + Gets the Help search provider icon key. + The Help search provider icon key. + + + Gets the Help search provider selected background key. + The Help search provider selected background key. + + + Gets the Help search provider selected text key. + The Help search provider selected text key. + + + Gets the Help search provider unselected background key. + The Help search provider unselected background key. + + + Gets the Help search provider unselected text key. + The Help search provider unselected text key. + + + Gets the Help result link selected key. + The Help result link selected key. + + + Gets the Help result link unselected key. + The Help result link unselected key. + + + Gets the Help result link selected background key. + The Help result link selected background key. + + + Gets the Help result link selected text key. + The Help result link selected text key. + + + Gets the Help search text key. + The Help search text key. + + + Gets the highlight key. + The highlight key. + + + Gets the highlight text key. + The highlight text key. + + + Gets the inactive border key. + The inactive border key. + + + Gets the inactive caption key. + The inactive caption key. + + + Gets the inactive caption text key. + The inactive caption text key. + + + Gets the info background key. + The info background key. + + + Gets the info text key. + The info text key. + + + Gets the MDI client border key. + The MDI client border key. + + + Gets the menu key. + The menu key. + + + Gets the menu text key. + The menu text key. + + + Gets the new project background key. + The new project background key. + + + Gets the new project item inactive begin key. + The new project item inactive begin key. + + + Gets the new project item inactive border key. + The new project item inactive border key. + + + Gets the new project item inactive end key. + The new project item inactive end key. + + + Gets the new project item selected border key. + The new project item selected border key. + + + Gets the new project item selected key. + The new project item selected key. + + + Gets the new project provider hover begin key. + The new project provider hover begin key. + + + Gets the new project provider hover end key. + The new project provider hover end key. + + + Gets the new project provider hover foreground key. + The new project provider hover foreground key. + + + Gets the new project provider hover middle1 key. + The new project provider hover middle1 key. + + + Gets the new project provider hover middle2 key. + The new project provider hover middle2 key. + + + Gets the new project provider inactive begin key. + The new project provider inactive begin key. + + + Gets the new project provider inactive end key. + The new project provider inactive end key. + + + Gets the new project provider inactive foreground key. + The new project provider inactive foreground key. + + + Gets the page content expander chevron key. + The page content expander chevron key. + + + Gets the page content expander separator key. + The page content expander separator key. + + + Gets the page sidebar expander body key. + The page sidebar expander body key. + + + Gets the page sidebar expander chevron key. + The page sidebar expander chevron key. + + + Gets the page sidebar expander header hover key. + The page sidebar expander header hover key. + + + Gets the page sidebar expander header key. + The page sidebar expander header key. + + + Gets the page sidebar expander header pressed key. + The page sidebar expander header pressed key. + + + Gets the page sidebar expander separator key. + The page sidebar expander separator key. + + + Gets the page sidebar expander text key. + The page sidebar expander text key. + + + Gets the panel border key. + The panel border key. + + + Gets the panel gradient dark key. + The panel gradient dark key. + + + Gets the panel gradient light key. + The panel gradient light key. + + + Gets the panel hover-over close border key. + The panel hover-over close border key. + + + Gets the panel hover-over close fill key. + The panel hover-over close fill key. + + + Gets the panel hyperlink hover key. + The panel hyperlink hover key. + + + Gets the panel hyperlink key. + The panel hyperlink key. + + + Gets the panel hyperlink pressed key. + The panel hyperlink pressed key. + + + Gets the panel separator key. + The panel separator key. + + + Gets the panel subgroup separator key. + The panel subgroup separator key. + + + Gets the panel text key. + The panel text key. + + + Gets the panel title bar key. + The panel title bar key. + + + Gets the panel title bar text key. + The panel title bar text key. + + + Gets the panel title bar unselected key. + The panel title bar unselected key. + + + Gets the project designer background gradient begin key. + The project designer background gradient begin key. + + + Gets the project designer background gradient end key. + The project designer background gradient end key. + + + Gets the project designer border inside key. + The project designer border inside key. + + + Gets the project designer border outside key. + the project designer border outside key. + + + Gets the project designer contents background key. + The project designer contents background key. + + + Gets the project designer tab background gradient begin key. + The project designer tab background gradient begin key. + + + Gets the project designer tab background gradient end key. + The project designer tab background gradient end key. + + + Gets the project designer tab selected background key. + The project designer tab selected background key. + + + Gets the project designer tab selected border key. + The project designer tab selected border key. + + + Gets the project designer tab selected highlight1 key. + the project designer tab selected highlight1 key. + + + Gets the project designer tab selected highlight2 key. + The project designer tab selected highlight2 key. + + + Gets the project designer tab selected inside border key. + The project designer tab selected inside border key. + + + Gets the project designer tab separator bottom gradient begin key. + The project designer tab separator bottom gradient begin key. + + + Gets the project designer tab separator bottom gradient end key. + The project designer tab separator bottom gradient end key. + + + Gets the project designer tab separator top gradient begin key. + The project designer tab separator top gradient begin key. + + + Gets the project designer tab separator top gradient end key. + The project designer tab separator top gradient end key. + + + Gets the screen tip background key. + The screen tip background key. + + + Gets the screen tip border key. + The screen tip border key. + + + Gets the screen tip text key. + The screen tip text key. + + + Gets the scrollbar arrow background key. + The scrollbar arrow background key. + + + Gets the scrollbar arrow disabled background key. + The scrollbar arrow disabled background key. + + + Gets the scrollbar arrow mouse-over background key. + The scrollbar arrow mouse-over background key. + + + Gets the scrollbar arrow pressed background key. + The scrollbar arrow pressed background key. + + + Gets the scrollbar background key. + The scrollbar background key. + + + Gets the scrollbar disabled background key. + The scrollbar disabled background key. + + + Gets the scrollbar key. + The scrollbar key. + + + Gets the scrollbar thumb background key. + The scrollbar thumb background key. + + + Gets the scrollbar thumb border key. + The scrollbar thumb border key. + + + Gets the scrollbar thumb glyph key. + The scrollbar thumb glyph key. + + + Gets the scrollbar thumb mouse-over background key. + The scrollbar thumb mouse-over background key. + + + Gets the scrollbar thumb pressed background key. + The scrollbar thumb pressed background key. + + + Gets the search box background key. + The search box background key. + + + Gets the search box border key. + The search box border key. + + + Gets the search box mouse-over background begin key. + The search box mouse-over background begin key. + + + Gets the search box mouse-over background end key. + The search box mouse-over background end key. + + + Gets the search box mouse-over background middle1 key. + The search box mouse-over background middle1 key. + + + Gets the search box mouse-over background middle2 key. + The search box mouse-over background middle2 key. + + + Gets the search box mouse-over border key. + The search box mouse-over border key. + + + Gets the search box pressed background key. + The search box pressed background key. + + + Gets the search box pressed border key. + The search box pressed border key. + + + Gets the sidebar background key. + The sidebar background key. + + + Gets the sidebar gradient dark key. + The sidebar gradient dark key. + + + Gets the sidebar gradient light key. + The sidebar gradient light key. + + + Gets the sidebar gradient text key. + The sidebar gradient text key. + + + Gets the smart tag border key. + The smart tag border key. + + + Gets the smart tag fill key. + The smart tag fill key. + + + Gets the smart tag hover border key. + The smart tag hover border key. + + + Gets the smart tag hover fill key. + Gets the smart tag hover fill key. + + + Gets the smart tag hover text key. + The smart tag hover text key. + + + Gets the smart tag text key. + The smart tag text key. + + + Gets the snaplines key. + The snaplines key. + + + Gets the snaplines padding key. + The snaplines padding key. + + + Gets the snaplines text baseline key. + The snaplines text baseline key. + + + Gets the sort background key. + The sort background key. + + + Gets the sort text key. + The sort text key. + + + Gets the splash screen border key. + The splash screen border key. + + + Gets the start page background gradient begin key. + The start page background gradient begin key. + + + Gets the start page background gradient end key. + The start page background gradient end key. + + + Gets the start page button border key. + The start page button border key. + + + Gets the start page button mouse-over background begin key. + The start page button mouse-over background begin key. + + + Gets the start page button mouse-over background end key. + The start page button mouse-over background end key. + + + Gets the start page button mouse-over background middle1 key. + The start page button mouse-over background middle1 key. + + + Gets the start page button mouse-over background middle2 key. + The start page button mouse-over background middle2 key. + + + Gets the start page button pin down key. + The start page button pin down key. + + + Gets the start page button pin hover key. + The start page button pin hover key. + + + Gets the start page button pinned key. + The start page button pinned key. + + + Gets the start page button text hover key. + The start page button text hover key. + + + Gets the start page button text key. + The start page button text key. + + + Gets the start page button unpinned key. + The start page button unpinned key. + + + Gets the start page selected item background key. + The start page selected item background key. + + + Gets the start page selected item stroke key. + The start page selected item stroke key. + + + Gets the start page separator key. + The start page separator key. + + + Gets the start page tab background begin key. + The start page tab background begin key. + + + Gets the start page tab background end key. + The start page tab background end key. + + + Gets the start page tab mouse-over background begin key. + The start page tab mouse-over background begin key. + + + Gets the start page tab mouse-over background end key. + The start page tab mouse-over background end key. + + + Gets the start page text body key. + The start page text body key. + + + Gets the start page text body selected key. + The start page text body selected key. + + + Gets the start page text body unselected key. + The start page text body unselected key. + + + Gets the start page text control link selected hover key. + The start page text control link selected hover key. + + + Gets the start page text control link selected key. + The start page text control link selected key. + + + Gets the start page text date key. + The start page text date key. + + + Gets the start page text heading key. + The start page text heading key. + + + Gets the start page text heading mouse-over key. + The start page text heading mouse-over key. + + + Gets the start page text heading selected key. + The start page text heading selected key. + + + Gets the start page text subheading key. + The start page text subheading key. + + + Gets the start page text subheading mouse-over key. + The start page text subheading mouse-over key. + + + Gets the start page text subheading selected key. + The start page text subheading selected key. + + + Gets the start page text unselected item background begin key. + The start page text unselected item background begin key. + + + Gets the start page text unselected item background end key. + The start page text unselected item background end key. + + + Gets the start page text unselected item stroke key. + The start page text unselected item stroke key. + + + Gets the status bar text key. + The status bar text key. + + + Gets the task list grid lines key. + The task list grid lines key. + + + Gets the 3-D dark shadow key. + The 3-D dark shadow key. + + + Gets the 3-D face key. + The 3-D face key. + + + Gets the 3-D highlight key. + The 3-D highlight key. + + + Gets the 3-D light shadow key. + The 3-D light shadow key. + + + Gets the 3-D shadow key. + The 3-D shadow key. + + + Gets the title bar active gradient begin key. + The title bar active gradient begin key. + + + Gets the title bar active gradient end key. + The title bar active gradient end key. + + + Gets the title bar active gradient middle1 key. + The title bar active gradient middle1 key. + + + Gets the title bar active gradient middle2 key. + The title bar active gradient middle2 key. + + + Gets the title bar active key. + The title bar active key. + + + Gets the title bar active text key. + The title bar active text key. + + + Gets the title bar inactive gradient begin key. + The title bar inactive gradient begin key. + + + Gets the title bar inactive gradient end key. + The title bar inactive gradient end key. + + + Gets the title bar inactive key. + The title bar inactive key. + + + Gets the title bar inactive text key. + The title bar inactive text key. + + + Gets the toolbox background key. + The toolbox background key. + + + Gets the toolbox divider key. + The toolbox divider key. + + + Gets the toolbox gradient dark key. + the toolbox gradient dark key. + + + Gets the toolbox gradient light key. + The toolbox gradient light key. + + + Gets the toolbox heading accent key. + The toolbox heading accent key. + + + Gets the toolbox heading begin key. + The toolbox heading begin key. + + + Gets the toolbox heading end key. + The toolbox heading end key. + + + Gets the toolbox icon highlight key. + The toolbox icon highlight key. + + + Gets the toolbox icon shadow key. + The toolbox icon shadow key. + + + Gets the toolbox selected heading begin key. + The toolbox selected heading begin key. + + + Gets the toolbox selected heading end key. + The toolbox selected heading end key. + + + Gets the toolbox selected heading middle1 key. + The toolbox selected heading middle1 key. + + + Gets the toolbox selected heading middle2 key. + The toolbox selected heading middle2 key. + + + Gets the tool window background key. + The tool window background key. + + + Gets the tool window border key. + The tool window border key. + + + Gets the tool window button active glyph key. + The tool window button active glyph key. + + + Gets the tool window button down active glyph key. + The tool window button down active glyph key. + + + Gets the tool window button border key. + The tool window button border key. + + + Gets the tool window button down inactive glyph key. + The tool window button down inactive glyph key. + + + Gets the tool window button down key. + The tool window button down key. + + + Gets the tool window button hover active border key. + The tool window button hover active border key. + + + Gets the tool window button hover active glyph key. + The tool window button hover active glyph key. + + + Gets the tool window button hover active key. + The tool window button hover active key. + + + Gets the tool window button hover inactive border key. + The tool window button hover inactive border key. + + + Gets the tool window button hover active glyph key. + The tool window button hover active glyph key. + + + Gets the tool window button hover inactive key. + The tool window button hover inactive key. + + + Gets the tool window button nactive border key. + The tool window button inactive border key. + + + Gets the tool window button inactive glyph key. + The tool window button inactive glyph key. + + + Gets the tool window button inactive key. + The tool window button inactive key. + + + Gets the tool window content tab gradient begin key. + the tool window content tab gradient begin key. + + + Gets the tool window content tab gradient end key. + The tool window content tab gradient end key. + + + Gets the tool window floating frame key. + The tool window floating frame key. + + + Gets the tool window tab border key. + The tool window tab border key. + + + Gets the tool window tab gradient begin key. + The tool window tab gradient begin key. + + + Gets the tool window tab gradient end key. + The tool window tab gradient end key. + + + Gets the tool window tab mouse-over background begin key. + The tool window tab mouse-over background begin key. + + + Gets the tool window tab mouse-over background end key. + The tool window tab mouse-over background end key. + + + Gets the tool window tab mouse-over border key. + The tool window tab mouse-over border key. + + + Gets the tool window tab mouse-over text key. + The tool window tab mouse-over text key. + + + Gets the tool window tab selected tab key. + The tool window tab selected tab key. + + + Gets the tool window tab selected text key. + The tool window tab selected text key. + + + Gets the tool window tab text key. + The tool window tab text key. + + + Gets the tool window text key. + The tool window text key. + + + + Gets the visual surface brown dark key. + The visual surface brown dark key. + + + Gets the visual surface brown light key. + The visual surface brown light key. + + + Gets the visual surface brown medium key. + the visual surface brown medium key. + + + Gets the visual surface dark gold dark key. + The visual surface dark gold dark key. + + + Gets the visual surface dark gold light key. + The visual surface dark gold light key. + + + Gets the visual surface dark gold medium key. + The visual surface dark gold medium key. + + + Gets the visual surface gold dark key. + The visual surface gold dark key. + + + Gets the visual surface gold light key. + The visual surface gold light key. + + + Gets the visual surface gold medium key. + The visual surface gold medium key. + + + Gets the visual surface green dark key. + The visual surface green dark key. + + + Gets the visual surface green light key. + The visual surface green light key. + + + Gets the visual surface green medium key. + The visual surface green medium key. + + + Gets the visual surface plum dark key. + The visual surface plum dark key. + + + Gets the visual surface plum light key. + The visual surface plum light key. + + + Gets the visual surface plum medium key. + The visual surface plum medium key. + + + Gets the visual surface red dark key. + The visual surface red dark key. + + + Gets the visual surface red light key. + The visual surface red light key. + + + Gets the visual surface red medium key. + The visual surface red medium key. + + + Gets the visual surface soft blue dark key. + The visual surface soft blue dark key. + + + Gets the visual surface soft blue light key. + The visual surface soft blue light key. + + + Gets the visual surface soft blue medium key. + The visual surface soft blue medium key. + + + Gets the visual surface steel blue dark key. + The visual surface steel blue dark key. + + + Gets the visual surface steel blue light key. + The visual surface steel blue light key. + + + Gets the visual surface steel blue medium key. + the visual surface steel blue mediumkey. + + + Gets the visual surface strong blue dark key. + The visual surface strong blue dark key. + + + Gets the visual surface strong blue light key. + The visual surface strong blue light key. + + + Gets the visual surface strong blue medium key. + The visual surface strong blue medium key. + + + Gets the window frame key. + The window frame key. + + + Gets the window key. + The window key. + + + Gets the window text key. + The window text key. + + + Gets the wizard orientation panel background key. + The wizard orientation panel background key. + + + Gets the wizard orientation panel text key. + The wizard orientation panel text key. + + + Defines constants for tool window orientation. + + + The registration attribute initializes to this value if no style is specified. + + + If the value is , the tool window will be linked to the multiple-document interface (MDI) area, and Window is ignored. + + + If the value is , the tool window will float initially, but when the title bar is double-clicked, Orientation and Window apply, and the window will default to Tabbed. + + + If the value is , Orientation can be Left, Right, Top, or Bottom. + + + If the value is , Orientation can be Left or Right and tab placement can be specified. + + + If the value is , the tool window cannot be docked. + + + Base class for Visual Studio-style enumerators using Visual Studio 2010 and older enumerator interfaces that use PreserveSig. + COM enumerator type (for example, ). + Type enumerated by (for example, string). + + + Initializes a new instance of the class. + The collection to be enumerated. + + + Initializes a new instance of the class. + The collection to be enumerated. + The position of the created enumerator in the collection. + + + Converts an element in the enumerated input collection of type TEnumerated to a TComEnumerated element to be returned by the Visual Studio-style enumerator. + An element in the input enumerated collection. + An element to be returned by the Next method of the COM enumerator. + + + Represents a Visual Studio-style enumeration of TComEnumerated objects created from an enumeration of TEnumerated.Base class for Visual Studio-style enumerators using Visual Studio 2010 and older enumerator interfaces that use PreserveSig. + COM enumerator type (for example, ). + Type enumerated by TComEnumerator (for example, String). + The type of elements in the collection wrapped by the COM enumerator type (for example, ). + + + Initializes a new instance of the class. + The collection to be enumerated. + + + Initializes a new instance of the class. + The collection to be enumerated. + The position of the created enumerator in the collection. + + + Creates a copy of the enumerator and all its descendants. The returned enumerator contains the same enumeration state as the current one. + S_OK if successful, or an error otherwise. + Address of a pointer to the copied enumerator. + + + Creates a new instance of derived class that is the COM-enumerator over the enumerated collection, starting from the specified enumerator position. + An instance of the derived class implementing the enumerator. + The collection to be enumerated. + The position of the created enumerator in the collection. + + + Converts an element in the enumerated input collection of type TEnumerated to a TComEnumerated element to be returned by the Visual Studio-style enumerator. + An element in the input enumerated collection. + An element to be returned by the Next method of the COM enumerator. + + + Gets a Boolean value that indicates whether the enumerator is currently enumerating. If true, the enumerator is enumerating. + + + Gets one or more elements starting at the current position in an enumeration. This method advances the current position in the enumeration by elements, so that subsequent calls return the subsequent elements. + S_OK if successful, or an error otherwise. + Number of requested elements. + Enough storage to hold the number of elements specified by . This storage must be supplied by the caller. This parameter cannot be null. + Indicates the number of elements that were actually fetched. This number can be less than the number requested in . + + + + Resets the enumeration sequence back to the beginning. + + + Moves the current position in an enumeration ahead by a specified number of elements. + S_OK if successful. If is greater than the number of elements left to enumerate, then this call skips to the end of the enumeration and S_FALSE is returned. + Number of elements to skip. + + + Base class for Visual Studio COM enumerators using Visual Studio 2012 and later enumerator interfaces that do not use PreserveSig. + COM enumerator type (for example, ). + Type enumerated by (for example, ). + + + Initializes a new instance of the class. + The collection to be enumerated. + + + Initializes a new instance of the class. + The collection to be enumerated. + The position of the created enumerator in the collection. + + + Creates a copy of the enumerator and all its descendants. The returned enumerator contains the same enumeration state as the current one. + Address of a pointer to the copied enumerator. + + + Resets the enumeration sequence back to the beginning. + + + Controls the display mode of a tool window. + + + Specifies the tool window is docked. A docked tool window is attached to the side of the application window. + + + Specifies the tool window is able to float over other windows. Floating windows can exist outside the application area. + + + Specifies the tool window is a Multiple Document Interface (MDI) child window, and is treated in a manner similar to a document window. + + + Specifies the tool window is able to float over other windows, and cannot be docked. + + + Specifies the frame mode is autohide. This value cannot be combined with other flags. + + + Specifies property identifiers for window frames, document frames, and tool window frames. + + + The frame type (1 for a document frame or 2 for a tool frame) of the window. + + + The object that fills the client area of a window. + + + An that is the site object for the DocView object. + + + The provided by the owning . + + + The full window caption. + + + The current state of the window (Normal, Minimized, or Maximized). + + + Controls the display mode of a tools window. + + + Indicates if the window is not tabbed (returns 0), is tabbed and is an active tab (returns 1), or is tabbed and is not an active tab (returns 2). Document windows always return 0. + + + The tool window user context (). + + + The property that can be set on a Helper object to override add or override interfaces. This property is normally implemented on the DocView object. ViewHelper can implement the following interfaces: , , , , IDocHostUIHandler, , , and . + + + The partial window caption. + + + The keyword to be used for cmdidWindowHelp. + + + The command text for cmdidWindowHelp (for example, Help on: Help Index). + + + The (RDT) key. + + + The portion of the caption defined by the owner . + + + The portion of the caption defined by the editor implementation. + + + The path to the document () passed to . + + + The document frame returns AltDocData if it is available, otherwise it returns RDTDocData. + + + The owning . + + + The VSITEMID of the document. + + + The GUID used to control visibility of toolbars and AutoVisible tool windows. + + + The flags passed to . + + + The guidEditorType that uniquely identifies which created the document. + + + The type of window created by the (for example, "Form"). + + + The GUID most often used by a window to inherit the key bindings of the text editor (for example, pFrame->SetGuidProperty(VSFPROPID_InheritKeyBindings, CMDUIGUID_TextEditor)). + + + The DocData registered in the running document table (RDT) for the document in this frame. + + + If this window is only editing a piece of a larger document then AltDocData is the DocData object for the piece of the document that is being edited within the window, whereas the RDTDocData is the DocData object for the entire document registered in the RDT. AltDocData objects are not registered in the RDT. Document windows that have AltDocData objects are created using the CDW_fAltDocData flag. + + + The GUID that uniquely identifies a tool window type. + + + Obsolete. Do not use. + + + The flags passed to . + + + Returns the Environment's "Window" automation IDispatch object. + + + The identifier of a multi-instance tool window. + + + The resource number of the bitmap in a satellite DLL. + + + The index of the image to use in the bitmap strip for the window frame icon. + + + The used to add toolbars to a window. + + + The tool window's container is hidden when saving a data file. + + + The tri-state value used to control the dirty star (*) in a window caption. + + + Indicates if the pane is holding an OLE document object. + + + The handle to a window (HWND) parent of an OwnerDocked window. + + + The of the parent container for an OwnerDocked window. + + + A pointer to the (RDT) key for the document associated with a tool window (for example, the Code Definition Window). + + + The identifier of the container (tab) group for the multiple-document interface (MDI) window. + + + Indicates whether to send the notification when a window is activated. If true, the notification is sent. + + + An actual handle to an icon (HICON) resource is retrieved if the document has one. + + + A handle to a bitmap (HBITMAP) for the image to be displayed on a tab for this frame (the caller must cache and release this object). + + + A handle to a bitmap (HBITMAP) thumbnail of the contents of the frame. + + + The navigation delegate for this frame. + + + The next instance identifier available among sibling clones. + + + Retrieves the associated with the window or creates a search host for a search control with shell-owned positioning in the top frame area. + + + Returns whether the window supports search (an was created and associated with the frame, the search was setup with the host, and the search is enabled by the provider). + + + The search control placement values from . + + + A tri-state value indicating whether a window is provisional. + + + Indicates whether a window is pinned. If true, the window is pinned. + + + A window should be reopened when a solution is opened (the default is false). + + + Overrides the generated caption for this frame. A null value restores the default behavior. + + + Overrides the generated tooltip for this frame. A null value restores the default behavior. + + + Indicates whether any toolbars that are specific to the currently-active document should be hidden. A value of true indicates that when the tool window is active, any toolbars that are specific to the currently active document should be hidden. The default is false. This property only has an effect when the tool window also supplies a CmdUI GUID using the VSFPROPID_CmdUIGuid property. This property is used only for tool windows. + + + Specifies the property identifiers associated with the property settings for a hierarchy. + + + + + + Indicates whether the compiler allows edits during run mode. This property is optional. + + + An for . This property is optional + + + An item identifier for . This property is optional. + + + An for property browsing. This property is optional. + + + Indicates if a build can be done from memory. This property is optional. + + + The full window caption. + + + A GUID used to control visibility of toolbars and AutoVisible tool windows. + + + Obsolete. Use the interface instead. + + + Indicates whether "Build" should be initially checked by default in the solution configuration. This property is optional. + + + Indicates whether "Deploy" should be initially checked by default in the solution configuration. This property is optional. + + + A string representing the items folder-based namespace. This property is optional. + + + The property that contains how designer functions are marked. + + + The case with which the variables are generated. This property is optional. + + + A string to be displayed for the in-place editing node caption. This property is optional. + + + Indicates if the Shell should expand this item. + + + Indicates if the Shell displays the “open-this-folder” plus sign. + + + Indicates if the node is currently expanded in the UIHierarchyWindow. + + + The ext.object for the ITEMID_ROOT item identifier of the project (Project). For other item identifiers, this property contains that item's ext object (ProjectItem), if any. This property is optional. + + + A custom SelectedItem object for the given item identifier. This property is optional. + + + The item identifier of the first child node (ITEMID_NIL if there are no children). + + + Similar to but the property specified by this member only walks items to be displayed in the UIHierarchyWindow. This property is optional. However, this property is required if the hierarchy supports multiple (subset or superset) views of its contents. + + + Indicates if the project handles its own unload and reload. This property is optional. + + + Indicates if this hierarchy is to be enumerated for Find In Files and similar hierarchy enumerations. This property is optional. + + + A handle of an icon; UIHierarchyWindow does not call DestroyIcon on it. + + + A handle to an image list for an icon. Use only when itemid==VSITEMID_ROOT). + + + An index for an icon. + + + The implant for this hierarchy. This property is optional. + + + Indicates where Find In Files runs. This property is optional. + + + Indicates if the item is not displayed in the current UIHierarchyWindow view. This property is optional. However, this property is required if your hierarchy supports multiple (subsetted) views of its contents. + + + Indicates if this is a new unsaved item. This property is optional. + + + Indicates if project storage is local. This property is optional. + + + Indicates if an item is not considered a member of the hierarchy. This property is optional. However, it is required if your hierarchy supports superset views of its contents (for example, displaying files in a directory that are not members of the project). + + + Indicates if an item can be searched for or replaced using Find in Files or Replace in Files. This property is optional. + + + The document cookie (VSCOOKIE) of the hierarchy item. This property is optional. + + + A non-localized string representing the subtype of the item. This property is optional. + + + The name for the project (VSITEMID_ROOT) or item. + + + The item identifier of the next sibling node (ITEMID_NIL if there are no more siblings). + + + Similar to but the property specified by this member only walks items to be displayed in UIHierarchyWindow. This property is optional. However, this property is required if your hierarchy supports multiple (subset or superset) views of its contents. + + + The handle of an icon for an open folder; UIHierarchyWindow does not call DestroyIcon on it. This property is optional. + + + The open folder’s icon index. This property is optional. + + + The overlay for the item's main icon. This property is optional. + + + The owner key string that identifies the project GUID of the owning project. This property is optional. + + + The item identifier of the parent node (ITEMID_NIL if no parent exists). + + + The that owns this hierarchy. + + + The item identifier of this hierarchy in its parent hierarchy. + + + The preferred security identifier (SID) of the text editor language service for the project. This property is optional. + + + The full path to the project directory (for VSITEMID_ROOT only). This property is optional. + + + A GUID that identifies a project across solutions. This property is optional. + + + Obsolete. Use instead. + + + Obsolete. Use instead. + + + Obsolete. Use instead. + + + Obsolete. The item identifier of root must be VSITEMID_ROOT. + + + The name to be used during a save. + + + An for property browsing. This property is optional. + + + Indicates if this is an item for which only the caption should be shown in the UI instead of the full moniker. This property is optional. + + + Indicates whether to filter the project when Visual Basic or C# calls the component picker for add-reference. This property is optional. + + + The sort priority in . This property is optional. + + + An to add services to be started on the next project load (for VSITEMID_ROOT only). + + + The state icon index. + + + A non-localized string representing the storage type. This property is optional. + + + The GUID used to identify the type of node/hierarchy (search on GUID_ItemType). + + + The display name used to identify the type of node/hierarchy (used in the title bar). + + + The for the project/item. This property is optional. + + + An optional alternative project type GUID to use to get add item templates. + + + The hierarchy’s topmost name (solution or server) to put into the title bar of the application, that is, the Foo part of "Foo - Microsoft Visual Studio". This property is optional. + + + An intrinsic extender category identifier (CATID) GUID of the for the given item identifier. For VSITEMID_ROOT, this corresponds to the object used to build the “Project.Properties” collection. This property is optional. + + + The GUID to identify the family/category of this non-Solution based Hierarchy (for example, Portfolio Project Hierarchy). + + + An intrinsic extender category identifier (CATID) GUID of the configuration for the given item identifier. This property is optional. + + + A semicolon delimited list of class identifiers (CLSID) of the configuration-dependent property pages. This property is optional. + + + Indicates if children have been enumerated. This property is optional. + + + Indicates if the item is a container. This property is optional. + + + The process identifier of debuggee (if known), otherwise zero. + + + A semi-colon delimited list of paths in which the debugger looks for source. This property is optional. + + + The code that is supposed to go to the hidden designer file. + + + Indicates whether Application Settings design time support in your project should be disabled. This property is optional. + + + Indicates whether the Data Source Window for this project should be disabled. This property is optional. + + + Indicates if the project item can be exported using the export item template. This property is optional. + + + The intrinsic extender category identifier (CATID) GUID of the ExtObject (Automation Object) for the given item identifier. For VSITEMID_ROOT this corresponds to the type of the “Project” object. This property is optional. + + + The IUnknown of the Intellisense compiler used by the project system. This property is optional. + + + true if the file is a link file. This property is optional. + + + Indicates if an upgrade is required. This property is optional. + + + Indicates if the document should be kept alive in the project regardless of its opened or closed state. This property is optional. + + + Indicates if the hierarchy does not want nested hierarchies sorted first and items after, and sorted alphabetically (like solution folders). This property is optional. + + + A semicolon-delimited ordered list of class identifiers of the preferred property pages. This property is optional. + + + The GUID of the project designer editor the project uses to edit project properties ( should return VARIANT_TRUE if a project designer editor GUID is returned). This property is optional. + + + A semicolon-delimited list of class identifiers of the configuration independent property pages. This property is optional. + + + The hierarchy scoped text for the Client Text field of the status bar. + + + A semicolon-delimited list of application-types supported for project-systems that support My.Application. This property is optional. + + + Indicates if the project uses a Project Designer Editor instead of the property page frame to edit project properties. This property is optional. + + + Indicates whether the project participates in the “this configuration is out of date” message on Build (F5). This property is optional. + + + Indicates if the icon for an inner (nested) hierarchy root is to come from the inner hierarchy image list. This property is optional. + + + The hierarchy branding used to replace the application name in the main window title. This property is optional. + + + An array of service GUIDs that implement and for which this interface should be called for any refactoring operation in the project (only defined for VSITEMID_ROOT). This property is optional. + + + Indicates if the project supports service references. This property is optional. + + + Indicates whether to enable Hierarchical Update for this project. This property is optional. + + + Indicates whether to enable LINQ to DataSet for this project. This property is optional. + + + Indicates whether to enable the N-Tier designer for this project. This property is optional. + + + The Target Framework version. + + + Indicates if the project supports Web references. This property is optional. + + + The format for the target framework moniker. + + + Indicates if this item is to be considered external to the solution. This property is optional. + + + Indicates if your Web project supports being consumed by Silverlight. This property is optional. + + + A semicolon-separated list of projects required to support design time features (Intellisense, Form designers, and so on). This property is optional. + + + A semicolon-separated list of projects required to build this project. This property is optional. + + + A more descriptive name of the item. Replaces the running document table moniker in document windows tooltips or other parts of the UI. This property is optional. + + + Indicates whether your project always builds on debug launch (F5) when the “Only build startup projects and dependencies on Run” Tools option is set. This property is optional. + + + The minimum design time compatible version with which this project is compatible. This property is optional. + + + The provisional viewing status for the item (from the enumeration). This property is optional. + + + A list of supported output types (specified as values used by the OutputTypeEx project property). This property is optional. + + + The Target Platform for a project type. This property is optional. + + + The version of the target platform (for example, “8.0”). This property is optional. However, it is required if is provided. + + + The runtime the project targets (derived from the enumeration). This property is optional. + + + Indicates whether the project's output requires running in an app container or not. This property is optional. If true, the project’s output requires running in an app container. If false, the output des not require running in an app container. + + + The output type for a project. This property is optional. + + + The implementation of for a project. This property is optional. + + + The unload status (UNLOADSTATUS_UnloadedByUser, UNLOADSTATUS_LoadPendingIfNeeded, and so on) from the enumeration, and is implemented only by the stub hierarchy. This property is optional. + + + Indicates the demand load dependencies. This property is optional. + + + Indicates if the project has encountered an error. This property is optional. + + + A localized message indicating the reason for a faulted project. This property is optional. + + + A space-delimited list of the project's capabilities. This property is optional. + + + Indicates whether the file on disk was not last written by the project. This property is optional. + + + Used by the asynchronous task library helper to take an and return a Task Parallel Library (TPL) task. + The type of the result produced by this task. + + + Includes the GUIDs for Visual Studio menu commands. + + + Instantiates a new instance of . + + + The GUID of the CCI set. + + + The GUID of the main menu of the shell. + + + The GUID of the Visual Studio editor standard command set. + + + The GUID of the Visual Studio 6 standard command set. + + + The GUID of the Visual Studio UI hierarchy window commands. + + + + An alias for CLSID_VsVbaPackage. + + + + Defines the context menu of the code window. + + + The ID of the context menu of the folder node. + + + The ID of the context menu of the item node. + + + The ID of the context menu for no available commands. + + + The ID of the context menu for the project node. + + + + The ID of the context menu of the reference node. + + + The ID of the context menu of the root reference node. + + + The ID of the context menu for multiple selections of different types. + + + The ID of the context menu for multiple selections including the project node. + + + The high-order word value for the parameter when querying parameter lists, for example . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the flags associated with QueryRemoveDirectory. + + + Specifies that no flags are set. + + + This flag distinguishes two operations: "Remove From Project" VS. "Delete". If this flag is set, the directory is removed from the project, but still exists on disk. + + + Specifies the flags associated with QueryRemove. + + + Specifies that no flags are set. + + + Specifies that the file is a "Special" file, that is, an invisible file associated with another file in the project. + + + Specifies that the file is a nested project (file), that is, the file sitting on the root node of a nested project. + + + This flag distinguishes two operations: "Remove From Project" and "Delete". If this flag is set, the file is removed from the project, but still exists on disk. + + + + + + + + + + + + + Specifies options for a document in the running document table (RDT). + + + Indicates that a save of the document is not forced on a build. + + + Combination of RDT_DontSave and RDT_DontSaveAs flags. + + + When comparing MkDocument strings, perform a case-sensitive comparison of the strings. + + + Mask of the flags from through . Allow flags in document mask. + + + Do not add to the list of most recently used files. + + + Indicates that the document is not persisted in the list of documents that can be opened when the solution is re-opened. Such a document would not be opened using an editor factory, but might be opened using a wizard or special programmatic code. + + + Any document marked with this value is not included in the list of documents shown in the SaveChanges dialog box. The Save Changes dialog box is displayed when the user selects Exit from the File menu. + + + Indicates that the SaveAs command should not be made available for this document. + + + Places an edit lock on the document. + + + Indicates that no lock is placed on the document. + + + Indicates that the document is created through some special programmatic means. For example, using a wizard. If you specify the flag, then the flag automatically applies to your document. + + + Used in the implementation of miscellaneous files. Prevents the Miscellaneous Files project from calling the CreateDocumentWindow method on the document added to the project. + + + Set automatically by the environment when a solution or project is opened. Used to flag solution and project files in the running document table. Clients are required to set this flag in the case of nested projects. + + + Places a read lock on the document. + + + Requests an unlock of the document. + + + Mask of the Unlock_ , , and flags. + + + Used by . Release the edit lock and do not save. + + + Used by the UnlockDocument method. Release the edit lock and prompt the user to save the file. + + + Used by the UnlockDocument method. Release the edit lock and save the file if it is dirty. + + + Exclude this document from being considered in the documents collection for the automation model. + + + Places a weak edit lock on the document. This flag must be ORed with when registering a weak edit lock. This flag is used in this combination when using . + + + Do not poll for changes to the document's dirty or read-only state. The document owner must take responsibility for explicitly updating the state using or . + + + Specifies save options for a document in the running document table (RDT). + + + Activates the editor window of a document if it generates an error on save. + + + Indicates that the save is a result of a document close. + + + Forces a save even if not dirty. + + + Prompts user to save the document. + + + Reserved flag, do not use. + + + Saves only if changes have been made. (This is the default.) + + + Saves only the root of the hierarchy passed in; does not include its children. + + + Saves only children of the hierarchy passed in; does not include the hierarchy itself. + + + Indicates that the SaveAs dialog is displayed. + + + Indicates that everything will be saved normally except the exception. The supplied document token indicates the exception. + + + Indicates that new unsaved files (created in the New File dialog) should be skipped. + + + Provides utility functions for discovering the registry hive under which Visual Studio is currently running. + + + Represents the root of the registry hive under which Visual Studio is currently running, in the specified part of the registry. + A enumeration specifying the part of the registry. + + + Represents the root of the registry hive under which Visual Studio is currently running, in the specified part of the registry. + A enumeration specifying the part of the registry. + Whether or not the root is writable + + + Represents the root of the registry hive under which Visual Studio is currently running, in the specified part of the registry. + The current . + A enumeration specifying the part of the registry. + Whether or not the root is writable. + + + Specifies the flags used by . + + + Specifies that no flags exist. + + + Deprecated. Do not use. + + + Indicates that the directory has already been removed from source control. + + + This flag distinguishes two operations: "Remove From Project" and "Delete". If this flag is set, the directory is just removed from project, but still exists on disk. + + + Specifies the flags used in . + + + No flags associated with the file. + + + Deprecated. Do not use. + + + Indicates the file has already been removed from source control. + + + Special file, that is, an invisible file associated with another file in the project. + + + Nested project (file), that is the file located at the root node of a nested project. + + + This flag distinguishes two operations: "Remove From Project" and "Delete". If this flag is set, the file is removed from project, but still exists on disk. + + + Exposes Windows Presentation Foundation (WPF) resource keys for Style and ControlTemplate values that apply to common WPF controls. + + + + + + + + Gets the key that can be used at runtime to dynamically bind to a Style for a . + + + Gets the key that can be used at runtime to dynamically bind to a ControlTemplate for a . + + + + + + + + Base class for implementing search tasks used by search-able tool windows. + + + Initializes a new instance of the class. + Cookie with a task identifier. + Search query used by the search task. + Callback interface whose functions need to be called when the search task is complete or has made more progress. + + + Gets or sets the error code describing the search result if the search task has completed with errors. If the task completes without errors, this property is set to zero (0). + + + Gets the search task identifier. The task identifier is the cookie passed in the constructor when the task was created. + + + Gets the task status. + + + Called on background threads when the search is started. Override to do task-specific search. + + + Called on the UI thread when the search is stopped. Override to do task-specific stop actions. + + + Gets the callback interface that needs to be called when the search is complete. + + + Gets the search query used by the search task. + + + Gets or sets the number of search results found. Set this value appropriately as the search progresses. + + + Helper function to set the task status. + Status to be set. + + + Starts the search task. + + + Stops the search task. + + + Gets the status of the current search. This property is set to appropriate values as the search progresses. + + + Wraps a service provider instance. The class can be used to expose a value to a Managed Extensibility Framework composition container. + + + Constructs an instance of the class. + The instance of the service provider to wrap + + + Gets the service object of the specified type. + The service object. + The type of service object. + + + Provides static helper methods to use with the Visual Studio shell. + + + Modifies a Windows Forms control to use the new Explorer style theme. + The list view control to modify. + + + Modifies a Windows Forms control to use the new Explorer style theme. Hot tracking is enabled by default. + The tree view control to modify. + + + Modifies a Windows Forms control to use the new Explorer style theme. + The tree view control to modify. + true to enable hot tracking on the tree view control; otherwise, false. + + + Empties the task list. + If the method succeeds, it returns . If it fails, it returns an error code. + + . + + + + Gets the current debug mode of the shell, for example, design mode, running mode, or break mode. + One of the values. + + . + + + Retrieve the host's environment font as a . + The font. + The service provider. + + + + Gets the hierarchy node that is specified by the project GUID. + The interface of the project. + + . + The GUID of the project. + + + Gets the miscellaneous project from the current solution. + The interface of the miscellaneous project. + + . + + + Returns the miscellaneous project in a solution. + The interface of the miscellaneous project. + + object used to retrieve the object. + true if the project should be created; otherwise, false. + + + Gets the output window pane that is specified by the GUID. + The interface that is specified by the GUID. + + . + The GUID of the output window pane. + + + + + + + Returns a project for the specified document. + The interface of the project that contains the document. + The object that is used to retrieve the object. + The unique identifier of the document in the project system. + + + Gets an interface and a document cookie from the running document table for the specified document. + + . + The moniker of the file. + [out] The interface of the project that containa the document. + [out] The item ID of the document. + [out] The interface for the document. + [out] The identifier of the document that is held by the running document table. + + + Gets the text of the specified file, if it exists in the running document table. + The text of the file. + + . + The absolute path of the file. + + + Gets a list of tasks. + An of type of the task items. + + . + + + Gets a list of all task items. + The task items. + The service provider. + + + + Gets the text view in the specified window frame. + The text view in an object, or null if the window frame is a code window that is not implemented as a text view. + + that contains the text view. + + + Gets a window for the given GUID. + + . + + . + The GUID of the hierarchy window. + + + Gets the window that exists in the specified window frame. + The , if there is an object of that type in the frame; otherwise, null. + The interface for the window frame. + + + Determines whether the specified document is open. + true if the document is open in the given logical view. If is Guid.Empty, then this method returns true if any view is open; otherwise, false. + + . + The full path to the document. + The GUID of the logical view. + [out] Returns the interface of the project that contains the document. + [out] Returns the item ID of the document. + [out] Returns the in which the document is open. + + + Determines whether the extensibility object is currently executing an automation operation. + true if the extensibility object is executing an automation operation; otherwise, false. + + . + + + Determines whether the build manager is busy. + true if the build manager is building or deploying the built application; otherwise, false. + + . + + + Determines whether Visual Studio is in design mode (as opposed to run mode or debug mode). + true if Visual Studio is in design mode; otherwise, false. + + . + + + Starts the debugger. + + . + A structure. + + + + Opens the specified miscellaneous file in the specified editor. + + . + The path of the file. + The name of the file. + The GUID of the editor in which to open the file. + The name of the kind of window in which to open the editor. + The logical view of the editor, for example . + + + + + Opens the specified document. + + . + The path of the document. + + + Opens the specified document in the specified view. + + . + The absolute path of the document. + The GUID of the logical view in which to open the document. + [out] Returns the interface of the project that contains the document. + [out] The item ID of the document. + [out] Returns the interface of the window in which the document is open. + + + Opens the specified document in the specified logical view. + + . + The absolute path of the document. + The GUID of the logical view in which to open the document. + [out] Returns the interface of the project that contains the document. + [out] The item ID of the document. + [out] Returns the interface of the window in which the document is open. + [out] Returns the interface of the primary view of the window. + + + Opens the specified document by using the specified editor. + The interface of the window in which the document is opened. + + . + The absolute path of the document. + The GUID of the type of editor to use. + The GUID of the logical view in which to open the document. + + + Opens the specified document by using the specified editor. + + . + The absolute path of the document. + The GUID of the type of editor to use. + The GUID of the logical view in which to open the document. + [out] The interface of the project that contains the document. + [out] The item ID of the document. + [out] The interface of the window in which the document is opened. + + + + Displays a message box that contains the specified title and prompts the user to respond (yes or no) to the specified message. + true if the operation succeeded; otherwise, false. + The message to which the user must respond. + The title of the message box. + The that defines the kind of message. + The interface of the shell in which to display the message box. + + + Renames the specified document. + + . + The current absolute path of the document. + The new absolute path of the document. + + + If the file is dirty, saves it in the specified text view. + The interface of the file to be saved. + + + Saves the specified file if it is dirty. + + . + The absolute path of the file. + + + + + + + Displays a message box with the specified message. + If the method succeeds, it returns . If it fails, it returns an error code. + + . + The message to display. + The title of the message box. + The value that specifies the type of message. + The value that specifies the set of buttons to display. + The value that specifies which button is to be the default button. + + + + + + + Identifies property settings for a solution. + + + The directory where the solution file is saved. + + + The full path to the solution file. + + + The full path to the user options file. + + + Gets or sets the base name of the solution file. + + + Indicates if the solution is dirty. If true, the solution file is dirty. + + + Indicates if a solution file is open. If true, the solution file is open. + + + The number of projects open in the solution. + + + A semicolon-separated list of all project extensions. + + + The filter/entension list used in the Open Project dialog. + + + The code page for saving files (CP_ACP/CP_WINUNICODE). + + + The full path to the file being opened (valid only during open). + + + The caption for solution node in Project Explorer. + + + Indicates if a solution file is being opened. If true, the solution file is being opened. + + + Indicates if saving the solution requires a Save As dialog. If true, saving the solution does require a Save As dialog. + + + The count of projects in file being opened (valid only during open). + + + A semicolon-delimited list of class identifiers (CLSIDs) of the solution-level property pages. + + + Indicates if the solution node is hidden in the integrated development environment (IDE). If true, the solution node is hidden in the IDE. + + + Indicates if the solution is "zero-impact" (that is, a permanent save is performed explicitly using File.SaveAll). If true, the solution is zero-impact. + + + Indicates if the solution is in simplified configuration mode. If true, the solution is in simplified configuration mode. + + + Indicates if a solution file is being closed. If true, the solution file is being closed. + + + The IUnknown of of the project being closed. + + + Indicates if the solution is reopening the documents that were open when the solution was last closed. If true, the solution is reopening the documents. + + + Indicates if the notification is pending. If true, the notification is pending. This occurs when a new project is being created with a new solution. + + + The state of the project load security dialog kept between different language packages. + + + Indicates if the .suo file accompanying the solution file was originally created on the same computer it's being opened on. If true, the .suo file was created on the same computer it is being opened on. Check inside . This property is read only. + + + The preferred language for the New Project dialog; if there is no preferred language, an empty length string is returned. If there is a preferred language, then the non-preferred language project types are displayed under an "Other Languages" node in the New Project dialog. The preferred language is set by the user's choice of development settings in the Import and Export Settings dialog. + + + Indicates if the solution is being saved when closing. If true, the solution is being saved when closing. + + + The state of the project load security dialog kept between different language packages. + + + Returns true if Visual Studio is currently loading a batch of pending projects triggered in the background at idle. IVsSolutionLoadEvents::OnBeforeLoadProjectBatch(true) has been called. + + + Returns true if Visual Studio is currently loading a batch of pending projects synchronously triggered by some user action or command invocation that requires a set of projects to be loaded. IVsSolutionLoadEvents::OnBeforeLoadProjectBatch(false) has been called. + + + Indicates if all projects have been loaded by the Background Solution Load feature. If true, all projects have been loaded in the background. + + + Gets or sets the base caption for the Solution Explorer tool window. The default is "SolutionExplorer". The full caption is built by concatenating BaseSolutionExplorerCaption and . + + + Gets or sets the suffix caption for the Solution Explorer tool window. The default is VT_Empty. The full caption is built by concatenating and SolutionExplorerCaptionSuffix. + + + The full caption for the Solution Explorer tool window. The full caption is built by concatenating and . + + + Gets or sets a Boolean: true if new projects should be added on the sibling directory of the solution, otherwise false. + + + Gets or sets a pointer to the active Solution Load Manager. The default is a null reference. A solution load manager is able to control how projects are loaded during the Solution Open operation. It can control whether projects are loaded immediately, loaded in the background (at idle), left to be loaded if needed, or set to stay unloaded. A solution load manager is expected to implement . A common approach is to have the solution load manager package autoload for the SolutionOpening UIContext, for example, [ProvideAutoLoad(UIContextGuids.SolutionOpening)]. This property can also be set during or during for the pre solution section. + + + The solution file extension (default - ".sln"). + + + The solution options file extension (default - ".suo"). + + + The number of faulted projects in the solution. + + + The IUnknown of that represents the current project fault resolution context. This property is read only (but the returned property bag is mutable). + + + The IUnknown of that contains the view model for some solution properties. This property is primarily used by the solution navigator. + + + Used by the asynchronous task library helper as the method type for a task body (what the task executes). Users of the library can either pass in this delegate type directly or use one of the wrapper methods that wraps simpler anonymous functions to this delegate type. + The task that is executing, that is, the asynchronous task to which the task body belongs. This can be used to check if task cancellation was requested. + An array that contains the dependent tasks that had to be completed before your task. Normally this is either empty if the task was a new task, or it contains a single task if the task was a continuation of another task. + + + Specifies the task’s continuation options. + + + Default = "Continue on any, no task options, run asynchronously" Specifies that the default behavior should be used. Continuations, by default, are scheduled when the antecedent task completes, regardless of the task's final . + + + A hint to a to schedule a task in as fair a manner as possible, meaning that tasks scheduled sooner are more likely to be run sooner, and tasks scheduled later are more likely to be run later. + + + The task is a long-running, course-grained operation. It provides a hint to the that oversubscription may be warranted. + + + The task is attached to a parent in the task hierarchy. The parent task is not marked as completed until this child task is completed as well. + + + An is thrown if an attempt is made to attach a child task to the created task. + + + In the case of continuation cancellation, prevents completion of the continuation until the antecedent has completed. + + + The continuation task should not be scheduled if its antecedent ran to completion. This option is not valid for multi-task continuations. + + + The continuation task should not be scheduled if its antecedent threw an unhandled exception. This option is not valid for multi-task continuations. + + + The continuation task should not be scheduled if its antecedent was canceled. This option is not valid for multi-task continuations. + + + The continuation task should be scheduled only if its antecedent threw an unhandled exception. This option is not valid for multi-task continuations. + + + The continuation task should be scheduled only if its antecedent ran to completion. This option is not valid for multi-task continuations. + + + The continuation task should be executed synchronously. With this option specified, the continuation is run on the same thread that causes the antecedent task to transition into its final state. If the antecedent is already complete when the continuation is created, the continuation is run on the thread creating the continuation. Only very short-running continuations should be executed synchronously. + + + The task can be canceled independently of any other task. + + + The continuation task cannot be canceled. + + + The same as . + + + Specifies the options for creating a task. + + + The default behavior should be used. + + + A hint to a to schedule a task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to be run sooner, and tasks scheduled later will be more likely to be run later. + + + The task will be a long-running, coarse-grained operation. It provides a hint to the that oversubscription may be warranted. For background tasks, this member causes the task to run its own thread instead of the thread pool. + + + Creates the task as attached to the currently-running task. The parent task is not marked as completed until this child task is completed as well. + + + A child task cannot be attached to the task. + + + The task cannot be canceled. Users will get an exception if they try to cancel the task. + + + Supplies helper methods for using the Visual Studio task library in managed code. + + + Sets a continuation on the task passed in so that the task completion source is set to the correct state after the task is completed, faulted, or canceled. + Task completion source that is set once the task is completed. + Task that is used to set the state of the task completion source. + Return type of the task. + + + Creates a Visual Studio task that is run after all the provided tasks have either finished running or have been cancelled. Overrides . + The task scheduler service that is creating the task. + [in] The task scheduler service to use to create the task. + [in] Where to run this task. + [in] An array of tasks to wait. + [in] Worker method for the task. + + + Creates a task (using the specified options) that is run after all the given tasks are completed. Overrides . + The task scheduler service that is creating the task. + [in] The task scheduler service to use to create the task. + [in] Where to run this task. + [in] An array of tasks to wait. + [in] The continuation options set for the task. + [in] Worker method for the task. + [in] Asynchronous state for the task. + + + Appends the provided action to this task to be run after the task is run to completion. The action is invoked on the context provided. Overrides . + A new instance that has the current task as its parent. + [in] The task to which to append the action. + [in] Where to run this task. + [in] Action to be executed. + + + Appends the provided action (using the specified options) to this task to be run after the task is run to completion. The action is invoked on the context provided. Overrides . + A new instance that has the current task as its parent. + [in] The task to which to append the action. + [in] Where to run this task. + [in] Allows setting TPL Task continuation options. + [in] Action to be executed. + [in] Asynchronous state for the task. + + + Creates a Visual Studio task that is executed with the specified context. + The task that was created. + [in] The task scheduler service. + [in] Where the task will be executed. + [in] Action to be executed. + + + Creates a Visual Studio task that is executed with the specified context. + The task that was created. + [in] The task scheduler service. + [in] Where the task will be executed. + [in] Flags that control optional behavior for the creation and execution of tasks. + [in] Action to be executed. + Asynchronous state for the task. + + + Creates a task that is run on the given context. + The task scheduler service that is creating the task to run. + [in] The task scheduler service to use to create the task. + [in] Where to run this task. + [in] Action to be executed. + + + Creates a task with the specified options that is run on the given context. + The task scheduler service that is creating the task to run. + [in] The task scheduler service to use to create the task. + [in] Where to run this task. + [in] The creation options set for the task. + [in] Action to be executed. + [in] Asynchronous state for the task. + + + Creates a task body that can be consumed by the task scheduler service. + An implementation of . + [in] Anonymous method to execute as the task body. + + + Creates a task body that can be consumed by the task scheduler service. + An implementation of . + [in] Anonymous method to execute as the task body. + + + Creates a task body that can be consumed by the task scheduler service. + An implementation of . + [in] Anonymous method to execute as the task body. + The type of object to create. + + + Creates a task body that can be consumed by the task scheduler service. + An implementation of . + [in] Anonymous method to execute as the task body. + + + Creates a task body that can be consumed by the task scheduler service. + An implementation of . + [in] Anonymous method to execute as the task body. + The type of object to create. + + + Creates a task completion source instance with the specified options. + The task scheduler service that is creating the task completion source. + [in] The task scheduler service to use to create the completion source. + [in] Task creation options for the task controlled by the completion source. + [in] Asynchronous state that will be stored by the task controlled by the completion source. + + + Retrieves a task that delays execution of the subsequent task by a given period of time. + The delaying task. + [in] The task scheduler service. + [in] The number of milliseconds to delay the subsequent task. + + + Returns a task that delays execution of the subsequent task by a given period of time. + The delaying task. + [in] The task scheduler service. + [in] The amount of time to delay the subsequent task. + + + Gets the awaiter instance that contains the task that will be used to schedule continuations. Adds await support for an awaiter instance that can be returned from a call to . + The same instance of the awaiter on which this method was called. + [in] Awaiter that contains the task that will be used to schedule continuations. + + + Gets the task to be used for scheduling continuations. + An awaitable object for the instance. + [in] The task to be used for scheduling continuations. + + + transforms a task parallel library (TPL) task from an asynchronous function into an . + An IVsTask that only completes once the TPL task that was returned from completes. + Task scheduler used to create the . + Asynchronous function that takes an and returns a TPL task. + Return type of the task. + + + Extension method for task awatier to support awaits with a specific context. + The awaitable object. + [in] The task that will be used to schedule continuations. + [in] Context under which the continuation would be scheduled. + + + Waits for the task to complete (not including any continuations). Override for with default options. + The time to wait. + The task that is to wait to complete. + The timeout (in milliseconds) or INFINITE. + + + Waits for the task to complete (not including any continuations). Override for to use proper enumeration types. + The time to wait. + The task that is to wait to complete. + The timeout (in milliseconds) or INFINITE. + The options, specified in , for the wait operation. + + + Yields the current operation on the thread. The rest of the asynchronous method will be scheduled as a continuation. + An awaiter implementation to use with the await keyword. + The instance of the task scheduler service. + Context to use for scheduling the rest of the asynchronous method. + If a task completion source is passed in, the task created is added as a dependency. + + + Specifies how the task is run. + + + Runs the task on the background thread pool with normal priority. + + + + + + Runs the task on the UI thread using background priority (that is, below user input). + + + Runs the task on the UI thread when Visual Studio is idle. + + + Runs the task on the current context (that is, the UI thread or the background thread). + + + Runs the task on the background thread pool and sets the background mode on the thread while the task is running. This is useful for I/O-heavy background tasks that are not time critical. + + + + + + Specifies the options for task wait operations. + + + The default behavior should be used. + + + The task must return from a wait immediately if the task is canceled. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Adds a project subtype to the existing list of defined project subtypes for the Web Site Project. + + + Initializes a new instance of the class. + Language identifier being referenced from the Visual Studio template. + Language name that shows up in the Add New Web Site dialog under the list of languages. + + + Gets the language identifier that is being referenced from the Visual Studio template. + + + Gets the language name that shows up in the Add New Web Site dialog under the list of languages. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Allows the Web Site Project to nest one file type (related) under another file type (primary) in the solution explorer. + + + Initializes a new instance of the class. + The primary file extension that will nest files. + The related file extension that will nest under the primary file extension. + + + Gets the primary file extension that nests files. + + + Registers this attribute with the given context. + A provided by an external registration tool. The context can be used to create registry keys, log registration activity, and obtain information about the component being registered. + + + Gets the related file extension that nests under the primary file extension. + + + Unregisters this attribute. + A provided by an external registration tool. The context can be used to remove registry keys, log registration activity, and obtain information about the component being registered. + + + Represents a Visual Studio window pane. + + + Initializes a new instance of with a null parent service provider + + + Initializes a new instance of with the specified service provider. + + . Can be null. + + + Gets or sets the content of this tool window. + The object that represents the content of this tool window. + + + Disposes the window pane and its resources. + + + Disposes the resources of the window pane. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Gets the service of the specified type. + The service. +  The type of the service to get. + + + Gets the initialization mode that is associated with this window pane. + + . + + + Initializes services after the window pane has been sited. + + + Override to load the previously saved state of the pane. + By default this method returns . + The stream from which to load the state. + + + Executes the specified command. + Returns if the project manager is closed or the command is not supported. Otherwise, returns or an error code if one of the executed commands returned an error code. + The GUID of the command group to which the command belongs. + The ID of the command. + Values taken from the enumeration, which describe how the object should execute the command. + Pointer to a VARIANTARG structure that contains input arguments. Can be null. + Pointer to a VARIANTARG structure that contains command output. Can be null. + + + Gets the status of the commands. + If the method succeeds, it returns . If it fails, it returns an error code. + Unique identifier of the command group. All the commands that are passed in the array must belong to the group that is specified by . + The number of commands in the array. + A caller-allocated array of structures that indicate the commands for which the caller requires status information. This method fills the member of each structure with values taken from the enumeration. + Pointer to an structure to return a name and/or status information of a single command. Can be null to indicate that the caller does not require this information. + + + Closes the pane. + If the method succeeds, it returns . If it fails, it returns an error code. + + + Creates the pane. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] The created element. + + + When implemented in a derived class, gets the default size of the pane. + By default this method returns . + [out] The size. + + + When implemented in a derived class, loads custom state storage. + By default this method returns . + The stream from which to load the state. + + + Stores the state of the pane to the specified stream. + If the method succeeds, it returns . If it fails, it returns an error code. + The stream to which to save the state. + + + Sets the site for this window pane. + If the method succeeds, it returns . If it fails, it returns an error code. + The service provider. + + + Handles keyboard accelerators before the shell processes the message. + If returns true, returns , otherwise returns . + The message. + + + Closes the window pane. Obsolete. + If the method succeeds, it returns . If it fails, it returns an error code. + + + Creates a window pane. Obsolete. + + . + A pointer to the parent window. + The absolute x ordinate. + The absolute y ordinate. + The width of the window. + The height of the window. + [out] A pointer to the new window pane. + + + Gets the default size of the window pane. Obsolete. + + . + An array of structures. + + + Loads the saved view state. Obsolete. + + . + The from which to load the view state. + + + Saves the loaded view state. Obsolete. + + . + The to which to save the view state. + + + Initializes this window pane with the specified service provider. Obsolete. + If this method succeeds, it returns ; if it fails, it returns . + + . + + + Handles the translation of navigation keys. Obsolete + If this method succeeds, it returns ; if it fails, it returns . + An array of structures that contain the character or character combination to be translated. + + + Raised when the window is closed. + + + Raised when the window pane is created. + + + Preprocesses the messages from navigation keys. + true if the method was handled; otherwise, false. + The . + + + Override to save custom state information to be used later when the pane is reconstructed. + By default sets the stream to null and returns . + The stream with the state information. + + + Gets the service of the specified type. + An object that represents the service. + The type of the service to get. + + + Gets the window associated with this window pane. + + . + + + Represents the possible initialization states for a object. + + + The window pane is not initialized. + + + The window pane was initialized with . + + + The window pane was initialized with . + + + A project that is a subtype or flavor of an inner project. All methods by default delegate to the inner project. Non-default behaviors should be handled by the flavored project. + + + When overridden in a derived class, initializes an instance of the class. + + + Subscribes to hierarchy events. + A unique value, or cookie, that is needed to disable notification of hierarchy events. + + . + + + Closes and cleans up a hierarchy once the environment determines that it is no longer used. + + + Raised after a directory has been added to the project. + + + Raised after a directory has been removed from the project. + + + Raised after a directory in the project has been renamed. + + + Executes a command on a specific item within a UI hierarchy window, or on the hierarchy itself. + If the method succeeds, it returns . If it fails, it returns an error code. + The identifier of the item affected by the command. For single selection, this value is the actual item ID. For multiple selections, set equal to . + Unique identifier of the command group. All the commands in must belong to the group specified by . + The command to be executed. This command must belong to the group specified with . + A member of the enumeration, describing the type of action to perform. + A pointer to a VARIANTARG structure containing input arguments. Can be null. + A pointer to a VARIANTARG structure to receive command output. Can be null. + + + Raised after a file has been added to the project. + + + Raised after a file has been removed from the project. + + + Raised after a file in the project has been renamed. + + + Gets the unique name associated with an item in the hierarchy. Used for workspace persistence, such as remembering window positions. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the hierarchy item. + [out] The canonical name of the hierarchy item. + + + Gets properties whose values are GUIDs. + The GUID value of the property. + The item ID of the hierarchy node for which to get the property. + The ID of the property. + + + Determines whether or not a node is a nested hierarchy. + If is not a nested hierarchy node, this method returns . If the requested interface is not supported on the hierarchy object, is returned. The caller would then treat this node as if it had no children. + The item ID of the node. + The interface ID of the node. + [out] Returns a pointer to the node, if it is a nested hierarchy node.  + [out] Returns the item ID of the nested hierarchy node; this will always be . + + + Gets the value of a property for a given node. + If the method succeeds, it returns . If it fails, it returns an error code. + The item ID of the node. + The ID of the requested property. + [out] The value of the property. + + + Gets the service provider from which to access the services. + + . + + + Called by the outer project subtype to have the owned inner project subtype do its initialization work. + The name of the project file. + The path of the project file. + The name of the project. + Flags from the enumeration. + [ref] The interface ID of the project. + [out] Returns true if project creation was canceled. + + + The interface of the inner project. + + + The of the inner project. + + + The interface of the inner project. + + + The interface of the inner project. + + + Executes a specified command or displays help for a command. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the command group to which the command belongs. + The ID of the command. + A member of the enumeration, describing the type of action to take. + A pointer to a VARIANTARG structure containing input arguments. May be null. + A pointer to a VARIANTARG structure containing command output. May be null. + + + Queries the object for the status of one or more commands. + If the method succeeded, , otherwise an error code. + The GUID of the command group to which the commands belong. + The number of commands in the command array. + An array of structures that contain information about the commands. + Pointer to an structure in which to return name and/or status information of a single command. Can be null. + + + Gets the list of project type GUIDs that make up the aggregate project. This method should be delegated to the innermost project within the system of aggregated project subtypes. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] A semicolon-delimited set of project type GUIDs. + + + Called by the outer project subtype to have the inner project subtype do its initialization work. + If the method succeeds, , otherwise an error code. + The project file name of the project to be initialized. + The path of the project file.  + The name of the project. + Flags that describe how a project is to be created or opened. Values are taken from the enumeration. + [ref] The interface ID of the project. It should be . + [out] A pointer to the project.  + [out] true if the project was canceled.  + + + Called to continue initialization after aggregation is complete. + If the method succeeded, , otherwise an error code. + + + Updates the list of GUIDs that are persisted in the project file of the base project. + If the method succeeds, it returns \. If it fails, it returns an error code. + The GUIDs to set. + + + Sets up the inner project as well as the necessary interface pointers. + If the method succeeds, it returns . If it fails, it returns an error code. + The IUnknown of the inner project subtype. + + + Subscribes to hierarchy events. + If the method succeeds, it returns . If it fails, it returns an error code. + The to which to register. + [out] Returns the unique identifier used to unsubscribe for these events. + + + Closes and cleans up a hierarchy once the environment determines that it is no longer used. + If the method succeeds, it returns . If it fails, it returns an error code. + + + Gets a unique name for an item in the hierarchy. Used for workspace persistence, such as remembering window positions. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the hierarchy item. + [out] The canonical name of the item. + + + Gets properties whose values are GUIDs. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the hierarchy item. + The ID of the property. + [out] Returns the GUID value of the property. + + + Determines whether or not a node is a nested hierarchy. + If is not a nested hierarchy node, this method returns . If the requested interface is not supported on the hierarchy object, is returned. The caller would then treat this node as if it had no children. + The item ID of the node. + The interface ID of the node. + [out] Returns a pointer to the node, if it is a nested hierarchy node.  + [out] Returns the item ID of the nested hierarchy node; this will always be . + + + Gets properties of a given node or of the hierarchy. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item. + The ID of the property. + [out] The value of the property.  + + + Gets the service provider from which to access the services. + If the method succeeds, it returns . If it fails, it returns an error code. +  . + + + Returns the identifier of the hierarchy item, given its canonical name. + If the method succeeds, it returns . If it fails, it returns an error code. + The canonical name of the item. + [out] The ID of the item. + + + Determines whether the hierarchy can be closed. + If the method succeeds, it returns . If it fails, it returns an error code. + [out] Returns true if the hierarchy can be closed, otherwise false. + + + Sets properties whose values are GUIDs. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item. + The ID of the property to set. + The GUID value of the property. + + + Sets properties of a specific node or of the hierarchy. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item. + The ID of the property to set. + The value of the property. + + + Sets the service provider from which to access the services. + If the method succeeds, it returns . If it fails, it returns an error code. + + . + + + Disables client notification of hierarchy events. + If the method succeeds, it returns . If it fails, it returns an error code. + The unique identifier that was handed back with . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + Raised after directories have been added to a project. + + . + The number of projects in the array. + The number of directories to be added. + An array of objects, corresponding to the projects in the solution. + An array of indices of the directories that were affected. + An array of paths of the directories that were added. + An array of . May be null. + + + Raised after files have been added to a project. + + . + The number of projects in the array. + The number of files to be added. + An array of objects. + An array of indices of the files that were affected. + An array of paths of the files that were affected. + An array of . May be null. + + + Raised after a directory was removed from the project. + + . + The number of projects in the array. + The number of directories affected. + An array of objects, corresponding to the projects in the solution. + An array of indices of the directories that were affected. + An array of paths of the directories that were affected. + An array of . May be null. + + + Raised after files have been removed from the project. + + . + The number of projects in the array. + The number of files that were affected. + An array of objects, corresponding to the projects in the solution. + An array of indices of the files that were affected. + An array of paths of the files that were affected. + An array of . May be null. + + + Raised after a directory has been moved or renamed. + + . + The number of projects in the array.  + The number of directories affected. + An array of objects, corresponding to the projects in the solution. + An array of indices of the directories affected. + An array of the old paths of the directories. + An array of the new paths of the directories. + An array of . May be null. + + + Raised after files have been moved or renamed. + + . + The number of projects in the array.  + The number of files affected. + An array of objects, corresponding to the projects in the solution. + An array of the indices of the files. + An array of the old paths of the files. + An array of the new paths of the files. + An array of . May be null. + + + This method is called by the source code control component to inform listeners that source control status has changed. Do not call this method. + + . + The number of projects in the array. + The number of files affected. + An array of objects, corresponding to the projects in the solution. + An array of the indices of the files. + An array of paths of the files. + An array of SccStatus flags. May be null. + + + Raised by a project to determine whether directories can be added to the project. Not used. + + . + The affected. + The number of directories affected. + An array of paths to the directories. + An array of . + An array of summary objects, which represent a summary of the yes/no values returned. + An array of . + + + Raised to determine whether files can be added to the project. Not used. + + . + The affected. + The number of files affected.  + An array of paths of the files. + An array of . + An array of summary objects, which represent a summary of the yes/no values returned. + An array of . + + + Raised to determine whether directories can be removed from the project. Not used. + + . + The affected. + The number of directories affected. + An array of paths of the directories. + An array of . + An array of summary objects, which represent a summary of the yes/no values returned. + An array of . + + + Raised to determine whether files can be removed from the project. Not used. + + . + The affected.  + The number of files affected. + An array of paths to the files. + An array of . + An array of summary objects, which represent a summary of the yes/no values returned. + An array of . + + + Raised to determine whether directories can be renamed in the project. Not used. + + . + The affected. + The number of directories affected.  + An array of the old paths of the files. + An array of the new paths of the files. + An array of . + An array of summary objects, which represent a summary of the yes/no values returned. + An array of . + + + Raised to determine whether files can be renamed in the project. Not used. + + . + The affected. + The number of files affected. + An array of the old paths of the files. + An array of the new paths of the files. + An array of . + An array of summary objects, which represent a summary of the yes/no values returned. + An array of . + + + Subscribes to hierarchy events. + The cookie. + + . + A unique value, or cookie, that is needed to disable notification of hierarchy events. + + + Closes the project and cleans up its resources once the environment determines that it is no longer used. + + . + + + Executes a command on a specific item within a UI hierarchy window, or on the hierarchy itself. + If the method succeeded, , otherwise an error code. + The identifier of the item affected by the command. For single selection, this value is the actual item ID. For multiple selections, set equal to . + Unique identifier of the command group. All the commands in must belong to the group specified by . + The command to be executed. This command must belong to the group specified with . + A member of the enumeration, describing the type of action to perform. + A pointer to a VARIANTARG structure containing input arguments. Can be null. + A pointer to a VARIANTARG structure to receive command output. Can be null. + + + Gets the unique name associated with an item in the hierarchy. Used for workspace persistence, such as remembering window positions. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the hierarchy item. + [out] The canonical name of the item. + + + Gets properties whose values are GUIDs. + + . + The item ID of the hierarchy node for which to get the property. + The ID of the property. + [out] The GUID value. + + + Determines whether or not a node is a nested hierarchy. + If is not a nested hierarchy node, this method returns . If the requested interface is not supported on the hierarchy object, is returned. The caller would then treat this node as if it had no children. + The item ID of the node. + The interface ID of the node. + [out] Returns a pointer to the node, if it is a nested hierarchy node.  + [out] Returns the item ID of the nested hierarchy node; this will always be . + + + Gets the value of a property for a given node. + If the method succeeds, it returns . If it fails, it returns an error code. + The item ID of the node. + The ID of the requested property. + [out] The value of the property. + + + Gets the service provider from which to access the services. + + . + [out] . + + + Returns the identifier of the hierarchy item, given its canonical name. + If the method succeeds, it returns . If it fails, it returns an error code. + The canonical name of the item. + [out] The ID of the item. + + + Determines whether the hierarchy can be closed. + true if the hierarchy can be closed, otherwise false. + [out] Returns true if the hierarchy can be closed, otherwise false. + + + Gets the status of the specified commands. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item being queried. + The GUID of the command group to which the commands belong. + The number of commands in the array. + An array of command structures with information on the commands. + A pointer to an structure containing name and/or status information on the command. + + + Sets properties whose values are GUIDs. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item. + The ID of the property to set. + The GUID value of the property. + + + Sets properties of a specific node or of the hierarchy. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item. + The ID of the property to set. + The value of the property. + + + Sets the service provider from which to access the services. + + . + + . + + + Disables client notification of hierarchy events. + If the method succeeds, it returns . If it fails, it returns an error code. + The unique identifier that was handed back with . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + A placeholder for a future method. + Implementers should return . + + + Subscribes to events. It is not required to flavor a project but makes it easier for derived classes to subscribe to these events. + + + Returns the identifier of the hierarchy item, given its canonical name. + If the method succeeds, it returns . If it fails, it returns an error code. + The canonical name of the item. + [out] The ID of the item. + + + Determines whether the hierarchy can be closed. + true if the hierarchy can be closed, otherwise false. + + + Gets the status of the specified commands. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item being queried. + The GUID of the command group to which the commands belong. + The number of commands in the array. + An array of command structures with information on the commands. + A pointer to an structure containing name and/or status information on the command. + + + Raised after the source code control status of an item in the project has changed. + + + The service provider of the project. + + + Sets properties whose values are GUIDs. + The ID of the item. + The ID of the property to set. + The GUID value of the property. + + + Sets up the interfaces and menu commands for the inner project. + The inner project subtype. + + + Sets properties of a specific node or of the hierarchy. + If the method succeeds, it returns . If it fails, it returns an error code. + The ID of the item. + The ID of the property to set. + The value of the property. + + + Gets the service of the specified type. + A service of the type specified. + The type of the service. + + + Disables client notification of hierarchy events. + The unique identifier that was handed back with . + + + A placeholder for a future method. + + + A placeholder for a future method. + + + A placeholder for a future method. + + + A placeholder for a future method. + + + A placeholder for a future method. + + + Represents the method that handles events that relate to files and folders of the flavored project. + The object that raises the event. + + . + + + + A project that is a subtype/flavor of an inner project. + + + + + + + + + + Called after a directory was added to this project. + + + Called after a directory was remove from this project. + + + Called after a directory was renamed in this project. + + + + Called after a file was added to this project. + + + Called after a file was remove from this project. + + + Called after a file was renamed in this project. + + + + + A project derived from this base class will be aggregated with a native COM component (the ProjectAggregator object) that can also aggregate an inner project in case of flavoring. + + + + + + + + Allows the project to initialize itself. At this point it possible to call the inner project. This method also allows canceling the project creation process. + + + + + This must be delegetated to the inner most project + + + Do the initialization here (such as loading flavor specific information from the project) + + + This is called when all object in aggregation have received InitializeForOuter calls. At this point the aggregation is complete and fully functional. + + + This must be delegated to the innermost project + + + This is where all QI for interface on the inner object should happen Then set the inner project wait for InitializeForOuter to be called to do the real initialization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is called when all object in aggregation have received InitializeForOuter calls. At this point the aggregation is complete and fully functional. + + + + + + Called after the source code control status of a file in this project changed. + + + + + This is were all QI for interface on the inner object should happen Then set the inner project wait for InitializeForOuter to be called to do the real initialization + + + + + + + + + + + + + + A factory for creating flavored projects, otherwise known as project subtypes. + + + Initializes a new instance of . + + + Determines whether or not the project can be created with the supplied parameters. + true if the project file name is valid, otherwise false. + The name of the file. + Not used. + + + Creates a project. + The name of the project file. + The path of the project file. + The name of the project. + Values from . + The interface ID of the project. + [out] Returns a pointer to the project. + [out] Returns true if the operation was canceled, otherwise false. + + + Disposes the service provider. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Initializes the project factory. + + + Gets a semicolon-delimited string of project type GUIDs. + + . + The name of the project file. + [out] Returns the semicolon-delimited string of project type GUIDs. + + + Creates an aggregatable inner project. + If the method succeeds, it returns . If it fails, it returns an error code. + The outer project, or null if the outer project is to be created. + [out] Returns the inner project. + + + Determines whether or not the project can be created. + If the method succeeds, it returns . If it fails, it returns an error code. + The name of the file. + If used, values from the enumeration. + [out] Returns true if the project can be created, otherwise false. + + + Disposes this object. + + . + + + Creates a flavored project. + + . + The name of the project file. + The path of the project file. + The name of the project. + Values from . + The interface ID of the project. + [out] Returns a pointer to the project. + [out] Returns true if the operation was canceled, otherwise false. + + + Initializes the project and allows the project to obtain services proffered by the environment. + + . + + . + + + Creates an instance of the project. + If the method succeeds, it returns . If it fails, it returns an error code. + The outermost project, or null if the outer project is being created. + + + Gets the set of project type GUIDs from the project file. + When implemented by a derived class, a semicolon-delimited string containing the project type GUIDs in the project file. + The project file. + + + Gets the project's service provider. + + . + + + Base class for flavored project factories. + + + Initializes a new instance of . + + + Determines whether or not the project can be created with the supplied parameters. + true if the project file name is valid, otherwise false. + The name of the file. + Not used. + + + Creates a project. + The name of the project file. + The path of the project file. + The name of the project. + Values from . + The interface ID of the project. + [out] Returns a pointer to the project. + [out] Returns true if the operation was canceled, otherwise false. + + + Disposes the service provider. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Initializes the project factory. + + + + + + + + + Creates an instance of the project. + If the method succeeds, it returns . If it fails, it returns an error code. + The outermost project, or null if the outer project is being created. + + + Gets the set of project type GUIDs from the project file. + When implemented by a derived class, a semicolon-delimited string containing the project type GUIDs in the project file. + The project file. + + + Gets the project's service provider. + + . + + + Establishes a locally-registered COM object relative to the local Visual Studio registry hive. + + + Creates an instance of a class listed in the local registry. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] Class identifier (CLSID) of the requested object. This is the CLSID associated with the data and code that is used to create the object. + [in] Pointer to the IUnknown interface of the newly created object. A value of null indicates that the object is not being created as part of an aggregate. If non-null, this is a pointer to the aggregate object's IUnknown. + [in] Interface to be used to communicate with the object. For example, IID_IClassFactory. + [in] Flags controlling the instance creation from the enumeration. Specifies a value of . + [out] Address of pointer variable that receives the interface pointer requested in . Upon successful return, contains the requested interface pointer. Upon failure, contains null. + + + Returns the class object associated with a CLSID. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] Class identifier (CLSID) of the requested object. This is the CLSID associated with the data and code that is used to create the object. + [in] Flags controlling the instance creation from the enumeration. Specifies a value of . + [in] Reserved. + [in] Interface to be used to communicate with the object. For example, IID_IClassFactory. + [in] Address of pointer variable that receives the interface pointer requested in . Upon successful return, contains the requested interface pointer. Upon failure, contains null. + + + Not implemented. Do not use. + Do not use. + Do not use. + + + Implemented by a project that supports adding project subtypes through aggregation. + + + Gets the list of project type GUIDs that make up the aggregate project. This method should be delegated to the innermost project within the system of aggregated project subtypes. + If the method succeeds, it returns . If it fails, it returns an error code. + Pointer to a string containing the project type GUIDs. + + + Called by the owner, the outer project subtype, to have the owned project, the inner project subtype, to do its initialization work. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] Project file name of the project to be initialized. + [out] Location of the initialized project file. + [in] Pointer to a null-terminated string containing the name. + [in] Controls how a project is created or opened. Values are taken from the enumeration. + [in] Identifier of the interface of the returned . + [out, iid_is(iidProject)] Pointer to the interface specified by . + [out] Pointer to a flag where true indicates canceled. + + + Indicates that aggregation is complete. + If the method succeeds, it returns . If it fails, it returns an error code. + + + This method updates the list of GUIDs that are persisted in the project file of the base project. + If the method succeeds, it returns . If it fails, it returns an error code. + String containing the project type GUIDs. + + + This method is used to pass in the pointer to the inner IUnknown of the project subtype that is being aggregated. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] Pointer to the IUnknown of the inner project subtype. + + + Creates a project type that supports aggregation. + + + Returns a string containing a list of project type GUIDs to aggregate to create an instance of this project. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] The name of the project file containing the list of project type GUIDs. + [out] Pointer to a string containing a semi-colon delimited list of the project type GUIDs, ordered from outer to the inner project subtype. + + + Called by the owner or outer project subtype so that the owned or inner project subtype can create a version of itself that can be aggregated. + If the method succeeds, it returns . If it fails, it returns an error code. + [in] Pointer to the outer IUnknown interface. + [out] Pointer to the inner or owned project subtype IUnknown interface. + + + + + + Contains event data for events relating to files and folders of the project subtype, for example the event. + + + Initializes a new instance of . + + + Gets or sets the unique name of the project item that was changed. + The unique name of the project item that was changed. + + + Represents the settings stored inside Visual Studio. + + + The service provider that is needed to get , which provides settings-related functionality. + + + Gets the folder that Visual Studio uses for storing various cache, backup, template, etc. files + The full path of the requested folder. + The requested folder. + + + Gets the scopes that contain the given collection. + The path of the collection to be searched. + + + Gets the list of folders that Visual Studio uses for installing/discovering machine-wide extensions. + The list of extension root paths. + + + Gets the scopes that contain the given property. + The enclosing scopes. + The path of the collection of the property. + The name of the property to be searched. + + + Gets the class for the requested scope that can be used for read-only operations. + A object that can be used for accessing the scope. + The requested scope. + + + Gets the object for the requested scope which can be used both for reading and writing. + A object that can be used for accessing the scope. + The requested scope. + The given scope is not writable. + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate index ecd6c5db..a081a2cd 100644 --- a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate @@ -44,7 +44,7 @@ + repositoryId="TrackableEntities.VS2013..ce1f4a31-3d64-4a4a-a8d4-f84a44a753e7"> diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/CSharpDbContext.Context.tt b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/CSharpDbContext.Context.tt new file mode 100644 index 00000000..d62c4a95 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/CSharpDbContext.Context.tt @@ -0,0 +1,636 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF6.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +const string inputFile = @"$edmxInputFile$"; +var textTransform = DynamicTextTransformation.Create(this); +var code = new CodeGenerationTools(this); +var ef = new MetadataTools(this); +var typeMapper = new TypeMapper(code, ef, textTransform.Errors); +var loader = new EdmMetadataLoader(textTransform.Host, textTransform.Errors); +var itemCollection = loader.CreateEdmItemCollection(inputFile); +var modelNamespace = loader.GetModelNamespace(inputFile); +var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); + +var container = itemCollection.OfType().FirstOrDefault(); +if (container == null) +{ + return string.Empty; +} +#> +//------------------------------------------------------------------------------ +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ + +<# + +var codeNamespace = code.VsNamespaceSuggestion(); +if (!String.IsNullOrEmpty(codeNamespace)) +{ +#> +namespace <#=code.EscapeNamespace(codeNamespace)#> +{ +<# + PushIndent(" "); +} + +#> +using System; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +<# +if (container.FunctionImports.Any()) +{ +#> +using System.Data.Entity.Core.Objects; +using System.Linq; +<# +} +#> + +<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext +{ + public <#=code.Escape(container)#>() + : base("name=<#=container.Name#>") + { +<# +if (!loader.IsLazyLoadingEnabled(container)) +{ +#> + this.Configuration.LazyLoadingEnabled = false; +<# +} + +foreach (var entitySet in container.BaseEntitySets.OfType()) +{ + // Note: the DbSet members are defined below such that the getter and + // setter always have the same accessibility as the DbSet definition + if (Accessibility.ForReadOnlyProperty(entitySet) != "public") + { +#> + <#=codeStringGenerator.DbSetInitializer(entitySet)#> +<# + } +} +#> + } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + throw new UnintentionalCodeFirstException(); + } + +<# + foreach (var entitySet in container.BaseEntitySets.OfType()) + { +#> + <#=codeStringGenerator.DbSet(entitySet)#> +<# + } + + foreach (var edmFunction in container.FunctionImports) + { + WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: false); + } +#> +} +<# + +if (!String.IsNullOrEmpty(codeNamespace)) +{ + PopIndent(); +#> +} +<# +} +#> +<#+ + +private void WriteFunctionImport(TypeMapper typeMapper, CodeStringGenerator codeStringGenerator, EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) +{ + if (typeMapper.IsComposable(edmFunction)) + { +#> + + [DbFunction("<#=edmFunction.NamespaceName#>", "<#=edmFunction.Name#>")] + <#=codeStringGenerator.ComposableFunctionMethod(edmFunction, modelNamespace)#> + { +<#+ + codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter); +#> + <#=codeStringGenerator.ComposableCreateQuery(edmFunction, modelNamespace)#> + } +<#+ + } + else + { +#> + + <#=codeStringGenerator.FunctionMethod(edmFunction, modelNamespace, includeMergeOption)#> + { +<#+ + codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter); +#> + <#=codeStringGenerator.ExecuteFunction(edmFunction, modelNamespace, includeMergeOption)#> + } +<#+ + if (typeMapper.GenerateMergeOptionFunction(edmFunction, includeMergeOption)) + { + WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: true); + } + } +} + +public void WriteFunctionParameter(string name, string isNotNull, string notNullInit, string nullInit) +{ +#> + var <#=name#> = <#=isNotNull#> ? + <#=notNullInit#> : + <#=nullInit#>; + +<#+ +} + +public const string TemplateId = "CSharp_DbContext_Context_EF6"; + +public class CodeStringGenerator +{ + private readonly CodeGenerationTools _code; + private readonly TypeMapper _typeMapper; + private readonly MetadataTools _ef; + + public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(typeMapper, "typeMapper"); + ArgumentNotNull(ef, "ef"); + + _code = code; + _typeMapper = typeMapper; + _ef = ef; + } + + public string Property(EdmProperty edmProperty) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + Accessibility.ForProperty(edmProperty), + _typeMapper.GetTypeName(edmProperty.TypeUsage), + _code.Escape(edmProperty), + _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); + } + + public string NavigationProperty(NavigationProperty navProp) + { + var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), + navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + _code.Escape(navProp), + _code.SpaceAfter(Accessibility.ForGetter(navProp)), + _code.SpaceAfter(Accessibility.ForSetter(navProp))); + } + + public string AccessibilityAndVirtual(string accessibility) + { + return accessibility + (accessibility != "private" ? " virtual" : ""); + } + + public string EntityClassOpening(EntityType entity) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1}partial class {2}{3}", + Accessibility.ForType(entity), + _code.SpaceAfter(_code.AbstractOption(entity)), + _code.Escape(entity), + _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); + } + + public string EnumOpening(SimpleType enumType) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} enum {1} : {2}", + Accessibility.ForType(enumType), + _code.Escape(enumType), + _code.Escape(_typeMapper.UnderlyingClrType(enumType))); + } + + public void WriteFunctionParameters(EdmFunction edmFunction, Action writeParameter) + { + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))"; + writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit); + } + } + + public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "{0} IQueryable<{1}> {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + _code.Escape(edmFunction), + string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray())); + } + + public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});", + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + edmFunction.NamespaceName, + edmFunction.Name, + string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()), + _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))); + } + + public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()); + if (includeMergeOption) + { + paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } + + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + _code.Escape(edmFunction), + paramList); + } + + public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});", + returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + edmFunction.Name, + callParams); + } + + public string DbSet(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} virtual DbSet<{1}> {2} {{ get; set; }}", + Accessibility.ForReadOnlyProperty(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType), + _code.Escape(entitySet)); + } + + public string DbSetInitializer(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} = Set<{1}>();", + _code.Escape(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType)); + } + + public string UsingDirectives(bool inHeader, bool includeCollections = true) + { + return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) + ? string.Format( + CultureInfo.InvariantCulture, + "{0}using System;{1}" + + "{2}", + inHeader ? Environment.NewLine : "", + includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", + inHeader ? "" : Environment.NewLine) + : ""; + } +} + +public class TypeMapper +{ + private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName"; + + private readonly System.Collections.IList _errors; + private readonly CodeGenerationTools _code; + private readonly MetadataTools _ef; + + public static string FixNamespaces(string typeName) + { + return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial."); + } + + public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(ef, "ef"); + ArgumentNotNull(errors, "errors"); + + _code = code; + _ef = ef; + _errors = errors; + } + + public string GetTypeName(TypeUsage typeUsage) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null); + } + + public string GetTypeName(EdmType edmType) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: null); + } + + public string GetTypeName(TypeUsage typeUsage, string modelNamespace) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace); + } + + public string GetTypeName(EdmType edmType, string modelNamespace) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace); + } + + public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace) + { + if (edmType == null) + { + return null; + } + + var collectionType = edmType as CollectionType; + if (collectionType != null) + { + return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace)); + } + + var typeName = _code.Escape(edmType.MetadataProperties + .Where(p => p.Name == ExternalTypeNameAttributeName) + .Select(p => (string)p.Value) + .FirstOrDefault()) + ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ? + _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) : + _code.Escape(edmType)); + + if (edmType is StructuralType) + { + return typeName; + } + + if (edmType is SimpleType) + { + var clrType = UnderlyingClrType(edmType); + if (!IsEnumType(edmType)) + { + typeName = _code.Escape(clrType); + } + + typeName = FixNamespaces(typeName); + + return clrType.IsValueType && isNullable == true ? + String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) : + typeName; + } + + throw new ArgumentException("edmType"); + } + + public Type UnderlyingClrType(EdmType edmType) + { + ArgumentNotNull(edmType, "edmType"); + + var primitiveType = edmType as PrimitiveType; + if (primitiveType != null) + { + return primitiveType.ClrEquivalentType; + } + + if (IsEnumType(edmType)) + { + return GetEnumUnderlyingType(edmType).ClrEquivalentType; + } + + return typeof(object); + } + + public object GetEnumMemberValue(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var valueProperty = enumMember.GetType().GetProperty("Value"); + return valueProperty == null ? null : valueProperty.GetValue(enumMember, null); + } + + public string GetEnumMemberName(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var nameProperty = enumMember.GetType().GetProperty("Name"); + return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null); + } + + public System.Collections.IEnumerable GetEnumMembers(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var membersProperty = enumType.GetType().GetProperty("Members"); + return membersProperty != null + ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null) + : Enumerable.Empty(); + } + + public bool EnumIsFlags(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var isFlagsProperty = enumType.GetType().GetProperty("IsFlags"); + return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null); + } + + public bool IsEnumType(GlobalItem edmType) + { + ArgumentNotNull(edmType, "edmType"); + + return edmType.GetType().Name == "EnumType"; + } + + public PrimitiveType GetEnumUnderlyingType(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null); + } + + public string CreateLiteral(object value) + { + if (value == null || value.GetType() != typeof(TimeSpan)) + { + return _code.CreateLiteral(value); + } + + return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks); + } + + public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable types, string sourceFile) + { + ArgumentNotNull(types, "types"); + ArgumentNotNull(sourceFile, "sourceFile"); + + var hash = new HashSet(StringComparer.InvariantCultureIgnoreCase); + if (types.Any(item => !hash.Add(item))) + { + _errors.Add( + new CompilerError(sourceFile, -1, -1, "6023", + String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict")))); + return false; + } + return true; + } + + public IEnumerable GetEnumItemsToGenerate(IEnumerable itemCollection) + { + return GetItemsToGenerate(itemCollection) + .Where(e => IsEnumType(e)); + } + + public IEnumerable GetItemsToGenerate(IEnumerable itemCollection) where T: EdmType + { + return itemCollection + .OfType() + .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName)) + .OrderBy(i => i.Name); + } + + public IEnumerable GetAllGlobalItems(IEnumerable itemCollection) + { + return itemCollection + .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i)) + .Select(g => GetGlobalItemName(g)); + } + + public string GetGlobalItemName(GlobalItem item) + { + if (item is EdmType) + { + return ((EdmType)item).Name; + } + else + { + return ((EntityContainer)item).Name; + } + } + + public IEnumerable GetSimpleProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetSimpleProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetPropertiesWithDefaultValues(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetPropertiesWithDefaultValues(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type); + } + + public IEnumerable GetCollectionNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + } + + public FunctionParameter GetReturnParameter(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters"); + return returnParamsProperty == null + ? edmFunction.ReturnParameter + : ((IEnumerable)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault(); + } + + public bool IsComposable(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute"); + return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null); + } + + public IEnumerable GetParameters(EdmFunction edmFunction) + { + return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + } + + public TypeUsage GetReturnType(EdmFunction edmFunction) + { + var returnParam = GetReturnParameter(edmFunction); + return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage); + } + + public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption) + { + var returnType = GetReturnType(edmFunction); + return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType; + } +} + +public static void ArgumentNotNull(T arg, string name) where T : class +{ + if (arg == null) + { + throw new ArgumentNullException(name); + } +} +#> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/CSharpDbContext.Types.tt b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/CSharpDbContext.Types.tt new file mode 100644 index 00000000..e82706ce --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/CSharpDbContext.Types.tt @@ -0,0 +1,803 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF6.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +const string inputFile = @"$edmxInputFile$"; +var textTransform = DynamicTextTransformation.Create(this); +var code = new CodeGenerationTools(this); +var ef = new MetadataTools(this); +var typeMapper = new TypeMapper(code, ef, textTransform.Errors); +var fileManager = EntityFrameworkTemplateFileManager.Create(this); +var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); +var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); + +if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile)) +{ + return string.Empty; +} + +WriteHeader(codeStringGenerator, fileManager); + +foreach (var entity in typeMapper.GetItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(entity.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false)#> +<#=codeStringGenerator.EntityClassOpening(entity)#> +{ +<# + var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity); + var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity); + var complexProperties = typeMapper.GetComplexProperties(entity); + + if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(entity)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var navProperty in collectionNavigationProperties) + { +#> + this.<#=code.Escape(navProperty)#> = new ChangeTrackingCollection<<#=typeMapper.GetTypeName(navProperty.ToEndMember.GetEntityType())#>>(); +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>(); +<# + } +#> + } +<# + } + + var simpleProperties = typeMapper.GetSimpleProperties(entity); + if (simpleProperties.Any()) + { + foreach (var edmProperty in simpleProperties) + { +#> + + <#=Accessibility.ForProperty(edmProperty)#> <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> + { + get { return _<#=code.Escape(edmProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(edmProperty)#>)) return; + _<#=code.Escape(edmProperty)#> = value; + NotifyPropertyChanged(() => <#=code.Escape(edmProperty)#>); + } + } + private <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> _<#=code.Escape(edmProperty)#>; +<# + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var complexProperty in complexProperties) + { +#> + + <#=Accessibility.ForProperty(complexProperty)#> <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#> <#=code.Escape(complexProperty)#> + { + get { return _<#=code.Escape(complexProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(complexProperty)#>)) return; + _<#=code.Escape(complexProperty)#> = value; + NotifyPropertyChanged(() => <#=code.Escape(complexProperty)#>); + } + } + private <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#> _<#=code.Escape(complexProperty)#>; +<# + } + } + + var navigationProperties = typeMapper.GetNavigationProperties(entity); + if (navigationProperties.Any()) + { + foreach (var navProperty in navigationProperties) + { + var endType = typeMapper.GetTypeName(navProperty.ToEndMember.GetEntityType()); + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + + <#=Accessibility.ForProperty(navProperty)#> <#="ChangeTrackingCollection<" + endType + ">"#> <#=code.Escape(navProperty)#> + { + get { return _<#=code.Escape(navProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(navProperty)#>)) return; + _<#=code.Escape(navProperty)#> = value; + NotifyPropertyChanged(() => <#=code.Escape(navProperty)#>); + } + } + private <#="ChangeTrackingCollection<" + endType + ">"#> _<#=code.Escape(navProperty)#>; +<# + } + else + { +#> + + <#=Accessibility.ForProperty(navProperty)#> <#=endType#> <#=code.Escape(navProperty)#> + { + get { return _<#=code.Escape(navProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(navProperty)#>)) return; + _<#=code.Escape(navProperty)#> = value; + <#=code.Escape(navProperty)#>ChangeTracker = _<#=code.Escape(navProperty)#> == null ? null + : new ChangeTrackingCollection<<#=endType#>> { _<#=code.Escape(navProperty)#> }; + NotifyPropertyChanged(() => <#=code.Escape(navProperty)#>); + } + } + private <#=endType#> _<#=code.Escape(navProperty)#>; + private ChangeTrackingCollection<<#=endType#>> <#=code.Escape(navProperty)#>ChangeTracker { get; set; } +<# + } + } + } +#> +} +<# + EndNamespace(code); +} + +foreach (var complex in typeMapper.GetItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(complex.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: true)#> +<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> : EntityBase +{ +<# + var complexProperties = typeMapper.GetComplexProperties(complex); + var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex); + + if (propertiesWithDefaultValues.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(complex)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>(); +<# + } +#> + } + +<# + } + + var simpleProperties = typeMapper.GetSimpleProperties(complex); + if (simpleProperties.Any()) + { + foreach(var edmProperty in simpleProperties) + { +#> + + <#=Accessibility.ForProperty(edmProperty)#> <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> + { + get { return _<#=code.Escape(edmProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(edmProperty)#>)) return; + _<#=code.Escape(edmProperty)#> = value; + NotifyPropertyChanged(() => <#=code.Escape(edmProperty)#>); + } + } + private <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> _<#=code.Escape(edmProperty)#>; +<# + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var edmProperty in complexProperties) + { +#> + <#=Accessibility.ForProperty(edmProperty)#> <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> + { + get { return _<#=code.Escape(edmProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(edmProperty)#>)) return; + _<#=code.Escape(edmProperty)#> = value; + NotifyPropertyChanged(() => <#=code.Escape(edmProperty)#>); + } + } + private <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> _<#=code.Escape(edmProperty)#>; +<# + } + } +#> +} +<# + EndNamespace(code); +} + +foreach (var enumType in typeMapper.GetEnumItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(enumType.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#> +<# + if (typeMapper.EnumIsFlags(enumType)) + { +#> +[Flags] +<# + } +#> +<#=codeStringGenerator.EnumOpening(enumType)#> +{ +<# + var foundOne = false; + + foreach (MetadataItem member in typeMapper.GetEnumMembers(enumType)) + { + foundOne = true; +#> + <#=code.Escape(typeMapper.GetEnumMemberName(member))#> = <#=typeMapper.GetEnumMemberValue(member)#>, +<# + } + + if (foundOne) + { + this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1); + } +#> +} +<# + EndNamespace(code); + +} + +fileManager.Process(); + +#> +<#+ + +public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager) +{ + fileManager.StartHeader(); +#> +//------------------------------------------------------------------------------ +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ +<#=codeStringGenerator.UsingDirectives(inHeader: true)#> +<#+ + fileManager.EndBlock(); +} + +public void BeginNamespace(CodeGenerationTools code) +{ + var codeNamespace = code.VsNamespaceSuggestion(); + if (!String.IsNullOrEmpty(codeNamespace)) + { +#> +namespace <#=code.EscapeNamespace(codeNamespace)#> +{ +<#+ + PushIndent(" "); + } +} + +public void EndNamespace(CodeGenerationTools code) +{ + if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion())) + { + PopIndent(); +#> +} +<#+ + } +} + +public const string TemplateId = "CSharp_DbContext_Types_EF6"; + +public class CodeStringGenerator +{ + private readonly CodeGenerationTools _code; + private readonly TypeMapper _typeMapper; + private readonly MetadataTools _ef; + + public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(typeMapper, "typeMapper"); + ArgumentNotNull(ef, "ef"); + + _code = code; + _typeMapper = typeMapper; + _ef = ef; + } + + public string Property(EdmProperty edmProperty) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + Accessibility.ForProperty(edmProperty), + _typeMapper.GetTypeName(edmProperty.TypeUsage), + _code.Escape(edmProperty), + _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); + } + + public string NavigationProperty(NavigationProperty navProp) + { + var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), + navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + _code.Escape(navProp), + _code.SpaceAfter(Accessibility.ForGetter(navProp)), + _code.SpaceAfter(Accessibility.ForSetter(navProp))); + } + + public string AccessibilityAndVirtual(string accessibility) + { + return accessibility + (accessibility != "private" ? " virtual" : ""); + } + + public string EntityClassOpening(EntityType entity) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1}partial class {2}{3} : EntityBase", + Accessibility.ForType(entity), + _code.SpaceAfter(_code.AbstractOption(entity)), + _code.Escape(entity), + _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); + } + + public string EnumOpening(SimpleType enumType) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} enum {1} : {2}", + Accessibility.ForType(enumType), + _code.Escape(enumType), + _code.Escape(_typeMapper.UnderlyingClrType(enumType))); + } + + public void WriteFunctionParameters(EdmFunction edmFunction, Action writeParameter) + { + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))"; + writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit); + } + } + + public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "{0} IQueryable<{1}> {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + _code.Escape(edmFunction), + string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray())); + } + + public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});", + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + edmFunction.NamespaceName, + edmFunction.Name, + string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()), + _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))); + } + + public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()); + if (includeMergeOption) + { + paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } + + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + _code.Escape(edmFunction), + paramList); + } + + public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});", + returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + edmFunction.Name, + callParams); + } + + public string DbSet(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} virtual DbSet<{1}> {2} {{ get; set; }}", + Accessibility.ForReadOnlyProperty(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType), + _code.Escape(entitySet)); + } + + public string UsingDirectives(bool inHeader, bool includeCollections = true) + { + return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) + ? string.Format( + CultureInfo.InvariantCulture, + "{0}using System;{1}" + + "{2}" + + "{3}", + inHeader ? Environment.NewLine : "", + includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", + Environment.NewLine + "using TrackableEntities.Client;", + inHeader ? "" : Environment.NewLine) + : ""; + } +} + +public class TypeMapper +{ + private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName"; + + private readonly System.Collections.IList _errors; + private readonly CodeGenerationTools _code; + private readonly MetadataTools _ef; + + public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(ef, "ef"); + ArgumentNotNull(errors, "errors"); + + _code = code; + _ef = ef; + _errors = errors; + } + + public static string FixNamespaces(string typeName) + { + return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial."); + } + + public string GetTypeName(TypeUsage typeUsage) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null); + } + + public string GetTypeName(EdmType edmType) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: null); + } + + public string GetTypeName(TypeUsage typeUsage, string modelNamespace) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace); + } + + public string GetTypeName(EdmType edmType, string modelNamespace) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace); + } + + public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace) + { + if (edmType == null) + { + return null; + } + + var collectionType = edmType as CollectionType; + if (collectionType != null) + { + return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace)); + } + + var typeName = _code.Escape(edmType.MetadataProperties + .Where(p => p.Name == ExternalTypeNameAttributeName) + .Select(p => (string)p.Value) + .FirstOrDefault()) + ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ? + _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) : + _code.Escape(edmType)); + + if (edmType is StructuralType) + { + return typeName; + } + + if (edmType is SimpleType) + { + var clrType = UnderlyingClrType(edmType); + if (!IsEnumType(edmType)) + { + typeName = _code.Escape(clrType); + } + + typeName = FixNamespaces(typeName); + + return clrType.IsValueType && isNullable == true ? + String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) : + typeName; + } + + throw new ArgumentException("edmType"); + } + + public Type UnderlyingClrType(EdmType edmType) + { + ArgumentNotNull(edmType, "edmType"); + + var primitiveType = edmType as PrimitiveType; + if (primitiveType != null) + { + return primitiveType.ClrEquivalentType; + } + + if (IsEnumType(edmType)) + { + return GetEnumUnderlyingType(edmType).ClrEquivalentType; + } + + return typeof(object); + } + + public object GetEnumMemberValue(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var valueProperty = enumMember.GetType().GetProperty("Value"); + return valueProperty == null ? null : valueProperty.GetValue(enumMember, null); + } + + public string GetEnumMemberName(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var nameProperty = enumMember.GetType().GetProperty("Name"); + return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null); + } + + public System.Collections.IEnumerable GetEnumMembers(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var membersProperty = enumType.GetType().GetProperty("Members"); + return membersProperty != null + ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null) + : Enumerable.Empty(); + } + + public bool EnumIsFlags(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var isFlagsProperty = enumType.GetType().GetProperty("IsFlags"); + return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null); + } + + public bool IsEnumType(GlobalItem edmType) + { + ArgumentNotNull(edmType, "edmType"); + + return edmType.GetType().Name == "EnumType"; + } + + public PrimitiveType GetEnumUnderlyingType(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null); + } + + public string CreateLiteral(object value) + { + if (value == null || value.GetType() != typeof(TimeSpan)) + { + return _code.CreateLiteral(value); + } + + return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks); + } + + public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable types, string sourceFile) + { + ArgumentNotNull(types, "types"); + ArgumentNotNull(sourceFile, "sourceFile"); + + var hash = new HashSet(StringComparer.InvariantCultureIgnoreCase); + if (types.Any(item => !hash.Add(item))) + { + _errors.Add( + new CompilerError(sourceFile, -1, -1, "6023", + String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict")))); + return false; + } + return true; + } + + public IEnumerable GetEnumItemsToGenerate(IEnumerable itemCollection) + { + return GetItemsToGenerate(itemCollection) + .Where(e => IsEnumType(e)); + } + + public IEnumerable GetItemsToGenerate(IEnumerable itemCollection) where T: EdmType + { + return itemCollection + .OfType() + .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName)) + .OrderBy(i => i.Name); + } + + public IEnumerable GetAllGlobalItems(IEnumerable itemCollection) + { + return itemCollection + .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i)) + .Select(g => GetGlobalItemName(g)); + } + + public string GetGlobalItemName(GlobalItem item) + { + if (item is EdmType) + { + return ((EdmType)item).Name; + } + else + { + return ((EntityContainer)item).Name; + } + } + + public IEnumerable GetSimpleProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetSimpleProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetPropertiesWithDefaultValues(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetPropertiesWithDefaultValues(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type); + } + + public IEnumerable GetCollectionNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + } + + public FunctionParameter GetReturnParameter(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters"); + return returnParamsProperty == null + ? edmFunction.ReturnParameter + : ((IEnumerable)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault(); + } + + public bool IsComposable(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute"); + return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null); + } + + public IEnumerable GetParameters(EdmFunction edmFunction) + { + return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + } + + public TypeUsage GetReturnType(EdmFunction edmFunction) + { + var returnParam = GetReturnParameter(edmFunction); + return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage); + } + + public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption) + { + var returnType = GetReturnType(edmFunction); + return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType; + } +} + +public static void ArgumentNotNull(T arg, string name) where T : class +{ + if (arg == null) + { + throw new ArgumentNullException(name); + } +} +#> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Client/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/ADONETArtifactGenerator_TrackableEntities.Service.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/ADONETArtifactGenerator_TrackableEntities.Service.vstemplate index 84ec5dba..2edbd948 100644 --- a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/ADONETArtifactGenerator_TrackableEntities.Service.vstemplate +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/ADONETArtifactGenerator_TrackableEntities.Service.vstemplate @@ -41,8 +41,8 @@ - + repositoryId="TrackableEntities.VS2013..ce1f4a31-3d64-4a4a-a8d4-f84a44a753e7"> + diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/CSharpDbContext.Context.tt b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/CSharpDbContext.Context.tt new file mode 100644 index 00000000..d62c4a95 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/CSharpDbContext.Context.tt @@ -0,0 +1,636 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF6.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +const string inputFile = @"$edmxInputFile$"; +var textTransform = DynamicTextTransformation.Create(this); +var code = new CodeGenerationTools(this); +var ef = new MetadataTools(this); +var typeMapper = new TypeMapper(code, ef, textTransform.Errors); +var loader = new EdmMetadataLoader(textTransform.Host, textTransform.Errors); +var itemCollection = loader.CreateEdmItemCollection(inputFile); +var modelNamespace = loader.GetModelNamespace(inputFile); +var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); + +var container = itemCollection.OfType().FirstOrDefault(); +if (container == null) +{ + return string.Empty; +} +#> +//------------------------------------------------------------------------------ +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ + +<# + +var codeNamespace = code.VsNamespaceSuggestion(); +if (!String.IsNullOrEmpty(codeNamespace)) +{ +#> +namespace <#=code.EscapeNamespace(codeNamespace)#> +{ +<# + PushIndent(" "); +} + +#> +using System; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +<# +if (container.FunctionImports.Any()) +{ +#> +using System.Data.Entity.Core.Objects; +using System.Linq; +<# +} +#> + +<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext +{ + public <#=code.Escape(container)#>() + : base("name=<#=container.Name#>") + { +<# +if (!loader.IsLazyLoadingEnabled(container)) +{ +#> + this.Configuration.LazyLoadingEnabled = false; +<# +} + +foreach (var entitySet in container.BaseEntitySets.OfType()) +{ + // Note: the DbSet members are defined below such that the getter and + // setter always have the same accessibility as the DbSet definition + if (Accessibility.ForReadOnlyProperty(entitySet) != "public") + { +#> + <#=codeStringGenerator.DbSetInitializer(entitySet)#> +<# + } +} +#> + } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + throw new UnintentionalCodeFirstException(); + } + +<# + foreach (var entitySet in container.BaseEntitySets.OfType()) + { +#> + <#=codeStringGenerator.DbSet(entitySet)#> +<# + } + + foreach (var edmFunction in container.FunctionImports) + { + WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: false); + } +#> +} +<# + +if (!String.IsNullOrEmpty(codeNamespace)) +{ + PopIndent(); +#> +} +<# +} +#> +<#+ + +private void WriteFunctionImport(TypeMapper typeMapper, CodeStringGenerator codeStringGenerator, EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) +{ + if (typeMapper.IsComposable(edmFunction)) + { +#> + + [DbFunction("<#=edmFunction.NamespaceName#>", "<#=edmFunction.Name#>")] + <#=codeStringGenerator.ComposableFunctionMethod(edmFunction, modelNamespace)#> + { +<#+ + codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter); +#> + <#=codeStringGenerator.ComposableCreateQuery(edmFunction, modelNamespace)#> + } +<#+ + } + else + { +#> + + <#=codeStringGenerator.FunctionMethod(edmFunction, modelNamespace, includeMergeOption)#> + { +<#+ + codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter); +#> + <#=codeStringGenerator.ExecuteFunction(edmFunction, modelNamespace, includeMergeOption)#> + } +<#+ + if (typeMapper.GenerateMergeOptionFunction(edmFunction, includeMergeOption)) + { + WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: true); + } + } +} + +public void WriteFunctionParameter(string name, string isNotNull, string notNullInit, string nullInit) +{ +#> + var <#=name#> = <#=isNotNull#> ? + <#=notNullInit#> : + <#=nullInit#>; + +<#+ +} + +public const string TemplateId = "CSharp_DbContext_Context_EF6"; + +public class CodeStringGenerator +{ + private readonly CodeGenerationTools _code; + private readonly TypeMapper _typeMapper; + private readonly MetadataTools _ef; + + public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(typeMapper, "typeMapper"); + ArgumentNotNull(ef, "ef"); + + _code = code; + _typeMapper = typeMapper; + _ef = ef; + } + + public string Property(EdmProperty edmProperty) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + Accessibility.ForProperty(edmProperty), + _typeMapper.GetTypeName(edmProperty.TypeUsage), + _code.Escape(edmProperty), + _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); + } + + public string NavigationProperty(NavigationProperty navProp) + { + var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), + navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + _code.Escape(navProp), + _code.SpaceAfter(Accessibility.ForGetter(navProp)), + _code.SpaceAfter(Accessibility.ForSetter(navProp))); + } + + public string AccessibilityAndVirtual(string accessibility) + { + return accessibility + (accessibility != "private" ? " virtual" : ""); + } + + public string EntityClassOpening(EntityType entity) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1}partial class {2}{3}", + Accessibility.ForType(entity), + _code.SpaceAfter(_code.AbstractOption(entity)), + _code.Escape(entity), + _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); + } + + public string EnumOpening(SimpleType enumType) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} enum {1} : {2}", + Accessibility.ForType(enumType), + _code.Escape(enumType), + _code.Escape(_typeMapper.UnderlyingClrType(enumType))); + } + + public void WriteFunctionParameters(EdmFunction edmFunction, Action writeParameter) + { + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))"; + writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit); + } + } + + public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "{0} IQueryable<{1}> {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + _code.Escape(edmFunction), + string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray())); + } + + public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});", + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + edmFunction.NamespaceName, + edmFunction.Name, + string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()), + _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))); + } + + public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()); + if (includeMergeOption) + { + paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } + + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + _code.Escape(edmFunction), + paramList); + } + + public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});", + returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + edmFunction.Name, + callParams); + } + + public string DbSet(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} virtual DbSet<{1}> {2} {{ get; set; }}", + Accessibility.ForReadOnlyProperty(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType), + _code.Escape(entitySet)); + } + + public string DbSetInitializer(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} = Set<{1}>();", + _code.Escape(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType)); + } + + public string UsingDirectives(bool inHeader, bool includeCollections = true) + { + return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) + ? string.Format( + CultureInfo.InvariantCulture, + "{0}using System;{1}" + + "{2}", + inHeader ? Environment.NewLine : "", + includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", + inHeader ? "" : Environment.NewLine) + : ""; + } +} + +public class TypeMapper +{ + private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName"; + + private readonly System.Collections.IList _errors; + private readonly CodeGenerationTools _code; + private readonly MetadataTools _ef; + + public static string FixNamespaces(string typeName) + { + return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial."); + } + + public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(ef, "ef"); + ArgumentNotNull(errors, "errors"); + + _code = code; + _ef = ef; + _errors = errors; + } + + public string GetTypeName(TypeUsage typeUsage) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null); + } + + public string GetTypeName(EdmType edmType) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: null); + } + + public string GetTypeName(TypeUsage typeUsage, string modelNamespace) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace); + } + + public string GetTypeName(EdmType edmType, string modelNamespace) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace); + } + + public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace) + { + if (edmType == null) + { + return null; + } + + var collectionType = edmType as CollectionType; + if (collectionType != null) + { + return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace)); + } + + var typeName = _code.Escape(edmType.MetadataProperties + .Where(p => p.Name == ExternalTypeNameAttributeName) + .Select(p => (string)p.Value) + .FirstOrDefault()) + ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ? + _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) : + _code.Escape(edmType)); + + if (edmType is StructuralType) + { + return typeName; + } + + if (edmType is SimpleType) + { + var clrType = UnderlyingClrType(edmType); + if (!IsEnumType(edmType)) + { + typeName = _code.Escape(clrType); + } + + typeName = FixNamespaces(typeName); + + return clrType.IsValueType && isNullable == true ? + String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) : + typeName; + } + + throw new ArgumentException("edmType"); + } + + public Type UnderlyingClrType(EdmType edmType) + { + ArgumentNotNull(edmType, "edmType"); + + var primitiveType = edmType as PrimitiveType; + if (primitiveType != null) + { + return primitiveType.ClrEquivalentType; + } + + if (IsEnumType(edmType)) + { + return GetEnumUnderlyingType(edmType).ClrEquivalentType; + } + + return typeof(object); + } + + public object GetEnumMemberValue(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var valueProperty = enumMember.GetType().GetProperty("Value"); + return valueProperty == null ? null : valueProperty.GetValue(enumMember, null); + } + + public string GetEnumMemberName(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var nameProperty = enumMember.GetType().GetProperty("Name"); + return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null); + } + + public System.Collections.IEnumerable GetEnumMembers(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var membersProperty = enumType.GetType().GetProperty("Members"); + return membersProperty != null + ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null) + : Enumerable.Empty(); + } + + public bool EnumIsFlags(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var isFlagsProperty = enumType.GetType().GetProperty("IsFlags"); + return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null); + } + + public bool IsEnumType(GlobalItem edmType) + { + ArgumentNotNull(edmType, "edmType"); + + return edmType.GetType().Name == "EnumType"; + } + + public PrimitiveType GetEnumUnderlyingType(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null); + } + + public string CreateLiteral(object value) + { + if (value == null || value.GetType() != typeof(TimeSpan)) + { + return _code.CreateLiteral(value); + } + + return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks); + } + + public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable types, string sourceFile) + { + ArgumentNotNull(types, "types"); + ArgumentNotNull(sourceFile, "sourceFile"); + + var hash = new HashSet(StringComparer.InvariantCultureIgnoreCase); + if (types.Any(item => !hash.Add(item))) + { + _errors.Add( + new CompilerError(sourceFile, -1, -1, "6023", + String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict")))); + return false; + } + return true; + } + + public IEnumerable GetEnumItemsToGenerate(IEnumerable itemCollection) + { + return GetItemsToGenerate(itemCollection) + .Where(e => IsEnumType(e)); + } + + public IEnumerable GetItemsToGenerate(IEnumerable itemCollection) where T: EdmType + { + return itemCollection + .OfType() + .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName)) + .OrderBy(i => i.Name); + } + + public IEnumerable GetAllGlobalItems(IEnumerable itemCollection) + { + return itemCollection + .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i)) + .Select(g => GetGlobalItemName(g)); + } + + public string GetGlobalItemName(GlobalItem item) + { + if (item is EdmType) + { + return ((EdmType)item).Name; + } + else + { + return ((EntityContainer)item).Name; + } + } + + public IEnumerable GetSimpleProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetSimpleProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetPropertiesWithDefaultValues(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetPropertiesWithDefaultValues(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type); + } + + public IEnumerable GetCollectionNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + } + + public FunctionParameter GetReturnParameter(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters"); + return returnParamsProperty == null + ? edmFunction.ReturnParameter + : ((IEnumerable)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault(); + } + + public bool IsComposable(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute"); + return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null); + } + + public IEnumerable GetParameters(EdmFunction edmFunction) + { + return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + } + + public TypeUsage GetReturnType(EdmFunction edmFunction) + { + var returnParam = GetReturnParameter(edmFunction); + return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage); + } + + public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption) + { + var returnType = GetReturnType(edmFunction); + return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType; + } +} + +public static void ArgumentNotNull(T arg, string name) where T : class +{ + if (arg == null) + { + throw new ArgumentNullException(name); + } +} +#> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/CSharpDbContext.Types.tt b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/CSharpDbContext.Types.tt new file mode 100644 index 00000000..15095e02 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/CSharpDbContext.Types.tt @@ -0,0 +1,732 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF6.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +const string inputFile = @"$edmxInputFile$"; +var textTransform = DynamicTextTransformation.Create(this); +var code = new CodeGenerationTools(this); +var ef = new MetadataTools(this); +var typeMapper = new TypeMapper(code, ef, textTransform.Errors); +var fileManager = EntityFrameworkTemplateFileManager.Create(this); +var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); +var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); + +if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile)) +{ + return string.Empty; +} + +WriteHeader(codeStringGenerator, fileManager); + +foreach (var entity in typeMapper.GetItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(entity.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false)#> +<#=codeStringGenerator.EntityClassOpening(entity)#> +{ +<# + var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity); + var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity); + var complexProperties = typeMapper.GetComplexProperties(entity); + + if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(entity)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var navigationProperty in collectionNavigationProperties) + { +#> + this.<#=code.Escape(navigationProperty)#> = new List<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>(); +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>(); +<# + } +#> + } + +<# + } + + var simpleProperties = typeMapper.GetSimpleProperties(entity); + if (simpleProperties.Any()) + { + foreach (var edmProperty in simpleProperties) + { +#> + <#=codeStringGenerator.Property(edmProperty)#> +<# + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var complexProperty in complexProperties) + { +#> + <#=codeStringGenerator.Property(complexProperty)#> +<# + } + } + + var navigationProperties = typeMapper.GetNavigationProperties(entity); + if (navigationProperties.Any()) + { +#> + +<# + foreach (var navigationProperty in navigationProperties) + { +#> + <#=codeStringGenerator.NavigationProperty(navigationProperty)#> +<# + } + } +#> + + public TrackingState TrackingState { get; set; } + public ICollection ModifiedProperties { get; set; } + public Guid EntityIdentifier { get; set; } +} +<# + EndNamespace(code); +} + +foreach (var complex in typeMapper.GetItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(complex.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: true)#> +<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> +{ +<# + var complexProperties = typeMapper.GetComplexProperties(complex); + var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex); + + if (propertiesWithDefaultValues.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(complex)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>(); +<# + } +#> + } + +<# + } + + var simpleProperties = typeMapper.GetSimpleProperties(complex); + if (simpleProperties.Any()) + { + foreach(var edmProperty in simpleProperties) + { +#> + <#=codeStringGenerator.Property(edmProperty)#> +<# + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var edmProperty in complexProperties) + { +#> + <#=codeStringGenerator.Property(edmProperty)#> +<# + } + } +#> +} +<# + EndNamespace(code); +} + +foreach (var enumType in typeMapper.GetEnumItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(enumType.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#> +<# + if (typeMapper.EnumIsFlags(enumType)) + { +#> +[Flags] +<# + } +#> +<#=codeStringGenerator.EnumOpening(enumType)#> +{ +<# + var foundOne = false; + + foreach (MetadataItem member in typeMapper.GetEnumMembers(enumType)) + { + foundOne = true; +#> + <#=code.Escape(typeMapper.GetEnumMemberName(member))#> = <#=typeMapper.GetEnumMemberValue(member)#>, +<# + } + + if (foundOne) + { + this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1); + } +#> +} +<# + EndNamespace(code); +} + +fileManager.Process(); + +#> +<#+ + +public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager) +{ + fileManager.StartHeader(); +#> +//------------------------------------------------------------------------------ +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ +<#=codeStringGenerator.UsingDirectives(inHeader: true)#> +<#+ + fileManager.EndBlock(); +} + +public void BeginNamespace(CodeGenerationTools code) +{ + var codeNamespace = code.VsNamespaceSuggestion(); + if (!String.IsNullOrEmpty(codeNamespace)) + { +#> +namespace <#=code.EscapeNamespace(codeNamespace)#> +{ +<#+ + PushIndent(" "); + } +} + +public void EndNamespace(CodeGenerationTools code) +{ + if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion())) + { + PopIndent(); +#> +} +<#+ + } +} + +public const string TemplateId = "CSharp_DbContext_Types_EF6"; + +public class CodeStringGenerator +{ + private readonly CodeGenerationTools _code; + private readonly TypeMapper _typeMapper; + private readonly MetadataTools _ef; + + public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(typeMapper, "typeMapper"); + ArgumentNotNull(ef, "ef"); + + _code = code; + _typeMapper = typeMapper; + _ef = ef; + } + + public string Property(EdmProperty edmProperty) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + Accessibility.ForProperty(edmProperty), + _typeMapper.GetTypeName(edmProperty.TypeUsage), + _code.Escape(edmProperty), + _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); + } + + public string NavigationProperty(NavigationProperty navProp) + { + var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), + navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + _code.Escape(navProp), + _code.SpaceAfter(Accessibility.ForGetter(navProp)), + _code.SpaceAfter(Accessibility.ForSetter(navProp))); + } + + public string AccessibilityAndVirtual(string accessibility) + { + return accessibility; + } + + public string EntityClassOpening(EntityType entity) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1}partial class {2}{3} : ITrackable, IMergeable", + Accessibility.ForType(entity), + _code.SpaceAfter(_code.AbstractOption(entity)), + _code.Escape(entity), + _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); + } + + public string EnumOpening(SimpleType enumType) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} enum {1} : {2}", + Accessibility.ForType(enumType), + _code.Escape(enumType), + _code.Escape(_typeMapper.UnderlyingClrType(enumType))); + } + + public void WriteFunctionParameters(EdmFunction edmFunction, Action writeParameter) + { + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))"; + writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit); + } + } + + public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "{0} IQueryable<{1}> {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + _code.Escape(edmFunction), + string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray())); + } + + public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});", + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + edmFunction.NamespaceName, + edmFunction.Name, + string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()), + _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))); + } + + public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()); + if (includeMergeOption) + { + paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } + + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + _code.Escape(edmFunction), + paramList); + } + + public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});", + returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + edmFunction.Name, + callParams); + } + + public string DbSet(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} virtual DbSet<{1}> {2} {{ get; set; }}", + Accessibility.ForReadOnlyProperty(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType), + _code.Escape(entitySet)); + } + + public string UsingDirectives(bool inHeader, bool includeCollections = true) + { + return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) + ? string.Format( + CultureInfo.InvariantCulture, + "{0}using System;{1}" + + "{2}" + + "{3}", + inHeader ? Environment.NewLine : "", + includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", + Environment.NewLine + "using TrackableEntities;", + inHeader ? "" : Environment.NewLine) + : ""; + } +} + +public class TypeMapper +{ + private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName"; + + private readonly System.Collections.IList _errors; + private readonly CodeGenerationTools _code; + private readonly MetadataTools _ef; + + public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(ef, "ef"); + ArgumentNotNull(errors, "errors"); + + _code = code; + _ef = ef; + _errors = errors; + } + + public static string FixNamespaces(string typeName) + { + return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial."); + } + + public string GetTypeName(TypeUsage typeUsage) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null); + } + + public string GetTypeName(EdmType edmType) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: null); + } + + public string GetTypeName(TypeUsage typeUsage, string modelNamespace) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace); + } + + public string GetTypeName(EdmType edmType, string modelNamespace) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace); + } + + public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace) + { + if (edmType == null) + { + return null; + } + + var collectionType = edmType as CollectionType; + if (collectionType != null) + { + return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace)); + } + + var typeName = _code.Escape(edmType.MetadataProperties + .Where(p => p.Name == ExternalTypeNameAttributeName) + .Select(p => (string)p.Value) + .FirstOrDefault()) + ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ? + _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) : + _code.Escape(edmType)); + + if (edmType is StructuralType) + { + return typeName; + } + + if (edmType is SimpleType) + { + var clrType = UnderlyingClrType(edmType); + if (!IsEnumType(edmType)) + { + typeName = _code.Escape(clrType); + } + + typeName = FixNamespaces(typeName); + + return clrType.IsValueType && isNullable == true ? + String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) : + typeName; + } + + throw new ArgumentException("edmType"); + } + + public Type UnderlyingClrType(EdmType edmType) + { + ArgumentNotNull(edmType, "edmType"); + + var primitiveType = edmType as PrimitiveType; + if (primitiveType != null) + { + return primitiveType.ClrEquivalentType; + } + + if (IsEnumType(edmType)) + { + return GetEnumUnderlyingType(edmType).ClrEquivalentType; + } + + return typeof(object); + } + + public object GetEnumMemberValue(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var valueProperty = enumMember.GetType().GetProperty("Value"); + return valueProperty == null ? null : valueProperty.GetValue(enumMember, null); + } + + public string GetEnumMemberName(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var nameProperty = enumMember.GetType().GetProperty("Name"); + return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null); + } + + public System.Collections.IEnumerable GetEnumMembers(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var membersProperty = enumType.GetType().GetProperty("Members"); + return membersProperty != null + ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null) + : Enumerable.Empty(); + } + + public bool EnumIsFlags(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var isFlagsProperty = enumType.GetType().GetProperty("IsFlags"); + return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null); + } + + public bool IsEnumType(GlobalItem edmType) + { + ArgumentNotNull(edmType, "edmType"); + + return edmType.GetType().Name == "EnumType"; + } + + public PrimitiveType GetEnumUnderlyingType(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null); + } + + public string CreateLiteral(object value) + { + if (value == null || value.GetType() != typeof(TimeSpan)) + { + return _code.CreateLiteral(value); + } + + return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks); + } + + public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable types, string sourceFile) + { + ArgumentNotNull(types, "types"); + ArgumentNotNull(sourceFile, "sourceFile"); + + var hash = new HashSet(StringComparer.InvariantCultureIgnoreCase); + if (types.Any(item => !hash.Add(item))) + { + _errors.Add( + new CompilerError(sourceFile, -1, -1, "6023", + String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict")))); + return false; + } + return true; + } + + public IEnumerable GetEnumItemsToGenerate(IEnumerable itemCollection) + { + return GetItemsToGenerate(itemCollection) + .Where(e => IsEnumType(e)); + } + + public IEnumerable GetItemsToGenerate(IEnumerable itemCollection) where T: EdmType + { + return itemCollection + .OfType() + .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName)) + .OrderBy(i => i.Name); + } + + public IEnumerable GetAllGlobalItems(IEnumerable itemCollection) + { + return itemCollection + .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i)) + .Select(g => GetGlobalItemName(g)); + } + + public string GetGlobalItemName(GlobalItem item) + { + if (item is EdmType) + { + return ((EdmType)item).Name; + } + else + { + return ((EntityContainer)item).Name; + } + } + + public IEnumerable GetSimpleProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetSimpleProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetPropertiesWithDefaultValues(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetPropertiesWithDefaultValues(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type); + } + + public IEnumerable GetCollectionNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + } + + public FunctionParameter GetReturnParameter(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters"); + return returnParamsProperty == null + ? edmFunction.ReturnParameter + : ((IEnumerable)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault(); + } + + public bool IsComposable(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute"); + return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null); + } + + public IEnumerable GetParameters(EdmFunction edmFunction) + { + return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + } + + public TypeUsage GetReturnType(EdmFunction edmFunction) + { + var returnParam = GetReturnParameter(edmFunction); + return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage); + } + + public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption) + { + var returnType = GetReturnType(edmFunction); + return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType; + } +} + +public static void ArgumentNotNull(T arg, string name) where T : class +{ + if (arg == null) + { + throw new ArgumentNullException(name); + } +} +#> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Service/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate new file mode 100644 index 00000000..edb56a13 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/ADONETArtifactGenerator_TrackableEntities.Client.vstemplate @@ -0,0 +1,55 @@ + + + + Shared Trackable Entities EF 6.x Model First Generator + Template for generating shared trackable entity classes from an ADO.NET Entity Data Model. + Model.tt + CSharp + __TemplateIcon.png + __PreviewImage.png + true + true + 2 + 4.0 + TrackableEntities.DbContext.Client.EF6 + + + + + + + System + + + System.Data + + + System.Windows + + + + CSharpDbContext.Context.tt + CSharpDbContext.Types.tt + + + + NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + NuGet.VisualStudio.TemplateWizard + + + + Microsoft.Data.Entity.Design, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.AddArtifactGeneratorWizard + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/CSharpDbContext.Context.tt b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/CSharpDbContext.Context.tt new file mode 100644 index 00000000..d62c4a95 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/CSharpDbContext.Context.tt @@ -0,0 +1,636 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF6.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +const string inputFile = @"$edmxInputFile$"; +var textTransform = DynamicTextTransformation.Create(this); +var code = new CodeGenerationTools(this); +var ef = new MetadataTools(this); +var typeMapper = new TypeMapper(code, ef, textTransform.Errors); +var loader = new EdmMetadataLoader(textTransform.Host, textTransform.Errors); +var itemCollection = loader.CreateEdmItemCollection(inputFile); +var modelNamespace = loader.GetModelNamespace(inputFile); +var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); + +var container = itemCollection.OfType().FirstOrDefault(); +if (container == null) +{ + return string.Empty; +} +#> +//------------------------------------------------------------------------------ +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ + +<# + +var codeNamespace = code.VsNamespaceSuggestion(); +if (!String.IsNullOrEmpty(codeNamespace)) +{ +#> +namespace <#=code.EscapeNamespace(codeNamespace)#> +{ +<# + PushIndent(" "); +} + +#> +using System; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +<# +if (container.FunctionImports.Any()) +{ +#> +using System.Data.Entity.Core.Objects; +using System.Linq; +<# +} +#> + +<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext +{ + public <#=code.Escape(container)#>() + : base("name=<#=container.Name#>") + { +<# +if (!loader.IsLazyLoadingEnabled(container)) +{ +#> + this.Configuration.LazyLoadingEnabled = false; +<# +} + +foreach (var entitySet in container.BaseEntitySets.OfType()) +{ + // Note: the DbSet members are defined below such that the getter and + // setter always have the same accessibility as the DbSet definition + if (Accessibility.ForReadOnlyProperty(entitySet) != "public") + { +#> + <#=codeStringGenerator.DbSetInitializer(entitySet)#> +<# + } +} +#> + } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + throw new UnintentionalCodeFirstException(); + } + +<# + foreach (var entitySet in container.BaseEntitySets.OfType()) + { +#> + <#=codeStringGenerator.DbSet(entitySet)#> +<# + } + + foreach (var edmFunction in container.FunctionImports) + { + WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: false); + } +#> +} +<# + +if (!String.IsNullOrEmpty(codeNamespace)) +{ + PopIndent(); +#> +} +<# +} +#> +<#+ + +private void WriteFunctionImport(TypeMapper typeMapper, CodeStringGenerator codeStringGenerator, EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) +{ + if (typeMapper.IsComposable(edmFunction)) + { +#> + + [DbFunction("<#=edmFunction.NamespaceName#>", "<#=edmFunction.Name#>")] + <#=codeStringGenerator.ComposableFunctionMethod(edmFunction, modelNamespace)#> + { +<#+ + codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter); +#> + <#=codeStringGenerator.ComposableCreateQuery(edmFunction, modelNamespace)#> + } +<#+ + } + else + { +#> + + <#=codeStringGenerator.FunctionMethod(edmFunction, modelNamespace, includeMergeOption)#> + { +<#+ + codeStringGenerator.WriteFunctionParameters(edmFunction, WriteFunctionParameter); +#> + <#=codeStringGenerator.ExecuteFunction(edmFunction, modelNamespace, includeMergeOption)#> + } +<#+ + if (typeMapper.GenerateMergeOptionFunction(edmFunction, includeMergeOption)) + { + WriteFunctionImport(typeMapper, codeStringGenerator, edmFunction, modelNamespace, includeMergeOption: true); + } + } +} + +public void WriteFunctionParameter(string name, string isNotNull, string notNullInit, string nullInit) +{ +#> + var <#=name#> = <#=isNotNull#> ? + <#=notNullInit#> : + <#=nullInit#>; + +<#+ +} + +public const string TemplateId = "CSharp_DbContext_Context_EF6"; + +public class CodeStringGenerator +{ + private readonly CodeGenerationTools _code; + private readonly TypeMapper _typeMapper; + private readonly MetadataTools _ef; + + public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(typeMapper, "typeMapper"); + ArgumentNotNull(ef, "ef"); + + _code = code; + _typeMapper = typeMapper; + _ef = ef; + } + + public string Property(EdmProperty edmProperty) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + Accessibility.ForProperty(edmProperty), + _typeMapper.GetTypeName(edmProperty.TypeUsage), + _code.Escape(edmProperty), + _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); + } + + public string NavigationProperty(NavigationProperty navProp) + { + var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), + navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + _code.Escape(navProp), + _code.SpaceAfter(Accessibility.ForGetter(navProp)), + _code.SpaceAfter(Accessibility.ForSetter(navProp))); + } + + public string AccessibilityAndVirtual(string accessibility) + { + return accessibility + (accessibility != "private" ? " virtual" : ""); + } + + public string EntityClassOpening(EntityType entity) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1}partial class {2}{3}", + Accessibility.ForType(entity), + _code.SpaceAfter(_code.AbstractOption(entity)), + _code.Escape(entity), + _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); + } + + public string EnumOpening(SimpleType enumType) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} enum {1} : {2}", + Accessibility.ForType(enumType), + _code.Escape(enumType), + _code.Escape(_typeMapper.UnderlyingClrType(enumType))); + } + + public void WriteFunctionParameters(EdmFunction edmFunction, Action writeParameter) + { + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))"; + writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit); + } + } + + public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "{0} IQueryable<{1}> {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + _code.Escape(edmFunction), + string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray())); + } + + public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});", + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + edmFunction.NamespaceName, + edmFunction.Name, + string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()), + _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))); + } + + public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()); + if (includeMergeOption) + { + paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } + + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + _code.Escape(edmFunction), + paramList); + } + + public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});", + returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + edmFunction.Name, + callParams); + } + + public string DbSet(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} virtual DbSet<{1}> {2} {{ get; set; }}", + Accessibility.ForReadOnlyProperty(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType), + _code.Escape(entitySet)); + } + + public string DbSetInitializer(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} = Set<{1}>();", + _code.Escape(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType)); + } + + public string UsingDirectives(bool inHeader, bool includeCollections = true) + { + return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) + ? string.Format( + CultureInfo.InvariantCulture, + "{0}using System;{1}" + + "{2}", + inHeader ? Environment.NewLine : "", + includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", + inHeader ? "" : Environment.NewLine) + : ""; + } +} + +public class TypeMapper +{ + private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName"; + + private readonly System.Collections.IList _errors; + private readonly CodeGenerationTools _code; + private readonly MetadataTools _ef; + + public static string FixNamespaces(string typeName) + { + return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial."); + } + + public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(ef, "ef"); + ArgumentNotNull(errors, "errors"); + + _code = code; + _ef = ef; + _errors = errors; + } + + public string GetTypeName(TypeUsage typeUsage) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null); + } + + public string GetTypeName(EdmType edmType) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: null); + } + + public string GetTypeName(TypeUsage typeUsage, string modelNamespace) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace); + } + + public string GetTypeName(EdmType edmType, string modelNamespace) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace); + } + + public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace) + { + if (edmType == null) + { + return null; + } + + var collectionType = edmType as CollectionType; + if (collectionType != null) + { + return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace)); + } + + var typeName = _code.Escape(edmType.MetadataProperties + .Where(p => p.Name == ExternalTypeNameAttributeName) + .Select(p => (string)p.Value) + .FirstOrDefault()) + ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ? + _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) : + _code.Escape(edmType)); + + if (edmType is StructuralType) + { + return typeName; + } + + if (edmType is SimpleType) + { + var clrType = UnderlyingClrType(edmType); + if (!IsEnumType(edmType)) + { + typeName = _code.Escape(clrType); + } + + typeName = FixNamespaces(typeName); + + return clrType.IsValueType && isNullable == true ? + String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) : + typeName; + } + + throw new ArgumentException("edmType"); + } + + public Type UnderlyingClrType(EdmType edmType) + { + ArgumentNotNull(edmType, "edmType"); + + var primitiveType = edmType as PrimitiveType; + if (primitiveType != null) + { + return primitiveType.ClrEquivalentType; + } + + if (IsEnumType(edmType)) + { + return GetEnumUnderlyingType(edmType).ClrEquivalentType; + } + + return typeof(object); + } + + public object GetEnumMemberValue(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var valueProperty = enumMember.GetType().GetProperty("Value"); + return valueProperty == null ? null : valueProperty.GetValue(enumMember, null); + } + + public string GetEnumMemberName(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var nameProperty = enumMember.GetType().GetProperty("Name"); + return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null); + } + + public System.Collections.IEnumerable GetEnumMembers(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var membersProperty = enumType.GetType().GetProperty("Members"); + return membersProperty != null + ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null) + : Enumerable.Empty(); + } + + public bool EnumIsFlags(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var isFlagsProperty = enumType.GetType().GetProperty("IsFlags"); + return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null); + } + + public bool IsEnumType(GlobalItem edmType) + { + ArgumentNotNull(edmType, "edmType"); + + return edmType.GetType().Name == "EnumType"; + } + + public PrimitiveType GetEnumUnderlyingType(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null); + } + + public string CreateLiteral(object value) + { + if (value == null || value.GetType() != typeof(TimeSpan)) + { + return _code.CreateLiteral(value); + } + + return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks); + } + + public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable types, string sourceFile) + { + ArgumentNotNull(types, "types"); + ArgumentNotNull(sourceFile, "sourceFile"); + + var hash = new HashSet(StringComparer.InvariantCultureIgnoreCase); + if (types.Any(item => !hash.Add(item))) + { + _errors.Add( + new CompilerError(sourceFile, -1, -1, "6023", + String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict")))); + return false; + } + return true; + } + + public IEnumerable GetEnumItemsToGenerate(IEnumerable itemCollection) + { + return GetItemsToGenerate(itemCollection) + .Where(e => IsEnumType(e)); + } + + public IEnumerable GetItemsToGenerate(IEnumerable itemCollection) where T: EdmType + { + return itemCollection + .OfType() + .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName)) + .OrderBy(i => i.Name); + } + + public IEnumerable GetAllGlobalItems(IEnumerable itemCollection) + { + return itemCollection + .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i)) + .Select(g => GetGlobalItemName(g)); + } + + public string GetGlobalItemName(GlobalItem item) + { + if (item is EdmType) + { + return ((EdmType)item).Name; + } + else + { + return ((EntityContainer)item).Name; + } + } + + public IEnumerable GetSimpleProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetSimpleProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetPropertiesWithDefaultValues(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetPropertiesWithDefaultValues(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type); + } + + public IEnumerable GetCollectionNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + } + + public FunctionParameter GetReturnParameter(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters"); + return returnParamsProperty == null + ? edmFunction.ReturnParameter + : ((IEnumerable)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault(); + } + + public bool IsComposable(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute"); + return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null); + } + + public IEnumerable GetParameters(EdmFunction edmFunction) + { + return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + } + + public TypeUsage GetReturnType(EdmFunction edmFunction) + { + var returnParam = GetReturnParameter(edmFunction); + return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage); + } + + public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption) + { + var returnType = GetReturnType(edmFunction); + return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType; + } +} + +public static void ArgumentNotNull(T arg, string name) where T : class +{ + if (arg == null) + { + throw new ArgumentNullException(name); + } +} +#> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/CSharpDbContext.Types.tt b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/CSharpDbContext.Types.tt new file mode 100644 index 00000000..4daaf1f4 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/CSharpDbContext.Types.tt @@ -0,0 +1,803 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF6.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +const string inputFile = @"$edmxInputFile$"; +var textTransform = DynamicTextTransformation.Create(this); +var code = new CodeGenerationTools(this); +var ef = new MetadataTools(this); +var typeMapper = new TypeMapper(code, ef, textTransform.Errors); +var fileManager = EntityFrameworkTemplateFileManager.Create(this); +var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); +var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); + +if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile)) +{ + return string.Empty; +} + +WriteHeader(codeStringGenerator, fileManager); + +foreach (var entity in typeMapper.GetItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(entity.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false)#> +<#=codeStringGenerator.EntityClassOpening(entity)#> +{ +<# + var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity); + var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity); + var complexProperties = typeMapper.GetComplexProperties(entity); + + if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(entity)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var navProperty in collectionNavigationProperties) + { +#> + this.<#=code.Escape(navProperty)#> = new ChangeTrackingCollection<<#=typeMapper.GetTypeName(navProperty.ToEndMember.GetEntityType())#>>(); +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>(); +<# + } +#> + } +<# + } + + var simpleProperties = typeMapper.GetSimpleProperties(entity); + if (simpleProperties.Any()) + { + foreach (var edmProperty in simpleProperties) + { +#> + + <#=Accessibility.ForProperty(edmProperty)#> <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> + { + get { return _<#=code.Escape(edmProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(edmProperty)#>)) return; + _<#=code.Escape(edmProperty)#> = value; + NotifyPropertyChanged(); + } + } + private <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> _<#=code.Escape(edmProperty)#>; +<# + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var complexProperty in complexProperties) + { +#> + + <#=Accessibility.ForProperty(complexProperty)#> <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#> <#=code.Escape(complexProperty)#> + { + get { return _<#=code.Escape(complexProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(complexProperty)#>)) return; + _<#=code.Escape(complexProperty)#> = value; + NotifyPropertyChanged(); + } + } + private <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#> _<#=code.Escape(complexProperty)#>; +<# + } + } + + var navigationProperties = typeMapper.GetNavigationProperties(entity); + if (navigationProperties.Any()) + { + foreach (var navProperty in navigationProperties) + { + var endType = typeMapper.GetTypeName(navProperty.ToEndMember.GetEntityType()); + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + + <#=Accessibility.ForProperty(navProperty)#> <#="ChangeTrackingCollection<" + endType + ">"#> <#=code.Escape(navProperty)#> + { + get { return _<#=code.Escape(navProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(navProperty)#>)) return; + _<#=code.Escape(navProperty)#> = value; + NotifyPropertyChanged(); + } + } + private <#="ChangeTrackingCollection<" + endType + ">"#> _<#=code.Escape(navProperty)#>; +<# + } + else + { +#> + + <#=Accessibility.ForProperty(navProperty)#> <#=endType#> <#=code.Escape(navProperty)#> + { + get { return _<#=code.Escape(navProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(navProperty)#>)) return; + _<#=code.Escape(navProperty)#> = value; + <#=code.Escape(navProperty)#>ChangeTracker = _<#=code.Escape(navProperty)#> == null ? null + : new ChangeTrackingCollection<<#=endType#>> { _<#=code.Escape(navProperty)#> }; + NotifyPropertyChanged(); + } + } + private <#=endType#> _<#=code.Escape(navProperty)#>; + private ChangeTrackingCollection<<#=endType#>> <#=code.Escape(navProperty)#>ChangeTracker { get; set; } +<# + } + } + } +#> +} +<# + EndNamespace(code); +} + +foreach (var complex in typeMapper.GetItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(complex.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: true)#> +<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> : EntityBase +{ +<# + var complexProperties = typeMapper.GetComplexProperties(complex); + var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex); + + if (propertiesWithDefaultValues.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(complex)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>(); +<# + } +#> + } + +<# + } + + var simpleProperties = typeMapper.GetSimpleProperties(complex); + if (simpleProperties.Any()) + { + foreach(var edmProperty in simpleProperties) + { +#> + + <#=Accessibility.ForProperty(edmProperty)#> <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> + { + get { return _<#=code.Escape(edmProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(edmProperty)#>)) return; + _<#=code.Escape(edmProperty)#> = value; + NotifyPropertyChanged(); + } + } + private <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> _<#=code.Escape(edmProperty)#>; +<# + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var edmProperty in complexProperties) + { +#> + <#=Accessibility.ForProperty(edmProperty)#> <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> + { + get { return _<#=code.Escape(edmProperty)#>; } + set + { + if (Equals(value, _<#=code.Escape(edmProperty)#>)) return; + _<#=code.Escape(edmProperty)#> = value; + NotifyPropertyChanged(); + } + } + private <#=typeMapper.GetTypeName(edmProperty.TypeUsage)#> _<#=code.Escape(edmProperty)#>; +<# + } + } +#> +} +<# + EndNamespace(code); +} + +foreach (var enumType in typeMapper.GetEnumItemsToGenerate(itemCollection)) +{ + fileManager.StartNewFile(enumType.Name + ".cs"); + BeginNamespace(code); +#> +<#=codeStringGenerator.UsingDirectives(inHeader: false, includeCollections: false)#> +<# + if (typeMapper.EnumIsFlags(enumType)) + { +#> +[Flags] +<# + } +#> +<#=codeStringGenerator.EnumOpening(enumType)#> +{ +<# + var foundOne = false; + + foreach (MetadataItem member in typeMapper.GetEnumMembers(enumType)) + { + foundOne = true; +#> + <#=code.Escape(typeMapper.GetEnumMemberName(member))#> = <#=typeMapper.GetEnumMemberValue(member)#>, +<# + } + + if (foundOne) + { + this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1); + } +#> +} +<# + EndNamespace(code); + +} + +fileManager.Process(); + +#> +<#+ + +public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFileManager fileManager) +{ + fileManager.StartHeader(); +#> +//------------------------------------------------------------------------------ +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=CodeGenerationTools.GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ +<#=codeStringGenerator.UsingDirectives(inHeader: true)#> +<#+ + fileManager.EndBlock(); +} + +public void BeginNamespace(CodeGenerationTools code) +{ + var codeNamespace = code.VsNamespaceSuggestion(); + if (!String.IsNullOrEmpty(codeNamespace)) + { +#> +namespace <#=code.EscapeNamespace(codeNamespace)#> +{ +<#+ + PushIndent(" "); + } +} + +public void EndNamespace(CodeGenerationTools code) +{ + if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion())) + { + PopIndent(); +#> +} +<#+ + } +} + +public const string TemplateId = "CSharp_DbContext_Types_EF6"; + +public class CodeStringGenerator +{ + private readonly CodeGenerationTools _code; + private readonly TypeMapper _typeMapper; + private readonly MetadataTools _ef; + + public CodeStringGenerator(CodeGenerationTools code, TypeMapper typeMapper, MetadataTools ef) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(typeMapper, "typeMapper"); + ArgumentNotNull(ef, "ef"); + + _code = code; + _typeMapper = typeMapper; + _ef = ef; + } + + public string Property(EdmProperty edmProperty) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + Accessibility.ForProperty(edmProperty), + _typeMapper.GetTypeName(edmProperty.TypeUsage), + _code.Escape(edmProperty), + _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); + } + + public string NavigationProperty(NavigationProperty navProp) + { + var endType = _typeMapper.GetTypeName(navProp.ToEndMember.GetEntityType()); + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2} {{ {3}get; {4}set; }}", + AccessibilityAndVirtual(Accessibility.ForNavigationProperty(navProp)), + navProp.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + _code.Escape(navProp), + _code.SpaceAfter(Accessibility.ForGetter(navProp)), + _code.SpaceAfter(Accessibility.ForSetter(navProp))); + } + + public string AccessibilityAndVirtual(string accessibility) + { + return accessibility + (accessibility != "private" ? " virtual" : ""); + } + + public string EntityClassOpening(EntityType entity) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1}partial class {2}{3} : EntityBase", + Accessibility.ForType(entity), + _code.SpaceAfter(_code.AbstractOption(entity)), + _code.Escape(entity), + _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); + } + + public string EnumOpening(SimpleType enumType) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} enum {1} : {2}", + Accessibility.ForType(enumType), + _code.Escape(enumType), + _code.Escape(_typeMapper.UnderlyingClrType(enumType))); + } + + public void WriteFunctionParameters(EdmFunction edmFunction, Action writeParameter) + { + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + TypeMapper.FixNamespaces(parameter.RawClrTypeName) + "))"; + writeParameter(parameter.LocalVariableName, isNotNull, notNullInit, nullInit); + } + } + + public string ComposableFunctionMethod(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "{0} IQueryable<{1}> {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + _code.Escape(edmFunction), + string.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray())); + } + + public string ComposableCreateQuery(EdmFunction edmFunction, string modelNamespace) + { + var parameters = _typeMapper.GetParameters(edmFunction); + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<{0}>(\"[{1}].[{2}]({3})\"{4});", + _typeMapper.GetTypeName(_typeMapper.GetReturnType(edmFunction), modelNamespace), + edmFunction.NamespaceName, + edmFunction.Name, + string.Join(", ", parameters.Select(p => "@" + p.EsqlParameterName).ToArray()), + _code.StringBefore(", ", string.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))); + } + + public string FunctionMethod(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var paramList = String.Join(", ", parameters.Select(p => TypeMapper.FixNamespaces(p.FunctionParameterType) + " " + p.FunctionParameterName).ToArray()); + if (includeMergeOption) + { + paramList = _code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } + + return string.Format( + CultureInfo.InvariantCulture, + "{0} {1} {2}({3})", + AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction)), + returnType == null ? "int" : "ObjectResult<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + _code.Escape(edmFunction), + paramList); + } + + public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption) + { + var parameters = _typeMapper.GetParameters(edmFunction); + var returnType = _typeMapper.GetReturnType(edmFunction); + + var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } + + return string.Format( + CultureInfo.InvariantCulture, + "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});", + returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">", + edmFunction.Name, + callParams); + } + + public string DbSet(EntitySet entitySet) + { + return string.Format( + CultureInfo.InvariantCulture, + "{0} virtual DbSet<{1}> {2} {{ get; set; }}", + Accessibility.ForReadOnlyProperty(entitySet), + _typeMapper.GetTypeName(entitySet.ElementType), + _code.Escape(entitySet)); + } + + public string UsingDirectives(bool inHeader, bool includeCollections = true) + { + return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) + ? string.Format( + CultureInfo.InvariantCulture, + "{0}using System;{1}" + + "{2}" + + "{3}", + inHeader ? Environment.NewLine : "", + includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", + Environment.NewLine + "using TrackableEntities.Client;", + inHeader ? "" : Environment.NewLine) + : ""; + } +} + +public class TypeMapper +{ + private const string ExternalTypeNameAttributeName = @"http://schemas.microsoft.com/ado/2006/04/codegeneration:ExternalTypeName"; + + private readonly System.Collections.IList _errors; + private readonly CodeGenerationTools _code; + private readonly MetadataTools _ef; + + public TypeMapper(CodeGenerationTools code, MetadataTools ef, System.Collections.IList errors) + { + ArgumentNotNull(code, "code"); + ArgumentNotNull(ef, "ef"); + ArgumentNotNull(errors, "errors"); + + _code = code; + _ef = ef; + _errors = errors; + } + + public static string FixNamespaces(string typeName) + { + return typeName.Replace("System.Data.Spatial.", "System.Data.Entity.Spatial."); + } + + public string GetTypeName(TypeUsage typeUsage) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace: null); + } + + public string GetTypeName(EdmType edmType) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: null); + } + + public string GetTypeName(TypeUsage typeUsage, string modelNamespace) + { + return typeUsage == null ? null : GetTypeName(typeUsage.EdmType, _ef.IsNullable(typeUsage), modelNamespace); + } + + public string GetTypeName(EdmType edmType, string modelNamespace) + { + return GetTypeName(edmType, isNullable: null, modelNamespace: modelNamespace); + } + + public string GetTypeName(EdmType edmType, bool? isNullable, string modelNamespace) + { + if (edmType == null) + { + return null; + } + + var collectionType = edmType as CollectionType; + if (collectionType != null) + { + return String.Format(CultureInfo.InvariantCulture, "ICollection<{0}>", GetTypeName(collectionType.TypeUsage, modelNamespace)); + } + + var typeName = _code.Escape(edmType.MetadataProperties + .Where(p => p.Name == ExternalTypeNameAttributeName) + .Select(p => (string)p.Value) + .FirstOrDefault()) + ?? (modelNamespace != null && edmType.NamespaceName != modelNamespace ? + _code.CreateFullName(_code.EscapeNamespace(edmType.NamespaceName), _code.Escape(edmType)) : + _code.Escape(edmType)); + + if (edmType is StructuralType) + { + return typeName; + } + + if (edmType is SimpleType) + { + var clrType = UnderlyingClrType(edmType); + if (!IsEnumType(edmType)) + { + typeName = _code.Escape(clrType); + } + + typeName = FixNamespaces(typeName); + + return clrType.IsValueType && isNullable == true ? + String.Format(CultureInfo.InvariantCulture, "Nullable<{0}>", typeName) : + typeName; + } + + throw new ArgumentException("edmType"); + } + + public Type UnderlyingClrType(EdmType edmType) + { + ArgumentNotNull(edmType, "edmType"); + + var primitiveType = edmType as PrimitiveType; + if (primitiveType != null) + { + return primitiveType.ClrEquivalentType; + } + + if (IsEnumType(edmType)) + { + return GetEnumUnderlyingType(edmType).ClrEquivalentType; + } + + return typeof(object); + } + + public object GetEnumMemberValue(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var valueProperty = enumMember.GetType().GetProperty("Value"); + return valueProperty == null ? null : valueProperty.GetValue(enumMember, null); + } + + public string GetEnumMemberName(MetadataItem enumMember) + { + ArgumentNotNull(enumMember, "enumMember"); + + var nameProperty = enumMember.GetType().GetProperty("Name"); + return nameProperty == null ? null : (string)nameProperty.GetValue(enumMember, null); + } + + public System.Collections.IEnumerable GetEnumMembers(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var membersProperty = enumType.GetType().GetProperty("Members"); + return membersProperty != null + ? (System.Collections.IEnumerable)membersProperty.GetValue(enumType, null) + : Enumerable.Empty(); + } + + public bool EnumIsFlags(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + var isFlagsProperty = enumType.GetType().GetProperty("IsFlags"); + return isFlagsProperty != null && (bool)isFlagsProperty.GetValue(enumType, null); + } + + public bool IsEnumType(GlobalItem edmType) + { + ArgumentNotNull(edmType, "edmType"); + + return edmType.GetType().Name == "EnumType"; + } + + public PrimitiveType GetEnumUnderlyingType(EdmType enumType) + { + ArgumentNotNull(enumType, "enumType"); + + return (PrimitiveType)enumType.GetType().GetProperty("UnderlyingType").GetValue(enumType, null); + } + + public string CreateLiteral(object value) + { + if (value == null || value.GetType() != typeof(TimeSpan)) + { + return _code.CreateLiteral(value); + } + + return string.Format(CultureInfo.InvariantCulture, "new TimeSpan({0})", ((TimeSpan)value).Ticks); + } + + public bool VerifyCaseInsensitiveTypeUniqueness(IEnumerable types, string sourceFile) + { + ArgumentNotNull(types, "types"); + ArgumentNotNull(sourceFile, "sourceFile"); + + var hash = new HashSet(StringComparer.InvariantCultureIgnoreCase); + if (types.Any(item => !hash.Add(item))) + { + _errors.Add( + new CompilerError(sourceFile, -1, -1, "6023", + String.Format(CultureInfo.CurrentCulture, CodeGenerationTools.GetResourceString("Template_CaseInsensitiveTypeConflict")))); + return false; + } + return true; + } + + public IEnumerable GetEnumItemsToGenerate(IEnumerable itemCollection) + { + return GetItemsToGenerate(itemCollection) + .Where(e => IsEnumType(e)); + } + + public IEnumerable GetItemsToGenerate(IEnumerable itemCollection) where T: EdmType + { + return itemCollection + .OfType() + .Where(i => !i.MetadataProperties.Any(p => p.Name == ExternalTypeNameAttributeName)) + .OrderBy(i => i.Name); + } + + public IEnumerable GetAllGlobalItems(IEnumerable itemCollection) + { + return itemCollection + .Where(i => i is EntityType || i is ComplexType || i is EntityContainer || IsEnumType(i)) + .Select(g => GetGlobalItemName(g)); + } + + public string GetGlobalItemName(GlobalItem item) + { + if (item is EdmType) + { + return ((EdmType)item).Name; + } + else + { + return ((EntityContainer)item).Name; + } + } + + public IEnumerable GetSimpleProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetSimpleProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetComplexProperties(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == type); + } + + public IEnumerable GetPropertiesWithDefaultValues(EntityType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetPropertiesWithDefaultValues(ComplexType type) + { + return type.Properties.Where(p => p.TypeUsage.EdmType is SimpleType && p.DeclaringType == type && p.DefaultValue != null); + } + + public IEnumerable GetNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type); + } + + public IEnumerable GetCollectionNavigationProperties(EntityType type) + { + return type.NavigationProperties.Where(np => np.DeclaringType == type && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + } + + public FunctionParameter GetReturnParameter(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var returnParamsProperty = edmFunction.GetType().GetProperty("ReturnParameters"); + return returnParamsProperty == null + ? edmFunction.ReturnParameter + : ((IEnumerable)returnParamsProperty.GetValue(edmFunction, null)).FirstOrDefault(); + } + + public bool IsComposable(EdmFunction edmFunction) + { + ArgumentNotNull(edmFunction, "edmFunction"); + + var isComposableProperty = edmFunction.GetType().GetProperty("IsComposableAttribute"); + return isComposableProperty != null && (bool)isComposableProperty.GetValue(edmFunction, null); + } + + public IEnumerable GetParameters(EdmFunction edmFunction) + { + return FunctionImportParameter.Create(edmFunction.Parameters, _code, _ef); + } + + public TypeUsage GetReturnType(EdmFunction edmFunction) + { + var returnParam = GetReturnParameter(edmFunction); + return returnParam == null ? null : _ef.GetElementType(returnParam.TypeUsage); + } + + public bool GenerateMergeOptionFunction(EdmFunction edmFunction, bool includeMergeOption) + { + var returnType = GetReturnType(edmFunction); + return !includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType; + } +} + +public static void ArgumentNotNull(T arg, string name) where T : class +{ + if (arg == null) + { + throw new ArgumentNullException(name); + } +} +#> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/CSharpDbContext.Shared/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/EntityController.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/EntityController.cs new file mode 100644 index 00000000..57688643 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/EntityController.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Web.Http; +using System.Web.Http.Description; +using TrackableEntities.Common; +using $entitiesNamespace$; +using $baseNamespace$.Service.Persistence.Exceptions; +using $baseNamespace$.Service.Persistence.UnitsOfWork; + +namespace $rootnamespace$ +{ + public class $safeitemname$ : ApiController + { + // TODO: Rename IExampleUnitOfWork to match Unit of Work Interface added to Persistence project + private readonly IExampleUnitOfWork _unitOfWork; + + // TODO: Rename IExampleUnitOfWork parameter + public $safeitemname$(IExampleUnitOfWork unitOfWork) + { + _unitOfWork = unitOfWork; + } + + // GET api/$entityName$ + [ResponseType(typeof(IEnumerable<$entityName$>))] + public async Task Get$entitySetName$() + { + IEnumerable<$entityName$> entities = await _unitOfWork.$entityName$Repository.Get$entitySetName$(); + return Ok(entities); + } + + // GET api/$entityName$/5 + [ResponseType(typeof($entityName$))] + public async Task Get$entityName$(int id) + { + $entityName$ entity = await _unitOfWork.$entityName$Repository.Get$entityName$(id); + if (entity == null) + { + return NotFound(); + } + return Ok(entity); + } + + // POST api/$entityName$ + [ResponseType(typeof($entityName$))] + public async Task Post$entityName$($entityName$ entity) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + + _unitOfWork.$entityName$Repository.Insert(entity); + + try + { + await _unitOfWork.SaveChangesAsync(); + } + catch (UpdateException) + { + if (_unitOfWork.$entityName$Repository.Find(entity.$entityName$Id) == null) + { + return Conflict(); + } + throw; + } + + await _unitOfWork.$entityName$Repository.LoadRelatedEntitiesAsync(entity); + entity.AcceptChanges(); + + return CreatedAtRoute("DefaultApi", new { id = entity.$entityName$Id }, entity); + } + + // PUT api/$entityName$ + [ResponseType(typeof($entityName$))] + public async Task Put$entityName$($entityName$ entity) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + + _unitOfWork.$entityName$Repository.Update(entity); + + try + { + await _unitOfWork.SaveChangesAsync(); + } + catch (UpdateConcurrencyException) + { + if (_unitOfWork.$entityName$Repository.Find(entity.$entityName$Id) == null) + { + return Conflict(); + } + throw; + } + + await _unitOfWork.$entityName$Repository.LoadRelatedEntitiesAsync(entity); + entity.AcceptChanges(); + return Ok(entity); + } + + // DELETE api/$entityName$/5 + public async Task Delete$entityName$(int id) + { + bool result = await _unitOfWork.$entityName$Repository.Delete$entityName$(id); + if (!result) return Ok(); + + try + { + await _unitOfWork.SaveChangesAsync(); + } + catch (UpdateConcurrencyException) + { + if (_unitOfWork.$entityName$Repository.Find(id) == null) + { + return Conflict(); + } + throw; + } + + return Ok(); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + var disposable = _unitOfWork as IDisposable; + if (disposable != null) + disposable.Dispose(); + } + base.Dispose(disposing); + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/MyTemplate.vstemplate new file mode 100644 index 00000000..809d6ba7 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/MyTemplate.vstemplate @@ -0,0 +1,20 @@ + + + EntityController.cs + Entity Web API Controller (Patterns) + Entity Web API Controller for Patterns WebApi project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + EntityController.cs + + + TrackableEntities.ItemWizard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.ItemWizard.EntityControllerWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityController/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/EntityRepository.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/EntityRepository.cs new file mode 100644 index 00000000..d18f8ac3 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/EntityRepository.cs @@ -0,0 +1,53 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Data.Entity; +using System.Threading.Tasks; +using TrackableEntities.Patterns.EF6; +using $entitiesNamespace$; +using $baseNamespace$.Service.EF.Contexts; +using $baseNamespace$.Service.Persistence.Repositories; + +namespace $rootnamespace$ +{ + // NOTE: I$entityName$Repository will need to have been added to the Service.Persistence project + + public class $safeitemname$ : Repository<$entityName$>, I$entityName$Repository + { + // TODO: Match Database Context Interface type + private readonly IDatabaseContext _context; + + // TODO: Match Database Context Interface type + public $safeitemname$(IDatabaseContext context) : + base(context as DbContext) + { + _context = context; + } + + public async Task> Get$entitySetName$() + { + // TODO: Add Includes for related entities if needed + IEnumerable<$entityName$> entities = await _context.$entitySetName$ + .ToListAsync(); + return entities; + } + + public async Task<$entityName$> Get$entityName$(int id) + { + // TODO: Add Includes for related entities if needed + $entityName$ entity = await _context.$entitySetName$ + .SingleOrDefaultAsync(t => t.$entityName$Id == id); + return entity; + } + + public async Task Delete$entityName$(int id) + { + // TODO: Add Includes for related entities if needed + $entityName$ entity = await _context.$entitySetName$ + .SingleOrDefaultAsync(t => t.$entityName$Id == id); + if (entity == null) return false; + ApplyDelete(entity); + return true; + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/MyTemplate.vstemplate new file mode 100644 index 00000000..81b33d13 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/MyTemplate.vstemplate @@ -0,0 +1,20 @@ + + + EntityRepository.cs + Entity Repository Class (Patterns) + Entity Repository Class for Patterns EF project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + EntityRepository.cs + + + TrackableEntities.ItemWizard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.ItemWizard.EntityRepoClassWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/EntityRepository/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/ExampleUnitOfWork.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/ExampleUnitOfWork.cs new file mode 100644 index 00000000..7586ce29 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/ExampleUnitOfWork.cs @@ -0,0 +1,73 @@ +using System; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +using System.Threading; +using System.Threading.Tasks; +using TrackableEntities.Patterns.EF6; + +namespace $rootnamespace$ +{ + // Implements I$safeitemname$ in the Persistence project + public class $safeitemname$ : UnitOfWork, I$safeitemname$ + { + // TODO: Add read-only fields for each entity repository interface + //private readonly IEntityRepository _entityRepository; + + // TODO: Rename IDatabaseContext to match context interface + // TODO: Add parameters for each repository interface + public $safeitemname$(IDatabaseContext context + /* , IEntityRepository entityRepository */) : + base(context as DbContext) + { + // TODO: Initizlialize each entity repository field + //_entityRepository = entityRepository; + } + + // TODO: Add read-only property for each entity repository interface + //public IEntityRepository EntityRepository + //{ + // get { return _entityRepository; } + //} + + public override int SaveChanges() + { + try + { + return base.SaveChanges(); + } + catch (DbUpdateConcurrencyException concurrencyException) + { + throw new UpdateConcurrencyException(concurrencyException.Message, + concurrencyException); + } + catch (DbUpdateException updateException) + { + throw new UpdateException(updateException.Message, + updateException); + } + } + + public override Task SaveChangesAsync() + { + return SaveChangesAsync(CancellationToken.None); + } + + public override Task SaveChangesAsync(CancellationToken cancellationToken) + { + try + { + return base.SaveChangesAsync(cancellationToken); + } + catch (DbUpdateConcurrencyException concurrencyException) + { + throw new UpdateConcurrencyException(concurrencyException.Message, + concurrencyException); + } + catch (DbUpdateException updateException) + { + throw new UpdateException(updateException.Message, + updateException); + } + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/MyTemplate.vstemplate new file mode 100644 index 00000000..4b0556bb --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/MyTemplate.vstemplate @@ -0,0 +1,16 @@ + + + ExampleUnitOfWork.cs + Example Unit of Work Class (Patterns) + Example Unit of Work Class for Patterns EF project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + ExampleUnitOfWork.cs + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/ExampleUnitOfWork/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/IDatabaseContext.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/IDatabaseContext.cs new file mode 100644 index 00000000..ee9d7fa5 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/IDatabaseContext.cs @@ -0,0 +1,14 @@ +using System; +using System.Data.Entity; + +// TODO: Alter DbContext class to implement this interface and change +// each DbSet property to IDbSet + +namespace $rootnamespace$ +{ + public interface $safeitemname$ + { + // TODO: Add IDbSet properties for each entity set on the DbContext class + //IDbSet Entities { get; set; } + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/MyTemplate.vstemplate new file mode 100644 index 00000000..28fb7391 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/MyTemplate.vstemplate @@ -0,0 +1,16 @@ + + + IDatabaseContext.cs + Database Context Interface (Patterns) + Database Context Interface for Patterns EF project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + IDatabaseContext.cs + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/IDatabaseContext/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/IEntityRepository.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/IEntityRepository.cs new file mode 100644 index 00000000..7409d3f6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/IEntityRepository.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using TrackableEntities.Patterns; +using $entitiesNamespace$; + +namespace $rootnamespace$ +{ + public interface $safeitemname$ : IRepository<$entityName$>, IRepositoryAsync<$entityName$> + { + Task> Get$entitySetName$(); + Task<$entityName$> Get$entityName$(int id); + Task Delete$entityName$(int id); + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/MyTemplate.vstemplate new file mode 100644 index 00000000..bfbe1d77 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/MyTemplate.vstemplate @@ -0,0 +1,20 @@ + + + IEntityRepository.cs + Entity Repository Interface (Patterns) + Entity Repository Interface for Patterns Persistence project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + IEntityRepository.cs + + + TrackableEntities.ItemWizard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.ItemWizard.EntityRepoInterfaceWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/IEntityRepository/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/IExampleUnitOfWork.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/IExampleUnitOfWork.cs new file mode 100644 index 00000000..d769c745 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/IExampleUnitOfWork.cs @@ -0,0 +1,11 @@ +using System; +using TrackableEntities.Patterns; + +namespace $rootnamespace$ +{ + public interface $safeitemname$ : IUnitOfWork, IUnitOfWorkAsync + { + // TODO: Add read-only properties for each entity repository interface + //IEntityRepository EntityRepository { get; } + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/MyTemplate.vstemplate new file mode 100644 index 00000000..fd6b168d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/MyTemplate.vstemplate @@ -0,0 +1,16 @@ + + + IExampleUnitOfWork.cs + Example Unit of Work Interface (Patterns) + Example Unit of Work Interface for Patterns Persistence project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + IExampleUnitOfWork.cs + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/IExampleUnitOfWork/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/MyTemplate.vstemplate new file mode 100644 index 00000000..b96158ee --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/MyTemplate.vstemplate @@ -0,0 +1,20 @@ + + + WebApiController.cs + Entity Web API Controller + Entity Web API Controller for WebApi project. + CSharp + 10 + __TemplateIcon.png + __PreviewImage.png + 2 + + + + WebApiController.cs + + + TrackableEntities.ItemWizard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.ItemWizard.WebApiControllerWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/WebApiController.cs b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/WebApiController.cs new file mode 100644 index 00000000..d060e147 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/WebApiController.cs @@ -0,0 +1,145 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.Web.Http; +using System.Web.Http.Description; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +using TrackableEntities; +using TrackableEntities.EF6; +using TrackableEntities.Common; +using $entitiesNamespace$; + +// NOTE: Primary key name and/or type may need to be set manually. + +namespace $rootnamespace$ +{ + public class $safeitemname$ : ApiController + { + private readonly $dbContextName$ _dbContext = new $dbContextName$(); + + // GET api/$entityName$ + [ResponseType(typeof(IEnumerable<$entityName$>))] + public async Task Get$entitySetName$() + { + IEnumerable<$entityName$> entities = await _dbContext.$entitySetName$ + // TODO: Add Includes for reference and/or collection properties + .ToListAsync(); + + return Ok(entities); + } + + // GET api/$entityName$/5 + [ResponseType(typeof($entityName$))] + public async Task Get$entityName$(int id) + { + $entityName$ entity = await _dbContext.$entitySetName$ + // TODO: Add Includes for reference and/or collection properties + .SingleOrDefaultAsync(e => e.$entityName$Id == id); + + if (entity == null) + { + return NotFound(); + } + + return Ok(entity); + } + + // POST api/$entityName$ + [ResponseType(typeof($entityName$))] + public async Task Post$entityName$($entityName$ entity) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + + entity.TrackingState = TrackingState.Added; + _dbContext.ApplyChanges(entity); + + + try + { + await _dbContext.SaveChangesAsync(); + } + catch (DbUpdateException) + { + if (_dbContext.$entitySetName$.Any(e => e.$entityName$Id == entity.$entityName$Id)) + { + return Conflict(); + } + throw; + } + + await _dbContext.LoadRelatedEntitiesAsync(entity); + entity.AcceptChanges(); + return CreatedAtRoute("DefaultApi", new { id = entity.$entityName$Id }, entity); + } + + // PUT api/$entityName$ + [ResponseType(typeof($entityName$))] + public async Task Put$entityName$($entityName$ entity) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState); + } + + _dbContext.ApplyChanges(entity); + + try + { + await _dbContext.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!_dbContext.$entitySetName$.Any(e => e.$entityName$Id == entity.$entityName$Id)) + { + return Conflict(); + } + throw; + } + + await _dbContext.LoadRelatedEntitiesAsync(entity); + entity.AcceptChanges(); + return Ok(entity); + } + + // DELETE api/$entityName$/5 + public async Task Delete$entityName$(int id) + { + $entityName$ entity = await _dbContext.$entitySetName$ + // TODO: Include child entities if any + .SingleOrDefaultAsync(e => e.$entityName$Id == id); + if (entity == null) + { + return Ok(); + } + + entity.TrackingState = TrackingState.Deleted; + _dbContext.ApplyChanges(entity); + + try + { + await _dbContext.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!_dbContext.$entitySetName$.Any(e => e.$entityName$Id == entity.$entityName$Id)) + { + return Conflict(); + } + throw; + } + + return Ok(); + } + + protected override void Dispose(bool disposing) + { + _dbContext.Dispose(); + base.Dispose(disposing); + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ItemTemplates/WebApiController/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/App.config new file mode 100644 index 00000000..99ddf3e0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..6c2f6138 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,136 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using TrackableEntities.Client; + + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate new file mode 100644 index 00000000..47868eb6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -0,0 +1,50 @@ + + + Trackable Client .NET 4.5 Entities Library + .NET 4.5 class library with templates for reverse engineering trackable client entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Client.Entities.Net45 + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.cs.t4 + EntityType.cs.t4 + + + Entity.tt + + + + + AssemblyInfo.cs + + TrackableClientEntities.Net45.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8a0fde69 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("edd34409-9d76-42f0-99c7-b504f21d6513")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt new file mode 100644 index 00000000..3513fd50 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt @@ -0,0 +1,25 @@ +Trackable Client .NET 4.5 Entities ReadMe + +NOTE: Because these client entities are targeted to .NET 4.5 or greater, +you can use either the Entity Framewor Power Tools or the EF 6.x Tools +for Visual Studio to generate entities. + +This project template references the TrackableEntities.Client NuGet +package, which contains a ChangeTrackingCollection that sets the +TrackingState and ModifiedProperties properties on each entity. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable client entities. + +IMPORTANT: After running the tool, be sure to delete the Mapping folder +and classes, and also the DbContext-derived class that was generated. +These must be removed because the project will not reference the +Entity Framework NuGet package. Clients should avoid referencing +any particular data access library and instead invoke a service +for retrieving and saving entities to a database. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5 and higher, Windows Phone +8 and higher, or Windows Store Apps. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj new file mode 100644 index 00000000..c377ab06 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {953B79E1-B6B4-4E15-B32D-AB6A28D2510E} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + True + + + + + + + + + + + + + + False + ..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + False + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/App.config new file mode 100644 index 00000000..1b997731 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..632d0bca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,136 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using TrackableEntities.Client; + + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(() => <#= code.Property(property) #>); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Property(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Property(navProperty) #>); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..461c291f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(property) #>); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableClientEntities/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate similarity index 81% rename from Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableClientEntities/MyTemplate.vstemplate rename to Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate index 11323fa9..bea0396e 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableClientEntities/MyTemplate.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -1,6 +1,6 @@ - Trackable Client Entities Library + Trackable Client Portable Entities Library Portable class library with templates for reverse engineering trackable client entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. CSharp @@ -28,7 +28,6 @@ - packages.config AssemblyInfo.cs @@ -36,15 +35,16 @@ - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard - - - + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt new file mode 100644 index 00000000..c958c6ca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt @@ -0,0 +1,27 @@ +Trackable Client Entities ReadMe + +NOTE: You should first install the Entity Framework Power Tools. +Support for EF 6.1 Tools for Visual Studio has be added, but it can +only be used to generate client entities using a .NET 4.5 class +library project, from which you can copy or link model classes +to the Client.Entities project. + +This project template references the TrackableEntities.Client NuGet +package, which contains a ChangeTrackingCollection that sets the +TrackingState and ModifiedProperties properties on each entity. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable client entities. + +IMPORTANT: After running the tool, be sure to delete the Mapping folder +and classes, and also the DbContext-derived class that was generated. +These must be removed because the project will not reference the +Entity Framework NuGet package. Clients should avoid referencing +any particular data access library and instead invoke a service +for retrieving and saving entities to a database. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5, Windows Phone 8 and higher, +or Windows Store Apps. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj new file mode 100644 index 00000000..cfe8dc4c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -0,0 +1,70 @@ + + + + + 10.0 + Debug + AnyCPU + {462735A3-0231-4A26-B64D-278DC2DBCDA9} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + Profile259 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + ..\packages\Newtonsoft.Json.6.0.8\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll + + + ..\packages\TrackableEntities.Client.2.5.2\lib\portable-net45+wp80+win8+wpa81\TrackableEntities.Client.dll + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Client.Portable/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/App.config new file mode 100644 index 00000000..ba698264 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/App.config @@ -0,0 +1,18 @@ + + + +
+ + + + + + + + + + + + + + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..f0c34024 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..9eaf6a35 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,123 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using System.Data.Entity.Spatial; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using TrackableEntities; + +<# + var typeConfigurations = edm.GetConfigurations(EntitySet, Model).OfType(); + + foreach (var typeConfiguration in typeConfigurations) + { +#> + <#= code.Attribute(typeConfiguration) #> +<# + } +#> + public partial class <#= code.Type(entityType) #> : ITrackable, IMergeable + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new List<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType(); + + foreach (var propertyConfiguration in propertyConfigurations) + { +#> + <#= code.Attribute(propertyConfiguration) #> +<# + } +#> + public <#= code.Type(property) #> <#= code.Property(property) #> { get; set; } +<# + } + + foreach (var navigationProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(navigationProperty) #> <#= code.Property(navigationProperty) #> { get; set; } +<# + } +#> + + [NotMapped] + public TrackingState TrackingState { get; set; } + + [NotMapped] + public ICollection ModifiedProperties { get; set; } + + [NotMapped] + public Guid EntityIdentifier { get; set; } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..463b468c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..a634a610 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,78 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System; +using System.Collections.Generic; +using TrackableEntities; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : ITrackable, IMergeable + { +<# + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new List<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> { get; set; } +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public List<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> { get; set; } +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> { get; set; } +<# + } + } +#> + + public TrackingState TrackingState { get; set; } + public ICollection ModifiedProperties { get; set; } + public Guid EntityIdentifier { get; set; } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableServiceEntities/MyTemplate.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate similarity index 80% rename from Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableServiceEntities/MyTemplate.vstemplate rename to Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate index 8825b8c1..103906f6 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableServiceEntities/MyTemplate.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -29,10 +29,8 @@ Mapping.tt - - - - packages.config + + AssemblyInfo.cs @@ -40,16 +38,17 @@ - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard - - - - + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7bb08530 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("60ec04a0-dd73-44d4-ac76-4e2d3c8604e3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj new file mode 100644 index 00000000..8918b70c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableService.Entities.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {8556C7C8-72A6-4857-BAFD-489E42A2A453} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + False + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + False + ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + False + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt new file mode 100644 index 00000000..743782fe --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt @@ -0,0 +1,24 @@ +Trackable Service Entities ReadMe + +NOTE: You can reverse engineer entities either using the Entity Framework +Power Tools or the Entity Framework 6.x Tools for Visual Studio. + +This project template functions as a Data Access Layer and can be +referenced either by a Repositories class library or directly by +an ASP.NET Web API or WCF project. + +Custom T4 templates are provided for reverse engineering a +database to generate CodeFirst classes with a DbContext-derived +class and mapping classes that use a fluent API with entities +that implement the ITrackable interface from the TrackingEntitites +NuGet packages. + +To get started, just right-click on the project produced by the +template, select Entity Framework, Reverse Engineer Code First. +Set the server name (for example, .\sqlexpress) and choose a +database. The tool will generate all the CodeFirst classes based +on the T4 templates located in the project. + +After running the tool, you will need to copy the connection string +from App.config into the web.config (or app.config) file of the +service host. diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Service.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/App.config new file mode 100644 index 00000000..c29f95ed --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/App.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..f0c34024 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..0153b28e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,157 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using System.Data.Entity.Spatial; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using TrackableEntities.Client; + +<# + var typeConfigurations = edm.GetConfigurations(EntitySet, Model).OfType(); + + foreach (var typeConfiguration in typeConfigurations) + { +#> + <#= code.Attribute(typeConfiguration) #> +<# + } +#> + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType(); + + foreach (var propertyConfiguration in propertyConfigurations) + { +#> + <#= code.Attribute(propertyConfiguration) #> +<# + } +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate new file mode 100644 index 00000000..1bcf9376 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -0,0 +1,55 @@ + + + Trackable Shared .NET 4.5 Entities Library + Class library with templates for reverse engineering trackable shared entitites using Entity Framework Code First. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Net45 + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.cs.t4 + EntityType.cs.t4 + + + Context.tt + Entity.tt + Mapping.tt + + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Net45.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..74c8ad0c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5ff1c008-557e-4be2-bd1c-b45b481ce1aa")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj new file mode 100644 index 00000000..639eb99c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {98F8C001-E6A2-4692-A2A1-8AE6E1D1EC62} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + ..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + True + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt new file mode 100644 index 00000000..af927807 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt @@ -0,0 +1,38 @@ +Trackable Service .NET 4.5 Shared Entities ReadMe + +NOTE: You can reverse engineer entities either using the Entity Framework +Power Tools or the Entity Framework 6.x Tools for Visual Studio. + +This project can be referenced by both client and service projects. +This project template functions as a Data Access Layer and can be +referenced either by a Repositories class library or directly by +an ASP.NET Web API or WCF project. + +Custom T4 templates are provided for reverse engineering a +database to generate Code First classes with fluent API and entities +that implement the ITrackable interface from the TrackingEntitites +NuGet packages. + +To get started, just right-click on the project produced by the +template, select Add New Item, Data, ADO.NET Entity Data Model. +Select or create a data connection. The tool will generate Code First +entities based on the T4 templates located in the project. + +After running the tool, you will need to copy the connection string +from App.config into the web.config (or app.config) file of the +service host. + +You can also use the EF 6.x Tools for Visual Studio to generate entities +using either "Code First from Database" or "EF Designer from Database." +With the Code First option, you may need to insert a partial DbContext +class with a partial ModelBuilding method, in order to add mappings for +one-to-one relations. For example: + +public partial class NorthwindSlim +{ + partial void ModelCreating(DbModelBuilder modelBuilder) + { + modelBuilder.Entity() + .HasKey(e => e.CustomerId); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/App.config new file mode 100644 index 00000000..1b997731 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..461c291f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(property) #>); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate new file mode 100644 index 00000000..ed8272dc --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -0,0 +1,48 @@ + + + Trackable Shared Portable Entities Library + Portable class library with templates for reverse engineering trackable shared entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Portable + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.tt + Entity.tt + Mapping.tt + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Portable.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj new file mode 100644 index 00000000..ebc23d17 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -0,0 +1,71 @@ + + + + + 11.0 + Debug + AnyCPU + {67A4CFEC-9AA5-4DE3-B694-71C3B4F6C975} + Library + Properties + $safeprojectname$ + $safeprojectname$ + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile259 + v4.5 + ..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + ..\packages\Newtonsoft.Json.6.0.8\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll + + + ..\packages\TrackableEntities.Client.2.5.2\lib\portable-net45+wp80+win8+wpa81\TrackableEntities.Client.dll + + + ..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt new file mode 100644 index 00000000..9bed57b5 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt @@ -0,0 +1,27 @@ +Trackable Service Portable Shared Entities ReadMe + +WARNING: Json.Net has a compatibility issue which causes an error +in a Web API application when using entities in a portable class +library: json.net Method not found Newtonsoft.Json.Serialization. +DefaultContractResolver SET_IgnoreSerializableAttribute. For this +reason, you should avoid sharing portable entities and instead +share .NET 4.5 entities. + +NOTE: You should first install the Entity Framework Power Tools. +Support for EF 6.x Tools for Visual Studio has be added, but it can +only be used to generate client entities using a .NET 4.5 class +library project, from which you can copy or link model classes +to the Client.Entities project. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable entities, +which can be references both by client and service projects. + +IMPORTANT: After running the tool, you will need to move the context +and mapping classes to a .NET 4.5 class library that includes an +Entity Framework 6.x NuGet package and can function as a Data Access Layer. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5 and higher, Windows Phone +8 and higher, or Windows Store Apps. \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/Entities.Shared.Portable/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/TrackableEntities.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/TrackableEntities.vstemplate new file mode 100644 index 00000000..08e4cb1d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/TrackableEntities.vstemplate @@ -0,0 +1,42 @@ + + + Trackable Entities Class Library + Class library with templates for reverse engineering trackable entitites. + CSharp + Trackable + 1000 + true + TrackableClassLibrary + true + Enabled + __TemplateIcon.png + __PreviewImage.png + true + true + 4.0 + 1 + + + + + Entities.Service.Net45\Entities.Service.Net45.vstemplate + + + Entities.Client.Portable\Entities.Client.Portable.vstemplate + + + Entities.Client.Net45\Entities.Client.Net45.vstemplate + + + Entities.Shared.Portable\Entities.Shared.Portable.vstemplate + + + Entities.Shared.Net45\Entities.Shared.Net45.vstemplate + + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableEntities/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/App.config new file mode 100644 index 00000000..3cce94ca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/App.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj new file mode 100644 index 00000000..06f75f1e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.csproj @@ -0,0 +1,85 @@ + + + + + Debug + AnyCPU + {4190E620-E7EA-4339-AA25-87CE6227CE6B} + Exe + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\..\ + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + False + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + {d8e5c866-6c5a-4acf-aee4-289e7412471f} + $saferootprojectname$.$cliententitiestemplate$ + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate index d8537e6d..9c7d7ea3 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/ConsoleClient.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config IExampleService.cs Program.cs @@ -33,10 +32,9 @@ - - - - + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/IExampleService.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/IExampleService.cs new file mode 100644 index 00000000..5fed77f9 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/IExampleService.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.Threading.Tasks; +//using $saferootprojectname$.Entities.Models; + +// Use this example as a guide for copying the service contract from Service.Core +// after adding a Trackable WCF Service Type. + +/* +namespace $safeprojectname$ +{ + [ServiceContract(Namespace = "urn:trackable-entities:service")] + public interface IExampleService + { + [OperationContract(Name = "GetProducts")] + Task> GetProductsAsync(); + + [OperationContract(Name = "GetProduct")] + Task GetProductAsync(int id); + + [OperationContract(Name = "UpdateProduct")] + Task UpdateProductAsync(Product entity); + + [OperationContract(Name = "CreateProduct")] + Task CreateProductAsync(Product entity); + + [OperationContract(Name = "DeleteProduct")] + Task DeleteProductAsync(int id); + } +} +*/ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/Program.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/Program.cs new file mode 100644 index 00000000..333fe58f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/Program.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.ServiceModel; +using TrackableEntities.Client; +//using $saferootprojectname$.Entities.Models; + +// This is an example which retrieves customers and orders from the Northwind +// sample database. You should alter the code based on your own database schema. + +namespace $safeprojectname$ +{ + class Program + { + static void Main(string[] args) + { + /* // Main method + + Console.WriteLine("Press Enter to start"); + Console.ReadLine(); + + ICustomerService customerService = new ChannelFactory("customerService").CreateChannel(); + IOrderService orderService = new ChannelFactory("orderService").CreateChannel(); + + using ((IDisposable)customerService) + using ((IDisposable)orderService) + { + try + { + // Get customers + Console.WriteLine("Customers:"); + IEnumerable customers = customerService.GetCustomersAsync().Result; + if (customers == null) return; + foreach (var c in customers) + PrintCustomer(c); + + // Get orders for a customer + Console.WriteLine("\nGet customer orders {CustomerId}:"); + string customerId = Console.ReadLine(); + if (!customers.Any(c => string.Equals(c.CustomerId, customerId, StringComparison.OrdinalIgnoreCase))) + { + Console.WriteLine("Invalid customer id: {0}", customerId.ToUpper()); + return; + } + IEnumerable orders = orderService.GetCustomerOrdersAsync(customerId).Result; + foreach (var o in orders) + PrintOrder(o); + + // Get an order + Console.WriteLine("\nGet an order {OrderId}:"); + int orderId = int.Parse(Console.ReadLine()); + if (!orders.Any(o => o.OrderId == orderId)) + { + Console.WriteLine("Invalid order id: {0}", orderId); + return; + } + Order order = orderService.GetOrderAsync(orderId).Result; + PrintOrderWithDetails(order); + + // Create a new order + Console.WriteLine("\nPress Enter to create a new order for {0}", + customerId.ToUpper()); + Console.ReadLine(); + + var newOrder = new Order + { + CustomerId = customerId, + OrderDate = DateTime.Today, + ShippedDate = DateTime.Today.AddDays(1), + OrderDetails = new ChangeTrackingCollection + { + new OrderDetail { ProductId = 1, Quantity = 5, UnitPrice = 10 }, + new OrderDetail { ProductId = 2, Quantity = 10, UnitPrice = 20 }, + new OrderDetail { ProductId = 4, Quantity = 40, UnitPrice = 40 } + } + }; + var createdOrder = orderService.CreateOrderAsync(newOrder).Result; + PrintOrderWithDetails(createdOrder); + + // Update the order + Console.WriteLine("\nPress Enter to update order details"); + Console.ReadLine(); + + // Start change-tracking the order + var changeTracker = new ChangeTrackingCollection(createdOrder); + + // Modify order details + createdOrder.OrderDetails[0].UnitPrice++; + createdOrder.OrderDetails.RemoveAt(1); + createdOrder.OrderDetails.Add(new OrderDetail + { + OrderId = createdOrder.OrderId, + ProductId = 3, + Quantity = 15, + UnitPrice = 30 + }); + + // Submit changes + Order changedOrder = changeTracker.GetChanges().SingleOrDefault(); + Order updatedOrder = orderService.UpdateOrderAsync(changedOrder).Result; + + // Merge changes + changeTracker.MergeChanges(updatedOrder); + Console.WriteLine("Updated order:"); + PrintOrderWithDetails(createdOrder); + + // Delete the order + Console.WriteLine("\nPress Enter to delete the order"); + Console.ReadLine(); + bool deleted = orderService.DeleteOrderAsync(createdOrder.OrderId).Result; + + // Verify order was deleted + Order deletedOrder = orderService.GetOrderAsync(createdOrder.OrderId).Result; + Console.WriteLine(deleted && deletedOrder == null + ? "Order was successfully deleted" + : "Order was not deleted"); + } + catch (AggregateException aggEx) + { + var baseEx = aggEx.Flatten().GetBaseException(); + var innerExMsg = baseEx.InnerException != null ? "\r\n" + baseEx.InnerException.Message : ""; + Console.WriteLine(baseEx.Message + innerExMsg); + } + finally + { + var channel = customerService as IClientChannel; + if (channel != null && channel.State == CommunicationState.Faulted) + { + channel.Abort(); + } + } + + // Keep console open + Console.WriteLine("Press any key to exit"); + Console.ReadKey(true); + } + */ + } + + /* // Helper methods + + private static void PrintCustomer(Customer c) + { + Console.WriteLine("{0} {1} {2} {3}", + c.CustomerId, + c.CompanyName, + c.ContactName, + c.City); + } + + private static void PrintOrder(Order o) + { + Console.WriteLine("{0} {1}", + o.OrderId, + o.OrderDate.GetValueOrDefault().ToShortDateString()); + } + + private static void PrintOrderWithDetails(Order o) + { + Console.WriteLine("{0} {1}", + o.OrderId, + o.OrderDate.GetValueOrDefault().ToShortDateString()); + foreach (var od in o.OrderDetails) + { + Console.WriteLine("\t{0} {1} {2} {3}", + od.OrderDetailId, + od.Product.ProductName, + od.Quantity, + od.UnitPrice.ToString("c")); + } + } + */ + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..549a9450 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4f22eea5-7222-4a89-b55d-266d91bfb3d4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/TrackableConsoleClient.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/TrackableConsoleClient.ReadMe.txt new file mode 100644 index 00000000..b6ce1a1e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/TrackableConsoleClient.ReadMe.txt @@ -0,0 +1,23 @@ +Trackable Console WCF Client ReadMe + +This is a client Console application which uses a channel +factory to communicate with a WCF service. It references the +Client.Entities project uses the the TrackableEntities.Client +NuGet package to perform change-tracking on the client without +any knowledge of how the service will persist changes. + +The client project includes copies of the service contracts. +Operation contract names must match the service operation +names, although the method names each have the Async suffix. +In a console client, we simply get the task Result property +so that the main thread waits for the operation to complete. +In a GUI client, we would instead use async/await. + +To start change-tracking, a ChangeTrackingCollection is +created, passing one or more entities to the constructor. +Inserts, updates and deletes are automatically tracked. +Calling GetChanges returns only the items that have been +modified, which can then be passes to the service Update +operation, where all changes are persisted in one round trip +and in a single transaction. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/ConsoleClient/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/App.config new file mode 100644 index 00000000..99ddf3e0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..6c2f6138 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,136 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using TrackableEntities.Client; + + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate new file mode 100644 index 00000000..47868eb6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -0,0 +1,50 @@ + + + Trackable Client .NET 4.5 Entities Library + .NET 4.5 class library with templates for reverse engineering trackable client entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Client.Entities.Net45 + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.cs.t4 + EntityType.cs.t4 + + + Entity.tt + + + + + AssemblyInfo.cs + + TrackableClientEntities.Net45.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8a0fde69 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("edd34409-9d76-42f0-99c7-b504f21d6513")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt new file mode 100644 index 00000000..3513fd50 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt @@ -0,0 +1,25 @@ +Trackable Client .NET 4.5 Entities ReadMe + +NOTE: Because these client entities are targeted to .NET 4.5 or greater, +you can use either the Entity Framewor Power Tools or the EF 6.x Tools +for Visual Studio to generate entities. + +This project template references the TrackableEntities.Client NuGet +package, which contains a ChangeTrackingCollection that sets the +TrackingState and ModifiedProperties properties on each entity. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable client entities. + +IMPORTANT: After running the tool, be sure to delete the Mapping folder +and classes, and also the DbContext-derived class that was generated. +These must be removed because the project will not reference the +Entity Framework NuGet package. Clients should avoid referencing +any particular data access library and instead invoke a service +for retrieving and saving entities to a database. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5 and higher, Windows Phone +8 and higher, or Windows Store Apps. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj new file mode 100644 index 00000000..9f1bc57c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {953B79E1-B6B4-4E15-B32D-AB6A28D2510E} + Library + Properties + $saferootprojectname$.Entities + $safeprojectname$ + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + True + + + + + + + + + + + + + + False + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/App.config new file mode 100644 index 00000000..1b997731 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..632d0bca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,136 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using TrackableEntities.Client; + + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(() => <#= code.Property(property) #>); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Property(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Property(navProperty) #>); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..461c291f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(property) #>); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Client.Entities/Client.Entities.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate similarity index 73% rename from Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Client.Entities/Client.Entities.vstemplate rename to Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate index 92e29f6e..bea0396e 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Client.Entities/Client.Entities.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -1,7 +1,7 @@ - Trackable Client Entities - Portable class library with templates for reverse engineering trackable client entitites. + Trackable Client Portable Entities Library + Portable class library with templates for reverse engineering trackable client entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. CSharp @@ -13,9 +13,10 @@ true __TemplateIcon.png __PreviewImage.png + 1 - + App.config @@ -27,7 +28,6 @@ - packages.config AssemblyInfo.cs @@ -36,14 +36,15 @@ TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e - TrackableEntities.TemplateWizard.ChildWizard + TrackableEntities.TemplateWizard.EntitiesChildWizard - - - + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt new file mode 100644 index 00000000..c958c6ca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt @@ -0,0 +1,27 @@ +Trackable Client Entities ReadMe + +NOTE: You should first install the Entity Framework Power Tools. +Support for EF 6.1 Tools for Visual Studio has be added, but it can +only be used to generate client entities using a .NET 4.5 class +library project, from which you can copy or link model classes +to the Client.Entities project. + +This project template references the TrackableEntities.Client NuGet +package, which contains a ChangeTrackingCollection that sets the +TrackingState and ModifiedProperties properties on each entity. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable client entities. + +IMPORTANT: After running the tool, be sure to delete the Mapping folder +and classes, and also the DbContext-derived class that was generated. +These must be removed because the project will not reference the +Entity Framework NuGet package. Clients should avoid referencing +any particular data access library and instead invoke a service +for retrieving and saving entities to a database. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5, Windows Phone 8 and higher, +or Windows Store Apps. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj new file mode 100644 index 00000000..3bbe1bd1 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -0,0 +1,70 @@ + + + + + 10.0 + Debug + AnyCPU + {462735A3-0231-4A26-B64D-278DC2DBCDA9} + Library + Properties + $saferootprojectname$.Entities + $safeprojectname$ + v4.5 + Profile259 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\portable-net45+wp80+win8+wpa81\TrackableEntities.Client.dll + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Client.Portable/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/App.config new file mode 100644 index 00000000..ba698264 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/App.config @@ -0,0 +1,18 @@ + + + +
+ + + + + + + + + + + + + + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..0153b28e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,157 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using System.Data.Entity.Spatial; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using TrackableEntities.Client; + +<# + var typeConfigurations = edm.GetConfigurations(EntitySet, Model).OfType(); + + foreach (var typeConfiguration in typeConfigurations) + { +#> + <#= code.Attribute(typeConfiguration) #> +<# + } +#> + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType(); + + foreach (var propertyConfiguration in propertyConfigurations) + { +#> + <#= code.Attribute(propertyConfiguration) #> +<# + } +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Entities/Service.Entities.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate similarity index 70% rename from Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Entities/Service.Entities.vstemplate rename to Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate index 7516d286..23cf4d46 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Entities/Service.Entities.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -1,7 +1,7 @@ - Trackable Service Entities - Class library with templates for reverse engineering trackable service entitites and EF DbContext. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + Trackable Service Entities Library + Class library with templates for reverse engineering trackable service entitites using Entity Framework Code First. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. CSharp @@ -13,9 +13,10 @@ true __TemplateIcon.png __PreviewImage.png + 1 - + App.config @@ -28,10 +29,8 @@ Mapping.tt - - - - packages.config + + AssemblyInfo.cs @@ -40,15 +39,17 @@ TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e - TrackableEntities.TemplateWizard.ChildWizard + TrackableEntities.TemplateWizard.EntitiesChildWizard - - - - + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7bb08530 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("60ec04a0-dd73-44d4-ac76-4e2d3c8604e3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj new file mode 100644 index 00000000..6bf9be18 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableService.Entities.csproj @@ -0,0 +1,97 @@ + + + + + Debug + AnyCPU + {8556C7C8-72A6-4857-BAFD-489E42A2A453} + Library + Properties + $saferootprojectname$.Entities + $safeprojectname$ + v4.5.1 + 512 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + True + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt new file mode 100644 index 00000000..743782fe --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt @@ -0,0 +1,24 @@ +Trackable Service Entities ReadMe + +NOTE: You can reverse engineer entities either using the Entity Framework +Power Tools or the Entity Framework 6.x Tools for Visual Studio. + +This project template functions as a Data Access Layer and can be +referenced either by a Repositories class library or directly by +an ASP.NET Web API or WCF project. + +Custom T4 templates are provided for reverse engineering a +database to generate CodeFirst classes with a DbContext-derived +class and mapping classes that use a fluent API with entities +that implement the ITrackable interface from the TrackingEntitites +NuGet packages. + +To get started, just right-click on the project produced by the +template, select Entity Framework, Reverse Engineer Code First. +Set the server name (for example, .\sqlexpress) and choose a +database. The tool will generate all the CodeFirst classes based +on the T4 templates located in the project. + +After running the tool, you will need to copy the connection string +from App.config into the web.config (or app.config) file of the +service host. diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Service.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/App.config new file mode 100644 index 00000000..c29f95ed --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/App.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..f0c34024 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..0153b28e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,157 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using System.Data.Entity.Spatial; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using TrackableEntities.Client; + +<# + var typeConfigurations = edm.GetConfigurations(EntitySet, Model).OfType(); + + foreach (var typeConfiguration in typeConfigurations) + { +#> + <#= code.Attribute(typeConfiguration) #> +<# + } +#> + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType(); + + foreach (var propertyConfiguration in propertyConfigurations) + { +#> + <#= code.Attribute(propertyConfiguration) #> +<# + } +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate new file mode 100644 index 00000000..1bcf9376 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -0,0 +1,55 @@ + + + Trackable Shared .NET 4.5 Entities Library + Class library with templates for reverse engineering trackable shared entitites using Entity Framework Code First. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Net45 + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.cs.t4 + EntityType.cs.t4 + + + Context.tt + Entity.tt + Mapping.tt + + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Net45.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..74c8ad0c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5ff1c008-557e-4be2-bd1c-b45b481ce1aa")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj new file mode 100644 index 00000000..65638fec --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {98F8C001-E6A2-4692-A2A1-8AE6E1D1EC62} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + True + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt new file mode 100644 index 00000000..af927807 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt @@ -0,0 +1,38 @@ +Trackable Service .NET 4.5 Shared Entities ReadMe + +NOTE: You can reverse engineer entities either using the Entity Framework +Power Tools or the Entity Framework 6.x Tools for Visual Studio. + +This project can be referenced by both client and service projects. +This project template functions as a Data Access Layer and can be +referenced either by a Repositories class library or directly by +an ASP.NET Web API or WCF project. + +Custom T4 templates are provided for reverse engineering a +database to generate Code First classes with fluent API and entities +that implement the ITrackable interface from the TrackingEntitites +NuGet packages. + +To get started, just right-click on the project produced by the +template, select Add New Item, Data, ADO.NET Entity Data Model. +Select or create a data connection. The tool will generate Code First +entities based on the T4 templates located in the project. + +After running the tool, you will need to copy the connection string +from App.config into the web.config (or app.config) file of the +service host. + +You can also use the EF 6.x Tools for Visual Studio to generate entities +using either "Code First from Database" or "EF Designer from Database." +With the Code First option, you may need to insert a partial DbContext +class with a partial ModelBuilding method, in order to add mappings for +one-to-one relations. For example: + +public partial class NorthwindSlim +{ + partial void ModelCreating(DbModelBuilder modelBuilder) + { + modelBuilder.Entity() + .HasKey(e => e.CustomerId); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/App.config new file mode 100644 index 00000000..2fb423e8 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/App.config @@ -0,0 +1,13 @@ + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate new file mode 100644 index 00000000..86572a63 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate @@ -0,0 +1,44 @@ + + + Trackable Shared Portable Data Library + Data class library for use with shared portable trackable entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Portable.Data + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Portable.Data.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj new file mode 100644 index 00000000..c7965d13 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj @@ -0,0 +1,87 @@ + + + + + Debug + AnyCPU + {0D8FD15B-8ED1-453E-B416-CB538A3B5E5E} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + 512 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + True + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + {82ef229a-122c-4c25-bb67-82eefc4358fc} + $saferootprojectname$.$serviceentitiestemplate$ + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableSharedEntities.Portable.Data.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableSharedEntities.Portable.Data.ReadMe.txt new file mode 100644 index 00000000..aebdec76 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/TrackableSharedEntities.Portable.Data.ReadMe.txt @@ -0,0 +1,9 @@ +Trackable Service Data for Portable Shared Entities ReadMe + +The purpose of this project is to contain the DataContext +and optional mapping classes. These should be generated +for the Shared Portable Entities project and then moved +to this project. + +IMPORTANT: You will need to add a reference to this project +from the Core (WCF) or WebApi project. \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable.Data/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/App.config new file mode 100644 index 00000000..1b997731 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..461c291f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(property) #>); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate new file mode 100644 index 00000000..ed8272dc --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -0,0 +1,48 @@ + + + Trackable Shared Portable Entities Library + Portable class library with templates for reverse engineering trackable shared entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Portable + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.tt + Entity.tt + Mapping.tt + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Portable.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj new file mode 100644 index 00000000..739c9900 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -0,0 +1,71 @@ + + + + + 11.0 + Debug + AnyCPU + {67A4CFEC-9AA5-4DE3-B694-71C3B4F6C975} + Library + Properties + $safeprojectname$ + $safeprojectname$ + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile259 + v4.5 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\portable-net45+wp80+win8+wpa81\TrackableEntities.Client.dll + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt new file mode 100644 index 00000000..b6db4556 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt @@ -0,0 +1,20 @@ +Trackable Service Portable Shared Entities ReadMe + +NOTE: You should first install the Entity Framework Power Tools. +Support for EF 6.x Tools for Visual Studio has be added, but it can +only be used to generate client entities using a .NET 4.5 class +library project, from which you can copy or link model classes +to the Client.Entities project. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable entities, +which can be references both by client and service projects. + +IMPORTANT: After running the tool, you will need to move the context +and mapping classes to a .NET 4.5 class library that includes an +Entity Framework 6.x NuGet package and can function as a Data Access Layer. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5 and higher, Windows Phone +8 and higher, or Windows Store Apps. \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Entities.Shared.Portable/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/App.config new file mode 100644 index 00000000..412401e9 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/App.config @@ -0,0 +1,16 @@ + + + +
+ + + + + + + + + + + + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..162e9d9d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WcfSample.Service")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WcfSample.Service")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b1c1cb16-dc7b-4f35-b999-11d5b0e3084c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj new file mode 100644 index 00000000..3a4abe16 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.csproj @@ -0,0 +1,98 @@ + + + + + Debug + AnyCPU + {EBF8D59D-981D-4917-A175-BE50F60B7DC6} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\..\ + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + False + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + ..\..\packages\WcfSerializationHelper.1.0.0\lib\net45\WcfSerializationHelper.dll + + + + + + + + + + + {82ef229a-122c-4c25-bb67-82eefc4358fc} + $saferootprojectname$.$serviceentitiestemplate$ + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate index 0b729cf8..f12010f5 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/Service.Core.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config AssemblyInfo.cs @@ -31,10 +30,12 @@ - - - - + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/TrackableWcfServiceCore.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/TrackableWcfServiceCore.ReadMe.txt new file mode 100644 index 00000000..144ba3a2 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/TrackableWcfServiceCore.ReadMe.txt @@ -0,0 +1,25 @@ +Trackable WCF Service Core ReadMe + +This project consists of a class library containing WCF service +contracts and types. + +To get started, right-click on the project, select Add, New Item. +Then select the Trackable category and choose "Trackable WCF +Service Type". + +Enter the following information in the template wizard: +- Service Entities Project Namespace: the name of the + *.Service.Entities project in the solution. For example, + MySolution.Service.Entities +- Entity Name: name of the entity class for which you + want to create a service with CRUD operations. For + example, Product +- Entity Set Name: name of the entity set property + on the DbContext class. For example, Products +- DbContext Name: name of the DbContext class in the + Service.Entities project. For example, NorthwindContext + +After generating a service type for an entity using this item template, +copy fully qualified service type name (namespace and class name), +and past it into the *Service.svc file in the Web project. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Core/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/ExampleService.svc b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/ExampleService.svc new file mode 100644 index 00000000..f63d0399 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/ExampleService.svc @@ -0,0 +1 @@ +<%@ ServiceHost Service="$saferootprojectname$.Service.Core.ExampleService" %> \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7ed75456 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4d8f8aa2-c42f-4c67-a964-262464e896c5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj new file mode 100644 index 00000000..979b61f0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.csproj @@ -0,0 +1,131 @@ + + + + + Debug + AnyCPU + + + 2.0 + {88D3BAEA-83A7-43DB-A99C-AE7BB0760535} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + true + + + + + ..\..\ + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Web.config + + + Web.config + + + + + {ebf8d59d-981d-4917-a175-be50f60b7dc6} + $saferootprojectname$.Service.Core + + + {82ef229a-122c-4c25-bb67-82eefc4358fc} + $saferootprojectname$.$serviceentitiestemplate$ + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + / + False + False + + + False + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate index 5c4b342f..635be84a 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Service.Web.vstemplate @@ -18,7 +18,6 @@ ExampleService.svc - packages.config AssemblyInfo.cs @@ -35,8 +34,8 @@ - - + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/TrackableWcfServiceWeb.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/TrackableWcfServiceWeb.ReadMe.txt new file mode 100644 index 00000000..e174bfd0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/TrackableWcfServiceWeb.ReadMe.txt @@ -0,0 +1,21 @@ +Trackable WCF Service Web ReadMe + +This is a web host for the Service Core project. + +It should contain more or more *Service.svc files. +Make sure the ServiceHost directive in each svc file +has a Service attribute that matches the fully qualified +service type name in the Service.Core project. + +Be sure to copy the database connection string from the +App.config file in the Service.Entities project into the +Web.config file of the Service.Web project. + +Test the service configuration by right clicking on the +.svc file and selecting View in Browser. The service +metadata page should be shown. + +Also make sure to copy the port number from the Web project +properties page into the endpoints in the App.config file +in the client project. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.Debug.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.Debug.config new file mode 100644 index 00000000..2e302f9f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.Release.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.Release.config new file mode 100644 index 00000000..c3584446 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.config new file mode 100644 index 00000000..0b2f8761 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/Web.config @@ -0,0 +1,41 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Service.Web/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/TrackableWcfService.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/TrackableWcfService.vstemplate new file mode 100644 index 00000000..a22a818a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/TrackableWcfService.vstemplate @@ -0,0 +1,54 @@ + + + Trackable WCF Service Application + Solution containing WCF service, web host, trackable entities and client projects. + CSharp + Trackable + 1000 + true + TrackableWcfService + true + Enabled + __TemplateIcon.png + __PreviewImage.png + true + true + 4.0 + 1 + + + + + Service.Core\Service.Core.vstemplate + + + Service.Web\Service.Web.vstemplate + + + ConsoleClient\ConsoleClient.vstemplate + + + Entities.Client.Net45\Entities.Client.Net45.vstemplate + + + Entities.Client.Portable\Entities.Client.Portable.vstemplate + + + Entities.Service.Net45\Entities.Service.Net45.vstemplate + + + Entities.Shared.Net45\Entities.Shared.Net45.vstemplate + + + Entities.Shared.Portable\Entities.Shared.Portable.vstemplate + + + Entities.Shared.Portable.Data\Entities.Shared.Portable.Data.vstemplate + + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.RootWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/App.config new file mode 100644 index 00000000..9c05822f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj new file mode 100644 index 00000000..c1a9a97a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.csproj @@ -0,0 +1,87 @@ + + + + + Debug + AnyCPU + {6558B314-B755-4A88-A518-3E97275A696C} + Exe + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + true + ..\..\ + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + False + ..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.2\lib\net45\System.Net.Http.Formatting.dll + + + + + + + + + False + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + {d8e5c866-6c5a-4acf-aee4-289e7412471f} + $saferootprojectname$.$cliententitiestemplate$ + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate index 44dee530..f93535ff 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/ConsoleClient.vstemplate @@ -17,7 +17,6 @@ App.config - packages.config Program.cs AssemblyInfo.cs @@ -33,9 +32,9 @@ - - - + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/Program.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/Program.cs new file mode 100644 index 00000000..beba44e9 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/Program.cs @@ -0,0 +1,219 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using TrackableEntities.Client; +//using $saferootprojectname$.$cliententitiestemplate$; + +// This is an example which retrieves customers and orders from the Northwind +// sample database. You should alter the code based on your own database schema. + +namespace $safeprojectname$ +{ + class Program + { + static void Main(string[] args) + { + /* // Main method + + Console.WriteLine("Press Enter to start"); + Console.ReadLine(); + + // Create http client + // TODO: Replace with port from web project + const string serviceBaseAddress = "http://localhost:" + "12345" + "/"; + var client = new HttpClient { BaseAddress = new Uri(serviceBaseAddress) }; + + // Get customers + Console.WriteLine("Customers:"); + IEnumerable customers = GetCustomers(client); + if (customers == null) return; + foreach (var c in customers) + PrintCustomer(c); + + // Get orders for a customer + Console.WriteLine("\nGet customer orders {CustomerId}:"); + string customerId = Console.ReadLine(); + if (!customers.Any(c => string.Equals(c.CustomerId, customerId, StringComparison.OrdinalIgnoreCase))) + { + Console.WriteLine("Invalid customer id: {0}", customerId.ToUpper()); + return; + } + IEnumerable orders = GetCustomerOrders(client, customerId); + foreach (var o in orders) + PrintOrder(o); + + // Get an order + Console.WriteLine("\nGet an order {OrderId}:"); + int orderId = int.Parse(Console.ReadLine()); + if (!orders.Any(o => o.OrderId == orderId)) + { + Console.WriteLine("Invalid order id: {0}", orderId); + return; + } + Order order = GetOrder(client, orderId); + PrintOrderWithDetails(order); + + // Create a new order + Console.WriteLine("\nPress Enter to create a new order for {0}", + customerId.ToUpper()); + Console.ReadLine(); + + var newOrder = new Order + { + CustomerId = customerId, + OrderDate = DateTime.Today, + ShippedDate = DateTime.Today.AddDays(1), + OrderDetails = new ChangeTrackingCollection + { + new OrderDetail { ProductId = 1, Quantity = 5, UnitPrice = 10 }, + new OrderDetail { ProductId = 2, Quantity = 10, UnitPrice = 20 }, + new OrderDetail { ProductId = 4, Quantity = 40, UnitPrice = 40 } + } + }; + var createdOrder = CreateOrder(client, newOrder); + PrintOrderWithDetails(createdOrder); + + // Update the order + Console.WriteLine("\nPress Enter to update order details"); + Console.ReadLine(); + + // Start change-tracking the order + var changeTracker = new ChangeTrackingCollection(createdOrder); + + // Modify order details + createdOrder.OrderDetails[0].UnitPrice++; + createdOrder.OrderDetails.RemoveAt(1); + createdOrder.OrderDetails.Add(new OrderDetail + { + OrderId = createdOrder.OrderId, + ProductId = 3, + Quantity = 15, + UnitPrice = 30 + }); + + // Submit changes + var changedOrder = changeTracker.GetChanges().SingleOrDefault(); + var updatedOrder = UpdateOrder(client, changedOrder); + + // Merge changes + changeTracker.MergeChanges(updatedOrder); + Console.WriteLine("Updated order:"); + PrintOrderWithDetails(createdOrder); + + // Delete the order + Console.WriteLine("\nPress Enter to delete the order"); + Console.ReadLine(); + DeleteOrder(client, createdOrder); + + // Verify order was deleted + var deleted = VerifyOrderDeleted(client, createdOrder.OrderId); + Console.WriteLine(deleted ? + "Order was successfully deleted" : + "Order was not deleted"); + + // Keep console open + Console.WriteLine("Press any key to exit"); + Console.ReadKey(true); + */ + } + + /* // Service methods + + private static IEnumerable GetCustomers(HttpClient client) + { + const string request = "api/Customer"; + var response = client.GetAsync(request).Result; + response.EnsureSuccessStatusCode(); + var result = response.Content.ReadAsAsync>().Result; + return result; + } + + private static IEnumerable GetCustomerOrders + (HttpClient client, string customerId) + { + string request = "api/Order?customerId=" + customerId; + var response = client.GetAsync(request).Result; + response.EnsureSuccessStatusCode(); + var result = response.Content.ReadAsAsync>().Result; + return result; + } + + private static Order GetOrder(HttpClient client, int orderId) + { + string request = "api/Order/" + orderId; + var response = client.GetAsync(request).Result; + response.EnsureSuccessStatusCode(); + var result = response.Content.ReadAsAsync().Result; + return result; + } + + private static Order CreateOrder(HttpClient client, Order order) + { + string request = "api/Order"; + var response = client.PostAsJsonAsync(request, order).Result; + response.EnsureSuccessStatusCode(); + var result = response.Content.ReadAsAsync().Result; + return result; + } + + private static Order UpdateOrder(HttpClient client, Order order) + { + string request = "api/Order"; + var response = client.PutAsJsonAsync(request, order).Result; + response.EnsureSuccessStatusCode(); + var result = response.Content.ReadAsAsync().Result; + return result; + } + + private static void DeleteOrder(HttpClient client, Order order) + { + string request = "api/Order/" + order.OrderId; + var response = client.DeleteAsync(request); + response.Result.EnsureSuccessStatusCode(); + } + + private static bool VerifyOrderDeleted(HttpClient client, int orderId) + { + string request = "api/Order/" + orderId; + var response = client.GetAsync(request).Result; + if (response.IsSuccessStatusCode) return false; + return true; + } + */ + + /* // Helper methods + + private static void PrintCustomer(Customer c) + { + Console.WriteLine("{0} {1} {2} {3}", + c.CustomerId, + c.CompanyName, + c.ContactName, + c.City); + } + + private static void PrintOrder(Order o) + { + Console.WriteLine("{0} {1}", + o.OrderId, + o.OrderDate.GetValueOrDefault().ToShortDateString()); + } + + private static void PrintOrderWithDetails(Order o) + { + Console.WriteLine("{0} {1}", + o.OrderId, + o.OrderDate.GetValueOrDefault().ToShortDateString()); + foreach (var od in o.OrderDetails) + { + Console.WriteLine("\t{0} {1} {2} {3}", + od.OrderDetailId, + od.Product.ProductName, + od.Quantity, + od.UnitPrice.ToString("c")); + } + } + */ + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a4812a4b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e58aa0f1-cdc4-4a7b-af26-a53db67abb44")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/TrackableConsoleClient.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/TrackableConsoleClient.ReadMe.txt new file mode 100644 index 00000000..692fae27 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/ConsoleClient/TrackableConsoleClient.ReadMe.txt @@ -0,0 +1,16 @@ +Trackable Console Web API Client ReadMe + +This is a client Console application which uses HttpClient +to communicate with the Web API service. It references the +Client.Entities project uses the the TrackableEntities.Client +NuGet package to perform change-tracking on the client without +any knowledge of how the service will persist changes. + +To start change-tracking, a ChangeTrackingCollection is +created, passing one or more entities to the constructor. +Inserts, updates and deletes are automatically tracked. +Calling GetChanges returns only the items that have been +modified, which can then be passes to the service PUT +operation, where all changes are persisted in one round trip +and in a single transaction. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/App.config new file mode 100644 index 00000000..99ddf3e0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..6c2f6138 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,136 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using TrackableEntities.Client; + + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate new file mode 100644 index 00000000..47868eb6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Entities.Client.Net45.vstemplate @@ -0,0 +1,50 @@ + + + Trackable Client .NET 4.5 Entities Library + .NET 4.5 class library with templates for reverse engineering trackable client entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Client.Entities.Net45 + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.cs.t4 + EntityType.cs.t4 + + + Entity.tt + + + + + AssemblyInfo.cs + + TrackableClientEntities.Net45.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8a0fde69 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("edd34409-9d76-42f0-99c7-b504f21d6513")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt new file mode 100644 index 00000000..3513fd50 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableClientEntities.Net45.ReadMe.txt @@ -0,0 +1,25 @@ +Trackable Client .NET 4.5 Entities ReadMe + +NOTE: Because these client entities are targeted to .NET 4.5 or greater, +you can use either the Entity Framewor Power Tools or the EF 6.x Tools +for Visual Studio to generate entities. + +This project template references the TrackableEntities.Client NuGet +package, which contains a ChangeTrackingCollection that sets the +TrackingState and ModifiedProperties properties on each entity. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable client entities. + +IMPORTANT: After running the tool, be sure to delete the Mapping folder +and classes, and also the DbContext-derived class that was generated. +These must be removed because the project will not reference the +Entity Framework NuGet package. Clients should avoid referencing +any particular data access library and instead invoke a service +for retrieving and saving entities to a database. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5 and higher, Windows Phone +8 and higher, or Windows Store Apps. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj new file mode 100644 index 00000000..febe92ea --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/TrackableEntities.ClientTemplate.Net45.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {953B79E1-B6B4-4E15-B32D-AB6A28D2510E} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + True + + + + + + + + + + + + + + False + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/App.config new file mode 100644 index 00000000..1b997731 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..911d89c6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public virtual DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..632d0bca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,136 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using TrackableEntities.Client; + + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(() => <#= code.Property(property) #>); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Property(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Property(navProperty) #>); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..461c291f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(property) #>); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Client.Entities/Client.Entities.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate similarity index 73% rename from Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Client.Entities/Client.Entities.vstemplate rename to Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate index 92e29f6e..bea0396e 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWcfService/Client.Entities/Client.Entities.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Entities.Client.Portable.vstemplate @@ -1,7 +1,7 @@ - Trackable Client Entities - Portable class library with templates for reverse engineering trackable client entitites. + Trackable Client Portable Entities Library + Portable class library with templates for reverse engineering trackable client entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. CSharp @@ -13,9 +13,10 @@ true __TemplateIcon.png __PreviewImage.png + 1 - + App.config @@ -27,7 +28,6 @@ - packages.config AssemblyInfo.cs @@ -36,14 +36,15 @@ TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e - TrackableEntities.TemplateWizard.ChildWizard + TrackableEntities.TemplateWizard.EntitiesChildWizard - - - + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt new file mode 100644 index 00000000..c958c6ca --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableClientEntities.ReadMe.txt @@ -0,0 +1,27 @@ +Trackable Client Entities ReadMe + +NOTE: You should first install the Entity Framework Power Tools. +Support for EF 6.1 Tools for Visual Studio has be added, but it can +only be used to generate client entities using a .NET 4.5 class +library project, from which you can copy or link model classes +to the Client.Entities project. + +This project template references the TrackableEntities.Client NuGet +package, which contains a ChangeTrackingCollection that sets the +TrackingState and ModifiedProperties properties on each entity. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable client entities. + +IMPORTANT: After running the tool, be sure to delete the Mapping folder +and classes, and also the DbContext-derived class that was generated. +These must be removed because the project will not reference the +Entity Framework NuGet package. Clients should avoid referencing +any particular data access library and instead invoke a service +for retrieving and saving entities to a database. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5, Windows Phone 8 and higher, +or Windows Store Apps. + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj new file mode 100644 index 00000000..9ae26517 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/TrackableEntities.ClientTemplate.csproj @@ -0,0 +1,70 @@ + + + + + 10.0 + Debug + AnyCPU + {462735A3-0231-4A26-B64D-278DC2DBCDA9} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + Profile259 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\portable-net45+wp80+win8+wpa81\TrackableEntities.Client.dll + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Client.Portable/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/App.config new file mode 100644 index 00000000..ba698264 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/App.config @@ -0,0 +1,18 @@ + + + +
+ + + + + + + + + + + + + + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..f0c34024 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..9eaf6a35 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,123 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using System.Data.Entity.Spatial; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using TrackableEntities; + +<# + var typeConfigurations = edm.GetConfigurations(EntitySet, Model).OfType(); + + foreach (var typeConfiguration in typeConfigurations) + { +#> + <#= code.Attribute(typeConfiguration) #> +<# + } +#> + public partial class <#= code.Type(entityType) #> : ITrackable, IMergeable + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new List<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType(); + + foreach (var propertyConfiguration in propertyConfigurations) + { +#> + <#= code.Attribute(propertyConfiguration) #> +<# + } +#> + public <#= code.Type(property) #> <#= code.Property(property) #> { get; set; } +<# + } + + foreach (var navigationProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + +#> + public <#= code.Type(navigationProperty) #> <#= code.Property(navigationProperty) #> { get; set; } +<# + } +#> + + [NotMapped] + public TrackingState TrackingState { get; set; } + + [NotMapped] + public ICollection ModifiedProperties { get; set; } + + [NotMapped] + public Guid EntityIdentifier { get; set; } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..463b468c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..a634a610 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,78 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System; +using System.Collections.Generic; +using TrackableEntities; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : ITrackable, IMergeable + { +<# + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new List<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> { get; set; } +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public List<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> { get; set; } +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> { get; set; } +<# + } + } +#> + + public TrackingState TrackingState { get; set; } + public ICollection ModifiedProperties { get; set; } + public Guid EntityIdentifier { get; set; } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Service.Entities/Service.Entities.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate similarity index 71% rename from Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Service.Entities/Service.Entities.vstemplate rename to Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate index 13a46e88..103906f6 100644 --- a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Service.Entities/Service.Entities.vstemplate +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Entities.Service.Net45.vstemplate @@ -1,7 +1,7 @@ - Trackable Service Entities - Class library with templates for reverse engineering trackable service entitites and EF DbContext. + Trackable Service Entities Library + Class library with templates for reverse engineering trackable service entitites using Entity Framework Code First. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. CSharp @@ -13,9 +13,10 @@ true __TemplateIcon.png __PreviewImage.png + 1 - + App.config @@ -28,10 +29,8 @@ Mapping.tt - - - - packages.config + + AssemblyInfo.cs @@ -40,15 +39,16 @@ TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e - TrackableEntities.TemplateWizard.ChildWizard + TrackableEntities.TemplateWizard.EntitiesChildWizard - - - - + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7bb08530 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("60ec04a0-dd73-44d4-ac76-4e2d3c8604e3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj new file mode 100644 index 00000000..c5490494 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableService.Entities.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {8556C7C8-72A6-4857-BAFD-489E42A2A453} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + False + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + False + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt new file mode 100644 index 00000000..743782fe --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/TrackableServiceEntities.ReadMe.txt @@ -0,0 +1,24 @@ +Trackable Service Entities ReadMe + +NOTE: You can reverse engineer entities either using the Entity Framework +Power Tools or the Entity Framework 6.x Tools for Visual Studio. + +This project template functions as a Data Access Layer and can be +referenced either by a Repositories class library or directly by +an ASP.NET Web API or WCF project. + +Custom T4 templates are provided for reverse engineering a +database to generate CodeFirst classes with a DbContext-derived +class and mapping classes that use a fluent API with entities +that implement the ITrackable interface from the TrackingEntitites +NuGet packages. + +To get started, just right-click on the project produced by the +template, select Entity Framework, Reverse Engineer Code First. +Set the server name (for example, .\sqlexpress) and choose a +database. The tool will generate all the CodeFirst classes based +on the T4 templates located in the project. + +After running the tool, you will need to copy the connection string +from App.config into the web.config (or app.config) file of the +service host. diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Service.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/App.config new file mode 100644 index 00000000..c29f95ed --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/App.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 new file mode 100644 index 00000000..f0c34024 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/Context.cs.t4 @@ -0,0 +1,227 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<#@ parameter type="System.String" name="ContextClassName" #> +<#@ parameter type="System.String" name="ConnectionStringName" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + if (Namespace == null) + { + throw new ArgumentNullException("Namespace"); + } + + if (ContextClassName == null) + { + throw new ArgumentNullException("ContextClassName"); + } + + if (ConnectionStringName == null) + { + throw new ArgumentNullException("ConnectionStringName"); + } +#> +namespace <#= Namespace #> +{ + using System; + using System.Data.Entity; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + + public partial class <#= ContextClassName #> : DbContext + { + static <#= ContextClassName #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= ContextClassName #>>()); + } + + public <#= ContextClassName #>() + : base("name=<#= ConnectionStringName #>") + { + Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { +#> + public DbSet<<#= code.Type(entitySet.ElementType) #>> <#= code.Property(entitySet) #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + var anyConfiguration = false; + + foreach (var entitySet in Model.ConceptualModel.Container.EntitySets) + { + var typeConfigurations = edm.GetConfigurations(entitySet, Model).OfType() + .Where(c => !(c is IAttributeConfiguration || c is KeyConfiguration)); + + var firstTypeConfiguration = true; + foreach (var typeConfiguration in typeConfigurations) + { + if (firstTypeConfiguration) + { + firstTypeConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(typeConfiguration)); + } + + if (!firstTypeConfiguration) + { + WriteLine(";"); + } + + foreach (var property in entitySet.ElementType.Properties) + { + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType() + .Where(c => !(c is IAttributeConfiguration)); + + var firstPropertyConfiguration = true; + foreach (var propertyConfiguration in propertyConfigurations) + { + var columnConfiguration = propertyConfiguration as ColumnConfiguration; + if (columnConfiguration != null) + { + // Unset this since it is implied in the key configuration calls themselves + columnConfiguration.Order = null; + + if (columnConfiguration.Name == null && columnConfiguration.TypeName == null) + { + // Nothing left to configure + continue; + } + } + + if (firstPropertyConfiguration) + { + firstPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder.Entity<<#= code.Type(entitySet.ElementType) #>>() + .Property(e => e.<#= code.Property(property) #>) +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(propertyConfiguration)); + } + + if (!firstPropertyConfiguration) + { + WriteLine(";"); + } + } + + foreach (var navigationProperty in entitySet.ElementType.NavigationProperties) + { + // Only configure relationships from one end + if (navigationProperty.RelationshipType.RelationshipEndMembers.First() != navigationProperty.FromEndMember) + { + continue; + } + + bool isDefaultMultiplicity; + var navigationPropertyMultiplicityConfiguration = edm.GetMultiplicityConfiguration(navigationProperty, out isDefaultMultiplicity); + var navigationPropertyConfigurations = edm.GetConfigurations(navigationProperty, Model); + + var firstNavigationPropertyConfiguration = true; + foreach (var navigationPropertyConfiguration in navigationPropertyConfigurations) + { + if (firstNavigationPropertyConfiguration) + { + firstNavigationPropertyConfiguration = false; + + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } + +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration)#> +<# + } + else + { + WriteLine(string.Empty); + } + + Write(" " + code.MethodChain(navigationPropertyConfiguration)); + } + + if (!firstNavigationPropertyConfiguration) + { + WriteLine(";"); + } + else if (!isDefaultMultiplicity) + { + if (anyConfiguration) + { + WriteLine(string.Empty); + } + else + { + anyConfiguration = true; + } +#> + modelBuilder<#= code.MethodChain(navigationPropertyMultiplicityConfiguration) #>; +<# + } + } + } +#> + + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 new file mode 100644 index 00000000..0153b28e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/EFModelFromDatabase/EntityType.cs.t4 @@ -0,0 +1,157 @@ +<#@ template visibility="internal" linePragmas="false" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="Microsoft.Data.Entity.Design" #> +<#@ assembly name="EntityFramework" #> +<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="Microsoft.Data.Entity.Design.CodeGeneration" #> +<#@ parameter type="System.Data.Entity.Core.Metadata.Edm.EntitySet" name="EntitySet" #> +<#@ parameter type="System.Data.Entity.Infrastructure.DbModel" name="Model" #> +<#@ parameter type="System.String" name="Namespace" #> +<# + var code = new CSharpCodeHelper(); + var edm = new EdmHelper(code); + + if (EntitySet == null) + { + throw new ArgumentNullException("EntitySet"); + } + + if (Model == null) + { + throw new ArgumentNullException("Model"); + } + + var entityType = EntitySet.ElementType; +#> +namespace <#= Namespace #> +{ + using System; + using System.Collections.Generic; + using System.Data.Entity.Spatial; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using TrackableEntities.Client; + +<# + var typeConfigurations = edm.GetConfigurations(EntitySet, Model).OfType(); + + foreach (var typeConfiguration in typeConfigurations) + { +#> + <#= code.Attribute(typeConfiguration) #> +<# + } +#> + public partial class <#= code.Type(entityType) #> : EntityBase + { +<# + var collectionProperties = from p in entityType.NavigationProperties + where p.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + select p; + + if (collectionProperties.Any()) + { +#> + public <#= code.Type(entityType) #>() + { +<# + foreach (var collectionProperty in collectionProperties) + { +#> + <#= code.Property(collectionProperty) #> = new ChangeTrackingCollection<<#= code.Type(collectionProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + var first = true; + + foreach (var property in entityType.Properties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + var propertyConfigurations = edm.GetConfigurations(property, Model).OfType(); + + foreach (var propertyConfiguration in propertyConfigurations) + { +#> + <#= code.Attribute(propertyConfiguration) #> +<# + } +#> + public <#= code.Type(property) #> <#= code.Property(property) #> + { + get { return _<#= code.Property(property) #>; } + set + { + if (Equals(value, _<#= code.Property(property) #>)) return; + _<#= code.Property(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= code.Type(property) #> _<#= code.Property(property) #>; +<# + } + + foreach (var navProperty in entityType.NavigationProperties) + { + if (!first) + { + WriteLine(string.Empty); + } + else + { + first = false; + } + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Property(navProperty) #>; +<# + } + else + { +#> + + public <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> <#= code.Property(navProperty) #> + { + get { return _<#= code.Property(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Property(navProperty) #>)) return; + _<#= code.Property(navProperty) #> = value; + <#= code.Property(navProperty) #>ChangeTracker = _<#= code.Property(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Property(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Type(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Property(navProperty) #>; + private ChangeTrackingCollection<<#= code.Type(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Property(navProperty) #>ChangeTracker { get; set; } +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..c2e1a77d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate new file mode 100644 index 00000000..3f19f0fd --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Entities.Shared.Net45.vstemplate @@ -0,0 +1,55 @@ + + + Trackable Shared .NET 4.5 Entities Library + Class library with templates for reverse engineering trackable shared entitites using Entity Framework Code First. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Net45 + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.cs.t4 + EntityType.cs.t4 + + + Context.tt + Entity.tt + Mapping.tt + + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Net45.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..74c8ad0c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5ff1c008-557e-4be2-bd1c-b45b481ce1aa")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj new file mode 100644 index 00000000..65638fec --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableShared.Entities.Net45.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {98F8C001-E6A2-4692-A2A1-8AE6E1D1EC62} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5.1 + 512 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + True + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + False + ..\..\packages\TrackableEntities.EF.6.2.5.2\lib\net45\TrackableEntities.EF.6.dll + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt new file mode 100644 index 00000000..af927807 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/TrackableSharedEntities.Net45.ReadMe.txt @@ -0,0 +1,38 @@ +Trackable Service .NET 4.5 Shared Entities ReadMe + +NOTE: You can reverse engineer entities either using the Entity Framework +Power Tools or the Entity Framework 6.x Tools for Visual Studio. + +This project can be referenced by both client and service projects. +This project template functions as a Data Access Layer and can be +referenced either by a Repositories class library or directly by +an ASP.NET Web API or WCF project. + +Custom T4 templates are provided for reverse engineering a +database to generate Code First classes with fluent API and entities +that implement the ITrackable interface from the TrackingEntitites +NuGet packages. + +To get started, just right-click on the project produced by the +template, select Add New Item, Data, ADO.NET Entity Data Model. +Select or create a data connection. The tool will generate Code First +entities based on the T4 templates located in the project. + +After running the tool, you will need to copy the connection string +from App.config into the web.config (or app.config) file of the +service host. + +You can also use the EF 6.x Tools for Visual Studio to generate entities +using either "Code First from Database" or "EF Designer from Database." +With the Code First option, you may need to insert a partial DbContext +class with a partial ModelBuilding method, in order to add mappings for +one-to-one relations. For example: + +public partial class NorthwindSlim +{ + partial void ModelCreating(DbModelBuilder modelBuilder) + { + modelBuilder.Entity() + .HasKey(e => e.CustomerId); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Net45/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/App.config new file mode 100644 index 00000000..2fb423e8 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/App.config @@ -0,0 +1,13 @@ + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate new file mode 100644 index 00000000..86572a63 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Entities.Shared.Portable.Data.vstemplate @@ -0,0 +1,44 @@ + + + Trackable Shared Portable Data Library + Data class library for use with shared portable trackable entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Portable.Data + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Portable.Data.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj new file mode 100644 index 00000000..c7965d13 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableEntities.Shared.Entities.Portable.Data.csproj @@ -0,0 +1,87 @@ + + + + + Debug + AnyCPU + {0D8FD15B-8ED1-453E-B416-CB538A3B5E5E} + Library + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + 512 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + ..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + True + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\net45\TrackableEntities.Client.dll + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + {82ef229a-122c-4c25-bb67-82eefc4358fc} + $saferootprojectname$.$serviceentitiestemplate$ + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableSharedEntities.Portable.Data.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableSharedEntities.Portable.Data.ReadMe.txt new file mode 100644 index 00000000..aebdec76 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/TrackableSharedEntities.Portable.Data.ReadMe.txt @@ -0,0 +1,9 @@ +Trackable Service Data for Portable Shared Entities ReadMe + +The purpose of this project is to contain the DataContext +and optional mapping classes. These should be generated +for the Shared Portable Entities project and then moved +to this project. + +IMPORTANT: You will need to add a reference to this project +from the Core (WCF) or WebApi project. \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable.Data/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/App.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/App.config new file mode 100644 index 00000000..1b997731 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/App.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt new file mode 100644 index 00000000..2b612d03 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Context.tt @@ -0,0 +1,50 @@ +<#@ template hostspecific="true" language="C#" #> +<#@ include file="EF.Utility.CS.ttinclude" #><#@ + output extension=".cs" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity; +using <#= code.EscapeNamespace(efHost.MappingNamespace) #>; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityContainer.Name #> : DbContext + { + static <#= efHost.EntityContainer.Name #>() + { + Database.SetInitializer(new NullDatabaseInitializer<<#= efHost.EntityContainer.Name #>>()); + } + + public <#= efHost.EntityContainer.Name #>() + : base("Name=<#= efHost.EntityContainer.Name #>") + { + this.Configuration.ProxyCreationEnabled = false; + } + +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + public virtual DbSet<<#= set.ElementType.Name #>> <#= set.Name #> { get; set; } +<# + } +#> + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { +<# + foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType()) + { +#> + modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map()); +<# + } +#> + ModelCreating(modelBuilder); + } + + partial void ModelCreating(DbModelBuilder modelBuilder); + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt new file mode 100644 index 00000000..461c291f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt @@ -0,0 +1,114 @@ +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #><# + + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); + var collectionNavigations = efHost.EntityType.NavigationProperties.Where( + np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); +#> +using System; +using System.Collections.Generic; +using TrackableEntities.Client; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public partial class <#= efHost.EntityType.Name #> : EntityBase + { +<# + + // Add a ctor to initialize any collections + if (collectionNavigations.Any()) + { +#> + public <#= code.Escape(efHost.EntityType) #>() + { +<# + foreach (var navProperty in collectionNavigations) + { +#> + this.<#= code.Escape(navProperty) #> = new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>>(); +<# + } +#> + } + +<# + } + + foreach (var property in efHost.EntityType.Properties) + { + var typeUsage = code.Escape(property.TypeUsage); + + // Fix-up spatial types for EF6 + if (efHost.EntityFrameworkVersion >= new Version(6, 0) + && typeUsage.StartsWith("System.Data.Spatial.")) + { + typeUsage = typeUsage.Replace( + "System.Data.Spatial.", + "System.Data.Entity.Spatial."); + } +#> + <#= Accessibility.ForProperty(property) #> <#= typeUsage #> <#= code.Escape(property) #> + { + get { return _<#= code.Escape(property) #>; } + set + { + if (Equals(value, _<#= code.Escape(property) #>)) return; + _<#= code.Escape(property) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(property) #>); + } + } + private <#= typeUsage #> _<#= code.Escape(property) #>; + +<# + } + + foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType)) + { + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + public ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { +<# if (navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { #> + if (value != null) value.Parent = this; +<# } #> + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> _<#= code.Escape(navProperty) #>; + +<# + } + else + { +#> + public <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> <#= code.Escape(navProperty) #> + { + get { return _<#= code.Escape(navProperty) #>; } + set + { + if (Equals(value, _<#= code.Escape(navProperty) #>)) return; + _<#= code.Escape(navProperty) #> = value; + <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker = _<#= code.Escape(navProperty) #> == null ? null + : new ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> { _<#= code.Escape(navProperty) #> }; + NotifyPropertyChanged(() => <#= code.Escape(navProperty) #>); + } + } + private <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #> _<#= code.Escape(navProperty) #>; + private ChangeTrackingCollection<<#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>> <#= code.Escape(navProperty.ToEndMember.GetEntityType()) #>ChangeTracker { get; set; } + +<# + } + } +#> + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt new file mode 100644 index 00000000..060dc59b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/CodeTemplates/ReverseEngineerCodeFirst/Mapping.tt @@ -0,0 +1,262 @@ +<# +// Simplifying assumptions based on reverse engineer rules +// - No complex types +// - One entity container +// - No inheritance +// - Always have two navigation properties +// - All associations expose FKs (except many:many) +#> +<#@ template debug="true" hostSpecific="true" #> +<#@ output extension=".cs" #> +<#@ include file="EF.Utility.CS.ttinclude" #> +<# + var efHost = (EfTextTemplateHost)Host; + var code = new CodeGenerationTools(this); +#> +using System.Data.Entity.ModelConfiguration; +using System.ComponentModel.DataAnnotations.Schema; + +namespace <#= code.EscapeNamespace(efHost.Namespace) #> +{ + public class <#= efHost.EntityType.Name #>Map : EntityTypeConfiguration<<#= efHost.EntityType.Name #>> + { + public <#= efHost.EntityType.Name #>Map() + { + // Primary Key +<# + if (efHost.EntityType.KeyMembers.Count() == 1) + { +#> + this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>); +<# + } + else + { +#> + this.HasKey(t => new { <#= string.Join(", ", efHost.EntityType.KeyMembers.Select(m => "t." + m.Name)) #> }); +<# + } +#> + + // Properties +<# + foreach (var prop in efHost.EntityType.Properties) + { + var type = (PrimitiveType)prop.TypeUsage.EdmType; + var isKey = efHost.EntityType.KeyMembers.Contains(prop); + var storeProp = efHost.PropertyToColumnMappings[prop]; + var sgpFacet = storeProp.TypeUsage.Facets.SingleOrDefault(f => f.Name == "StoreGeneratedPattern"); + var storeGeneratedPattern = sgpFacet == null + ? StoreGeneratedPattern.None + : (StoreGeneratedPattern)sgpFacet.Value; + + var configLines = new List(); + + if (type.ClrEquivalentType == typeof(int) + || type.ClrEquivalentType == typeof(decimal) + || type.ClrEquivalentType == typeof(short) + || type.ClrEquivalentType == typeof(long)) + { + if (isKey && storeGeneratedPattern != StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)"); + } + else if ((!isKey || efHost.EntityType.KeyMembers.Count > 1) && storeGeneratedPattern == StoreGeneratedPattern.Identity) + { + configLines.Add(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)"); + } + } + + if (type.ClrEquivalentType == typeof(string) + || type.ClrEquivalentType == typeof(byte[])) + { + if (!prop.Nullable) + { + configLines.Add(".IsRequired()"); + } + + var unicodeFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "IsUnicode"); + if(unicodeFacet != null && !(bool)unicodeFacet.Value) + { + configLines.Add(".IsUnicode(false)"); + } + + var fixedLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "FixedLength"); + if (fixedLengthFacet != null && (bool)fixedLengthFacet.Value) + { + configLines.Add(".IsFixedLength()"); + } + + var maxLengthFacet = (Facet)prop.TypeUsage.Facets.SingleOrDefault(f => f.Name == "MaxLength"); + if (maxLengthFacet != null && !maxLengthFacet.IsUnbounded) + { + configLines.Add(string.Format(".HasMaxLength({0})", maxLengthFacet.Value)); + + if (storeGeneratedPattern == StoreGeneratedPattern.Computed + && type.ClrEquivalentType == typeof(byte[]) + && (int)maxLengthFacet.Value == 8) + { + configLines.Add(".IsRowVersion()"); + } + } + } + + if(configLines.Any()) + { +#> + this.Property(t => t.<#= prop.Name #>) + <#= string.Join("\r\n ", configLines) #>; + +<# + } + } + + var tableSet = efHost.TableSet; + var tableName = (string)tableSet.MetadataProperties["Table"].Value + ?? tableSet.Name; + var schemaName = (string)tableSet.MetadataProperties["Schema"].Value; +#> + // Table & Column Mappings +<# + if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName)) + { +#> + this.ToTable("<#= tableName #>"); +<# + } + else + { +#> + this.ToTable("<#= tableName #>", "<#= schemaName #>"); +<# + } + + foreach (var property in efHost.EntityType.Properties) + { +#> + this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>"); +<# + } +#> + + // Tracking Properties + this.Ignore(t => t.TrackingState); + this.Ignore(t => t.ModifiedProperties); + this.Ignore(t => t.EntityIdentifier); +<# + // Find m:m relationshipsto configure + var manyManyRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many + && np.RelationshipType.RelationshipEndMembers.First() == np.FromEndMember); // <- ensures we only configure from one end + + // Find FK relationships that this entity is the dependent of + var fkRelationships = efHost.EntityType.NavigationProperties + .Where(np => np.DeclaringType == efHost.EntityType + && ((AssociationType)np.RelationshipType).IsForeignKey + && ((AssociationType)np.RelationshipType).ReferentialConstraints.Single().ToRole == np.FromEndMember); + + if(manyManyRelationships.Any() || fkRelationships.Any()) + { +#> + + // Relationships +<# + foreach (var navProperty in manyManyRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + var mapping = efHost.ManyToManyMappings[association]; + var item1 = mapping.Item1; + var mappingTableName = (string)mapping.Item1.MetadataProperties["Table"].Value + ?? item1.Name; + var mappingSchemaName = (string)item1.MetadataProperties["Schema"].Value; + + // Need to ensure that FKs are decalred in the same order as the PK properties on each principal type + var leftType = (EntityType)navProperty.DeclaringType; + var leftKeyMappings = mapping.Item2[navProperty.FromEndMember]; + var leftColumns = string.Join(", ", leftType.KeyMembers.Select(m => "\"" + leftKeyMappings[m] + "\"")); + var rightType = (EntityType)otherNavProperty.DeclaringType; + var rightKeyMappings = mapping.Item2[otherNavProperty.FromEndMember]; + var rightColumns = string.Join(", ", rightType.KeyMembers.Select(m => "\"" + rightKeyMappings[m] + "\"")); +#> + this.HasMany(t => t.<#= code.Escape(navProperty) #>) + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) + .Map(m => + { +<# + if (mappingSchemaName == "dbo" || string.IsNullOrWhiteSpace(mappingSchemaName)) + { +#> + m.ToTable("<#= mappingTableName #>"); +<# + } + else + { +#> + m.ToTable("<#= mappingTableName #>", "<#= mappingSchemaName #>"); +<# + } +#> + m.MapLeftKey(<#= leftColumns #>); + m.MapRightKey(<#= rightColumns #>); + }); + +<# + } + + foreach (var navProperty in fkRelationships) + { + var otherNavProperty = navProperty.ToEndMember.GetEntityType().NavigationProperties.Where(n => n.RelationshipType == navProperty.RelationshipType && n != navProperty).Single(); + var association = (AssociationType)navProperty.RelationshipType; + + if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) + { +#> + this.HasRequired(t => t.<#= code.Escape(navProperty) #>) +<# + } + else + { +#> + this.HasOptional(t => t.<#= code.Escape(navProperty) #>) +<# + } + + if(navProperty.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) + { +#> + .WithMany(t => t.<#= code.Escape(otherNavProperty) #>) +<# + if(association.ReferentialConstraints.Single().ToProperties.Count == 1) + { +#> + .HasForeignKey(d => d.<#= association.ReferentialConstraints.Single().ToProperties.Single().Name #>); +<# + } + else + { +#> + .HasForeignKey(d => new { <#= string.Join(", ", association.ReferentialConstraints.Single().ToProperties.Select(p => "d." + p.Name)) #> }); +<# + } + } + else + { + // NOTE: We can assume that this is a required:optional relationship + // as EDMGen will never create an optional:optional relationship + // because everything is one:many except PK-PK relationships which must be required +#> + .WithOptional(t => t.<#= code.Escape(otherNavProperty) #>); +<# + } + } +#> + +<# + } +#> + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate new file mode 100644 index 00000000..ed8272dc --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Entities.Shared.Portable.vstemplate @@ -0,0 +1,48 @@ + + + Trackable Shared Portable Entities Library + Portable class library with templates for reverse engineering trackable shared entitites. Created by Tony Sneed. For more information visit http://trackable.codeplex.com. + CSharp + + + 1000 + true + Trackable.Shared.Entities.Portable + true + Enabled + true + __TemplateIcon.png + __PreviewImage.png + 1 + + + + App.config + + + Context.tt + Entity.tt + Mapping.tt + + + + + AssemblyInfo.cs + + TrackableSharedEntities.Portable.ReadMe.txt + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.EntitiesChildWizard + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Properties/AssemblyInfo.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0bdba57f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj new file mode 100644 index 00000000..739c9900 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableEntities.Shared.Entities.Portable.csproj @@ -0,0 +1,71 @@ + + + + + 11.0 + Debug + AnyCPU + {67A4CFEC-9AA5-4DE3-B694-71C3B4F6C975} + Library + Properties + $safeprojectname$ + $safeprojectname$ + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile259 + v4.5 + ..\..\ + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll + + + ..\..\packages\TrackableEntities.Client.2.5.2\lib\portable-net45+wp80+win8+wpa81\TrackableEntities.Client.dll + + + ..\..\packages\TrackableEntities.Common.2.5.2.1\lib\portable-net40+sl50+win+wpa81+wp80\TrackableEntities.Common.dll + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt new file mode 100644 index 00000000..b6db4556 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/TrackableSharedEntities.Portable.ReadMe.txt @@ -0,0 +1,20 @@ +Trackable Service Portable Shared Entities ReadMe + +NOTE: You should first install the Entity Framework Power Tools. +Support for EF 6.x Tools for Visual Studio has be added, but it can +only be used to generate client entities using a .NET 4.5 class +library project, from which you can copy or link model classes +to the Client.Entities project. + +To get started, right-click on the project, select Entity Framework, +Reverse Engineer Code First. The tool will generate classes for +data context and mapping classes, as well as trackable entities, +which can be references both by client and service projects. + +IMPORTANT: After running the tool, you will need to move the context +and mapping classes to a .NET 4.5 class library that includes an +Entity Framework 6.x NuGet package and can function as a Data Access Layer. + +This project is based on a portable class library and can be referenced +from clients based on .NET 4.5, Silverlight 5 and higher, Windows Phone +8 and higher, or Windows Store Apps. \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/__PreviewImage.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/__PreviewImage.png new file mode 100644 index 00000000..142c169d Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/__PreviewImage.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/__TemplateIcon.png b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/__TemplateIcon.png new file mode 100644 index 00000000..8b57c779 Binary files /dev/null and b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/Entities.Shared.Portable/__TemplateIcon.png differ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/TrackableWebApi.vstemplate b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/TrackableWebApi.vstemplate new file mode 100644 index 00000000..3c31b79f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/TrackableWebApi.vstemplate @@ -0,0 +1,51 @@ + + + Trackable Web API Application + Solution containing Web API, trackable entities and client projects, with templates for creating API Controllers that use trackable entities. + CSharp + Trackable + 1000 + true + TrackableWebApi + true + Enabled + __TemplateIcon.png + __PreviewImage.png + true + true + 4.0 + 1 + + + + + WebApi\WebApi.vstemplate + + + ConsoleClient\ConsoleClient.vstemplate + + + Entities.Client.Net45\Entities.Client.Net45.vstemplate + + + Entities.Client.Portable\Entities.Client.Portable.vstemplate + + + Entities.Service.Net45\Entities.Service.Net45.vstemplate + + + Entities.Shared.Net45\Entities.Shared.Net45.vstemplate + + + Entities.Shared.Portable\Entities.Shared.Portable.vstemplate + + + Entities.Shared.Portable.Data\Entities.Shared.Portable.Data.vstemplate + + + + + TrackableEntities.TemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b10b51e7b9be6a2e + TrackableEntities.TemplateWizard.RootWizard + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/BundleConfig.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/BundleConfig.cs new file mode 100644 index 00000000..a947cd56 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/BundleConfig.cs @@ -0,0 +1,32 @@ +using System.Web; +using System.Web.Optimization; + +namespace $safeprojectname$ +{ + public class BundleConfig + { + // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 + public static void RegisterBundles(BundleCollection bundles) + { + bundles.Add(new ScriptBundle("~/bundles/jquery").Include( + "~/Scripts/jquery-{version}.js")); + + // Use the development version of Modernizr to develop with and learn from. Then, when you're + // ready for production, use the build tool at http://modernizr.com to pick only the tests you need. + bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( + "~/Scripts/modernizr-*")); + + bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( + "~/Scripts/bootstrap.js", + "~/Scripts/respond.js")); + + bundles.Add(new StyleBundle("~/Content/css").Include( + "~/Content/bootstrap.css", + "~/Content/site.css")); + + // Set EnableOptimizations to false for debugging. For more information, + // visit http://go.microsoft.com/fwlink/?LinkId=301862 + BundleTable.EnableOptimizations = true; + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/FilterConfig.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/FilterConfig.cs new file mode 100644 index 00000000..9ddc9057 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/FilterConfig.cs @@ -0,0 +1,13 @@ +using System.Web; +using System.Web.Mvc; + +namespace $safeprojectname$ +{ + public class FilterConfig + { + public static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/RouteConfig.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/RouteConfig.cs new file mode 100644 index 00000000..e9a7380a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/RouteConfig.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Web.Routing; + +namespace $safeprojectname$ +{ + public class RouteConfig + { + public static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + routes.MapRoute( + name: "Default", + url: "{controller}/{action}/{id}", + defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } + ); + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/WebApiConfig.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/WebApiConfig.cs new file mode 100644 index 00000000..02ca3803 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/App_Start/WebApiConfig.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Http; +using AspnetWebApi2Helpers.Serialization; + +namespace $safeprojectname$ +{ + public static class WebApiConfig + { + public static void Register(HttpConfiguration config) + { + // Configure Json and Xml formatters to handle cycles + config.Formatters.JsonPreserveReferences(); + config.Formatters.XmlPreserveReferences(); + + // Web API routes + config.MapHttpAttributeRoutes(); + + config.Routes.MapHttpRoute( + name: "DefaultApi", + routeTemplate: "api/{controller}/{id}", + defaults: new { id = RouteParameter.Optional } + ); + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ApiDescriptionExtensions.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ApiDescriptionExtensions.cs new file mode 100644 index 00000000..a8196b5a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ApiDescriptionExtensions.cs @@ -0,0 +1,39 @@ +using System; +using System.Text; +using System.Web; +using System.Web.Http.Description; + +namespace $safeprojectname$.Areas.HelpPage +{ + public static class ApiDescriptionExtensions + { + /// + /// Generates an URI-friendly ID for the . E.g. "Get-Values-id_name" instead of "GetValues/{id}?name={name}" + /// + /// The . + /// The ID as a string. + public static string GetFriendlyId(this ApiDescription description) + { + string path = description.RelativePath; + string[] urlParts = path.Split('?'); + string localPath = urlParts[0]; + string queryKeyString = null; + if (urlParts.Length > 1) + { + string query = urlParts[1]; + string[] queryKeys = HttpUtility.ParseQueryString(query).AllKeys; + queryKeyString = String.Join("_", queryKeys); + } + + StringBuilder friendlyPath = new StringBuilder(); + friendlyPath.AppendFormat("{0}-{1}", + description.HttpMethod.Method, + localPath.Replace("/", "-").Replace("{", String.Empty).Replace("}", String.Empty)); + if (queryKeyString != null) + { + friendlyPath.AppendFormat("_{0}", queryKeyString.Replace('.', '-')); + } + return friendlyPath.ToString(); + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/App_Start/HelpPageConfig.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/App_Start/HelpPageConfig.cs new file mode 100644 index 00000000..9b401a91 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/App_Start/HelpPageConfig.cs @@ -0,0 +1,113 @@ +// Uncomment the following to provide samples for PageResult. Must also add the Microsoft.AspNet.WebApi.OData +// package to your project. +////#define Handle_PageResultOfT + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Net.Http.Headers; +using System.Reflection; +using System.Web; +using System.Web.Http; +#if Handle_PageResultOfT +using System.Web.Http.OData; +#endif + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// Use this class to customize the Help Page. + /// For example you can set a custom to supply the documentation + /// or you can provide the samples for the requests/responses. + /// + public static class HelpPageConfig + { + [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", + MessageId = "$safeprojectname$.Areas.HelpPage.TextSample.#ctor(System.String)", + Justification = "End users may choose to merge this string with existing localized resources.")] + [SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", + MessageId = "bsonspec", + Justification = "Part of a URI.")] + public static void Register(HttpConfiguration config) + { + //// Uncomment the following to use the documentation from XML documentation file. + //config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml"))); + + //// Uncomment the following to use "sample string" as the sample for all actions that have string as the body parameter or return type. + //// Also, the string arrays will be used for IEnumerable. The sample objects will be serialized into different media type + //// formats by the available formatters. + //config.SetSampleObjects(new Dictionary + //{ + // {typeof(string), "sample string"}, + // {typeof(IEnumerable), new string[]{"sample 1", "sample 2"}} + //}); + + // Extend the following to provide factories for types not handled automatically (those lacking parameterless + // constructors) or for which you prefer to use non-default property values. Line below provides a fallback + // since automatic handling will fail and GeneratePageResult handles only a single type. +#if Handle_PageResultOfT + config.GetHelpPageSampleGenerator().SampleObjectFactories.Add(GeneratePageResult); +#endif + + // Extend the following to use a preset object directly as the sample for all actions that support a media + // type, regardless of the body parameter or return type. The lines below avoid display of binary content. + // The BsonMediaTypeFormatter (if available) is not used to serialize the TextSample object. + config.SetSampleForMediaType( + new TextSample("Binary JSON content. See http://bsonspec.org for details."), + new MediaTypeHeaderValue("application/bson")); + + //// Uncomment the following to use "[0]=foo&[1]=bar" directly as the sample for all actions that support form URL encoded format + //// and have IEnumerable as the body parameter or return type. + //config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable)); + + //// Uncomment the following to use "1234" directly as the request sample for media type "text/plain" on the controller named "Values" + //// and action named "Put". + //config.SetSampleRequest("1234", new MediaTypeHeaderValue("text/plain"), "Values", "Put"); + + //// Uncomment the following to use the image on "../images/aspNetHome.png" directly as the response sample for media type "image/png" + //// on the controller named "Values" and action named "Get" with parameter "id". + //config.SetSampleResponse(new ImageSample("../images/aspNetHome.png"), new MediaTypeHeaderValue("image/png"), "Values", "Get", "id"); + + //// Uncomment the following to correct the sample request when the action expects an HttpRequestMessage with ObjectContent. + //// The sample will be generated as if the controller named "Values" and action named "Get" were having string as the body parameter. + //config.SetActualRequestType(typeof(string), "Values", "Get"); + + //// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent. + //// The sample will be generated as if the controller named "Values" and action named "Post" were returning a string. + //config.SetActualResponseType(typeof(string), "Values", "Post"); + } + +#if Handle_PageResultOfT + private static object GeneratePageResult(HelpPageSampleGenerator sampleGenerator, Type type) + { + if (type.IsGenericType) + { + Type openGenericType = type.GetGenericTypeDefinition(); + if (openGenericType == typeof(PageResult<>)) + { + // Get the T in PageResult + Type[] typeParameters = type.GetGenericArguments(); + Debug.Assert(typeParameters.Length == 1); + + // Create an enumeration to pass as the first parameter to the PageResult constuctor + Type itemsType = typeof(List<>).MakeGenericType(typeParameters); + object items = sampleGenerator.GetSampleObject(itemsType); + + // Fill in the other information needed to invoke the PageResult constuctor + Type[] parameterTypes = new Type[] { itemsType, typeof(Uri), typeof(long?), }; + object[] parameters = new object[] { items, null, (long)ObjectGenerator.DefaultCollectionSize, }; + + // Call PageResult(IEnumerable items, Uri nextPageLink, long? count) constructor + ConstructorInfo constructor = type.GetConstructor(parameterTypes); + return constructor.Invoke(parameters); + } + } + + return null; + } +#endif + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Controllers/HelpController.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Controllers/HelpController.cs new file mode 100644 index 00000000..1828e5a2 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Controllers/HelpController.cs @@ -0,0 +1,63 @@ +using System; +using System.Web.Http; +using System.Web.Mvc; +using $safeprojectname$.Areas.HelpPage.ModelDescriptions; +using $safeprojectname$.Areas.HelpPage.Models; + +namespace $safeprojectname$.Areas.HelpPage.Controllers +{ + /// + /// The controller that will handle requests for the help page. + /// + public class HelpController : Controller + { + private const string ErrorViewName = "Error"; + + public HelpController() + : this(GlobalConfiguration.Configuration) + { + } + + public HelpController(HttpConfiguration config) + { + Configuration = config; + } + + public HttpConfiguration Configuration { get; private set; } + + public ActionResult Index() + { + ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider(); + return View(Configuration.Services.GetApiExplorer().ApiDescriptions); + } + + public ActionResult Api(string apiId) + { + if (!String.IsNullOrEmpty(apiId)) + { + HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId); + if (apiModel != null) + { + return View(apiModel); + } + } + + return View(ErrorViewName); + } + + public ActionResult ResourceModel(string modelName) + { + if (!String.IsNullOrEmpty(modelName)) + { + ModelDescriptionGenerator modelDescriptionGenerator = Configuration.GetModelDescriptionGenerator(); + ModelDescription modelDescription; + if (modelDescriptionGenerator.GeneratedModels.TryGetValue(modelName, out modelDescription)) + { + return View(modelDescription); + } + } + + return View(ErrorViewName); + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPage.css b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPage.css new file mode 100644 index 00000000..aff22303 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPage.css @@ -0,0 +1,134 @@ +.help-page h1, +.help-page .h1, +.help-page h2, +.help-page .h2, +.help-page h3, +.help-page .h3, +#body.help-page, +.help-page-table th, +.help-page-table pre, +.help-page-table p { + font-family: "Segoe UI Light", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif; +} + +.help-page pre.wrapped { + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + white-space: pre-wrap; +} + +.help-page .warning-message-container { + margin-top: 20px; + padding: 0 10px; + color: #525252; + background: #EFDCA9; + border: 1px solid #CCCCCC; +} + +.help-page-table { + width: 100%; + border-collapse: collapse; + text-align: left; + margin: 0px 0px 20px 0px; + border-top: 1px solid #D4D4D4; +} + +.help-page-table th { + text-align: left; + font-weight: bold; + border-bottom: 1px solid #D4D4D4; + padding: 5px 6px 5px 6px; +} + +.help-page-table td { + border-bottom: 1px solid #D4D4D4; + padding: 10px 8px 10px 8px; + vertical-align: top; +} + +.help-page-table pre, +.help-page-table p { + margin: 0px; + padding: 0px; + font-family: inherit; + font-size: 100%; +} + +.help-page-table tbody tr:hover td { + background-color: #F3F3F3; +} + +.help-page a:hover { + background-color: transparent; +} + +.help-page .sample-header { + border: 2px solid #D4D4D4; + background: #00497E; + color: #FFFFFF; + padding: 8px 15px; + border-bottom: none; + display: inline-block; + margin: 10px 0px 0px 0px; +} + +.help-page .sample-content { + display: block; + border-width: 0; + padding: 15px 20px; + background: #FFFFFF; + border: 2px solid #D4D4D4; + margin: 0px 0px 10px 0px; +} + +.help-page .api-name { + width: 40%; +} + +.help-page .api-documentation { + width: 60%; +} + +.help-page .parameter-name { + width: 20%; +} + +.help-page .parameter-documentation { + width: 40%; +} + +.help-page .parameter-type { + width: 20%; +} + +.help-page .parameter-annotations { + width: 20%; +} + +.help-page h1, +.help-page .h1 { + font-size: 36px; + line-height: normal; +} + +.help-page h2, +.help-page .h2 { + font-size: 24px; +} + +.help-page h3, +.help-page .h3 { + font-size: 20px; +} + +#body.help-page { + font-size: 14px; + line-height: 143%; + color: #333; +} + +.help-page a { + color: #0000EE; + text-decoration: none; +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPageAreaRegistration.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPageAreaRegistration.cs new file mode 100644 index 00000000..580be298 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPageAreaRegistration.cs @@ -0,0 +1,26 @@ +using System.Web.Http; +using System.Web.Mvc; + +namespace $safeprojectname$.Areas.HelpPage +{ + public class HelpPageAreaRegistration : AreaRegistration + { + public override string AreaName + { + get + { + return "HelpPage"; + } + } + + public override void RegisterArea(AreaRegistrationContext context) + { + context.MapRoute( + "HelpPage_Default", + "Help/{action}/{apiId}", + new { controller = "Help", action = "Index", apiId = UrlParameter.Optional }); + + HelpPageConfig.Register(GlobalConfiguration.Configuration); + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPageConfigurationExtensions.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPageConfigurationExtensions.cs new file mode 100644 index 00000000..aea5f4c9 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/HelpPageConfigurationExtensions.cs @@ -0,0 +1,467 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Web.Http; +using System.Web.Http.Controllers; +using System.Web.Http.Description; +using $safeprojectname$.Areas.HelpPage.ModelDescriptions; +using $safeprojectname$.Areas.HelpPage.Models; + +namespace $safeprojectname$.Areas.HelpPage +{ + public static class HelpPageConfigurationExtensions + { + private const string ApiModelPrefix = "MS_HelpPageApiModel_"; + + /// + /// Sets the documentation provider for help page. + /// + /// The . + /// The documentation provider. + public static void SetDocumentationProvider(this HttpConfiguration config, IDocumentationProvider documentationProvider) + { + config.Services.Replace(typeof(IDocumentationProvider), documentationProvider); + } + + /// + /// Sets the objects that will be used by the formatters to produce sample requests/responses. + /// + /// The . + /// The sample objects. + public static void SetSampleObjects(this HttpConfiguration config, IDictionary sampleObjects) + { + config.GetHelpPageSampleGenerator().SampleObjects = sampleObjects; + } + + /// + /// Sets the sample request directly for the specified media type and action. + /// + /// The . + /// The sample request. + /// The media type. + /// Name of the controller. + /// Name of the action. + public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName) + { + config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, new[] { "*" }), sample); + } + + /// + /// Sets the sample request directly for the specified media type and action with parameters. + /// + /// The . + /// The sample request. + /// The media type. + /// Name of the controller. + /// Name of the action. + /// The parameter names. + public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames) + { + config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, parameterNames), sample); + } + + /// + /// Sets the sample request directly for the specified media type of the action. + /// + /// The . + /// The sample response. + /// The media type. + /// Name of the controller. + /// Name of the action. + public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName) + { + config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, new[] { "*" }), sample); + } + + /// + /// Sets the sample response directly for the specified media type of the action with specific parameters. + /// + /// The . + /// The sample response. + /// The media type. + /// Name of the controller. + /// Name of the action. + /// The parameter names. + public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames) + { + config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, parameterNames), sample); + } + + /// + /// Sets the sample directly for all actions with the specified media type. + /// + /// The . + /// The sample. + /// The media type. + public static void SetSampleForMediaType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType) + { + config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType), sample); + } + + /// + /// Sets the sample directly for all actions with the specified type and media type. + /// + /// The . + /// The sample. + /// The media type. + /// The parameter type or return type of an action. + public static void SetSampleForType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, Type type) + { + config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, type), sample); + } + + /// + /// Specifies the actual type of passed to the in an action. + /// The help page will use this information to produce more accurate request samples. + /// + /// The . + /// The type. + /// Name of the controller. + /// Name of the action. + public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName) + { + config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, new[] { "*" }), type); + } + + /// + /// Specifies the actual type of passed to the in an action. + /// The help page will use this information to produce more accurate request samples. + /// + /// The . + /// The type. + /// Name of the controller. + /// Name of the action. + /// The parameter names. + public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames) + { + config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, parameterNames), type); + } + + /// + /// Specifies the actual type of returned as part of the in an action. + /// The help page will use this information to produce more accurate response samples. + /// + /// The . + /// The type. + /// Name of the controller. + /// Name of the action. + public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName) + { + config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, new[] { "*" }), type); + } + + /// + /// Specifies the actual type of returned as part of the in an action. + /// The help page will use this information to produce more accurate response samples. + /// + /// The . + /// The type. + /// Name of the controller. + /// Name of the action. + /// The parameter names. + public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames) + { + config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, parameterNames), type); + } + + /// + /// Gets the help page sample generator. + /// + /// The . + /// The help page sample generator. + public static HelpPageSampleGenerator GetHelpPageSampleGenerator(this HttpConfiguration config) + { + return (HelpPageSampleGenerator)config.Properties.GetOrAdd( + typeof(HelpPageSampleGenerator), + k => new HelpPageSampleGenerator()); + } + + /// + /// Sets the help page sample generator. + /// + /// The . + /// The help page sample generator. + public static void SetHelpPageSampleGenerator(this HttpConfiguration config, HelpPageSampleGenerator sampleGenerator) + { + config.Properties.AddOrUpdate( + typeof(HelpPageSampleGenerator), + k => sampleGenerator, + (k, o) => sampleGenerator); + } + + /// + /// Gets the model description generator. + /// + /// The configuration. + /// The + public static ModelDescriptionGenerator GetModelDescriptionGenerator(this HttpConfiguration config) + { + return (ModelDescriptionGenerator)config.Properties.GetOrAdd( + typeof(ModelDescriptionGenerator), + k => InitializeModelDescriptionGenerator(config)); + } + + /// + /// Gets the model that represents an API displayed on the help page. The model is initialized on the first call and cached for subsequent calls. + /// + /// The . + /// The ID. + /// + /// An + /// + public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId) + { + object model; + string modelId = ApiModelPrefix + apiDescriptionId; + if (!config.Properties.TryGetValue(modelId, out model)) + { + Collection apiDescriptions = config.Services.GetApiExplorer().ApiDescriptions; + ApiDescription apiDescription = apiDescriptions.FirstOrDefault(api => String.Equals(api.GetFriendlyId(), apiDescriptionId, StringComparison.OrdinalIgnoreCase)); + if (apiDescription != null) + { + model = GenerateApiModel(apiDescription, config); + config.Properties.TryAdd(modelId, model); + } + } + + return (HelpPageApiModel)model; + } + + private static HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HttpConfiguration config) + { + HelpPageApiModel apiModel = new HelpPageApiModel() + { + ApiDescription = apiDescription, + }; + + ModelDescriptionGenerator modelGenerator = config.GetModelDescriptionGenerator(); + HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator(); + GenerateUriParameters(apiModel, modelGenerator); + GenerateRequestModelDescription(apiModel, modelGenerator, sampleGenerator); + GenerateResourceDescription(apiModel, modelGenerator); + GenerateSamples(apiModel, sampleGenerator); + + return apiModel; + } + + private static void GenerateUriParameters(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator) + { + ApiDescription apiDescription = apiModel.ApiDescription; + foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions) + { + if (apiParameter.Source == ApiParameterSource.FromUri) + { + HttpParameterDescriptor parameterDescriptor = apiParameter.ParameterDescriptor; + Type parameterType = null; + ModelDescription typeDescription = null; + ComplexTypeModelDescription complexTypeDescription = null; + if (parameterDescriptor != null) + { + parameterType = parameterDescriptor.ParameterType; + typeDescription = modelGenerator.GetOrCreateModelDescription(parameterType); + complexTypeDescription = typeDescription as ComplexTypeModelDescription; + } + + // Example: + // [TypeConverter(typeof(PointConverter))] + // public class Point + // { + // public Point(int x, int y) + // { + // X = x; + // Y = y; + // } + // public int X { get; set; } + // public int Y { get; set; } + // } + // Class Point is bindable with a TypeConverter, so Point will be added to UriParameters collection. + // + // public class Point + // { + // public int X { get; set; } + // public int Y { get; set; } + // } + // Regular complex class Point will have properties X and Y added to UriParameters collection. + if (complexTypeDescription != null + && !IsBindableWithTypeConverter(parameterType)) + { + foreach (ParameterDescription uriParameter in complexTypeDescription.Properties) + { + apiModel.UriParameters.Add(uriParameter); + } + } + else if (parameterDescriptor != null) + { + ParameterDescription uriParameter = + AddParameterDescription(apiModel, apiParameter, typeDescription); + + if (!parameterDescriptor.IsOptional) + { + uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = "Required" }); + } + + object defaultValue = parameterDescriptor.DefaultValue; + if (defaultValue != null) + { + uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = "Default value is " + Convert.ToString(defaultValue, CultureInfo.InvariantCulture) }); + } + } + else + { + Debug.Assert(parameterDescriptor == null); + + // If parameterDescriptor is null, this is an undeclared route parameter which only occurs + // when source is FromUri. Ignored in request model and among resource parameters but listed + // as a simple string here. + ModelDescription modelDescription = modelGenerator.GetOrCreateModelDescription(typeof(string)); + AddParameterDescription(apiModel, apiParameter, modelDescription); + } + } + } + } + + private static bool IsBindableWithTypeConverter(Type parameterType) + { + if (parameterType == null) + { + return false; + } + + return TypeDescriptor.GetConverter(parameterType).CanConvertFrom(typeof(string)); + } + + private static ParameterDescription AddParameterDescription(HelpPageApiModel apiModel, + ApiParameterDescription apiParameter, ModelDescription typeDescription) + { + ParameterDescription parameterDescription = new ParameterDescription + { + Name = apiParameter.Name, + Documentation = apiParameter.Documentation, + TypeDescription = typeDescription, + }; + + apiModel.UriParameters.Add(parameterDescription); + return parameterDescription; + } + + private static void GenerateRequestModelDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator, HelpPageSampleGenerator sampleGenerator) + { + ApiDescription apiDescription = apiModel.ApiDescription; + foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions) + { + if (apiParameter.Source == ApiParameterSource.FromBody) + { + Type parameterType = apiParameter.ParameterDescriptor.ParameterType; + apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType); + apiModel.RequestDocumentation = apiParameter.Documentation; + } + else if (apiParameter.ParameterDescriptor != null && + apiParameter.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage)) + { + Type parameterType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription); + + if (parameterType != null) + { + apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType); + } + } + } + } + + private static void GenerateResourceDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator) + { + ResponseDescription response = apiModel.ApiDescription.ResponseDescription; + Type responseType = response.ResponseType ?? response.DeclaredType; + if (responseType != null && responseType != typeof(void)) + { + apiModel.ResourceDescription = modelGenerator.GetOrCreateModelDescription(responseType); + } + } + + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "The exception is recorded as ErrorMessages.")] + private static void GenerateSamples(HelpPageApiModel apiModel, HelpPageSampleGenerator sampleGenerator) + { + try + { + foreach (var item in sampleGenerator.GetSampleRequests(apiModel.ApiDescription)) + { + apiModel.SampleRequests.Add(item.Key, item.Value); + LogInvalidSampleAsError(apiModel, item.Value); + } + + foreach (var item in sampleGenerator.GetSampleResponses(apiModel.ApiDescription)) + { + apiModel.SampleResponses.Add(item.Key, item.Value); + LogInvalidSampleAsError(apiModel, item.Value); + } + } + catch (Exception e) + { + apiModel.ErrorMessages.Add(String.Format(CultureInfo.CurrentCulture, + "An exception has occurred while generating the sample. Exception message: {0}", + HelpPageSampleGenerator.UnwrapException(e).Message)); + } + } + + private static bool TryGetResourceParameter(ApiDescription apiDescription, HttpConfiguration config, out ApiParameterDescription parameterDescription, out Type resourceType) + { + parameterDescription = apiDescription.ParameterDescriptions.FirstOrDefault( + p => p.Source == ApiParameterSource.FromBody || + (p.ParameterDescriptor != null && p.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage))); + + if (parameterDescription == null) + { + resourceType = null; + return false; + } + + resourceType = parameterDescription.ParameterDescriptor.ParameterType; + + if (resourceType == typeof(HttpRequestMessage)) + { + HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator(); + resourceType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription); + } + + if (resourceType == null) + { + parameterDescription = null; + return false; + } + + return true; + } + + private static ModelDescriptionGenerator InitializeModelDescriptionGenerator(HttpConfiguration config) + { + ModelDescriptionGenerator modelGenerator = new ModelDescriptionGenerator(config); + Collection apis = config.Services.GetApiExplorer().ApiDescriptions; + foreach (ApiDescription api in apis) + { + ApiParameterDescription parameterDescription; + Type parameterType; + if (TryGetResourceParameter(api, config, out parameterDescription, out parameterType)) + { + modelGenerator.GetOrCreateModelDescription(parameterType); + } + } + return modelGenerator; + } + + private static void LogInvalidSampleAsError(HelpPageApiModel apiModel, object sample) + { + InvalidSample invalidSample = sample as InvalidSample; + if (invalidSample != null) + { + apiModel.ErrorMessages.Add(invalidSample.ErrorMessage); + } + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs new file mode 100644 index 00000000..f9ffbb8d --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs @@ -0,0 +1,7 @@ +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class CollectionModelDescription : ModelDescription + { + public ModelDescription ElementDescription { get; set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs new file mode 100644 index 00000000..18e30153 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs @@ -0,0 +1,14 @@ +using System.Collections.ObjectModel; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class ComplexTypeModelDescription : ModelDescription + { + public ComplexTypeModelDescription() + { + Properties = new Collection(); + } + + public Collection Properties { get; private set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs new file mode 100644 index 00000000..5a911cb3 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs @@ -0,0 +1,6 @@ +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class DictionaryModelDescription : KeyValuePairModelDescription + { + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs new file mode 100644 index 00000000..29c3a4df --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class EnumTypeModelDescription : ModelDescription + { + public EnumTypeModelDescription() + { + Values = new Collection(); + } + + public Collection Values { get; private set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs new file mode 100644 index 00000000..8fed5ce0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs @@ -0,0 +1,11 @@ +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class EnumValueDescription + { + public string Documentation { get; set; } + + public string Name { get; set; } + + public string Value { get; set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs new file mode 100644 index 00000000..d6cc5234 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs @@ -0,0 +1,12 @@ +using System; +using System.Reflection; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public interface IModelDocumentationProvider + { + string GetDocumentation(MemberInfo member); + + string GetDocumentation(Type type); + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs new file mode 100644 index 00000000..a859cc09 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs @@ -0,0 +1,9 @@ +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class KeyValuePairModelDescription : ModelDescription + { + public ModelDescription KeyModelDescription { get; set; } + + public ModelDescription ValueModelDescription { get; set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelDescription.cs new file mode 100644 index 00000000..956e7df6 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelDescription.cs @@ -0,0 +1,16 @@ +using System; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + /// + /// Describes a type model. + /// + public abstract class ModelDescription + { + public string Documentation { get; set; } + + public Type ModelType { get; set; } + + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs new file mode 100644 index 00000000..c72ff5fe --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs @@ -0,0 +1,451 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.ComponentModel.DataAnnotations; +using System.Globalization; +using System.Reflection; +using System.Runtime.Serialization; +using System.Web.Http; +using System.Web.Http.Description; +using System.Xml.Serialization; +using Newtonsoft.Json; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + /// + /// Generates model descriptions for given types. + /// + public class ModelDescriptionGenerator + { + // Modify this to support more data annotation attributes. + private readonly IDictionary> AnnotationTextGenerator = new Dictionary> + { + { typeof(RequiredAttribute), a => "Required" }, + { typeof(RangeAttribute), a => + { + RangeAttribute range = (RangeAttribute)a; + return String.Format(CultureInfo.CurrentCulture, "Range: inclusive between {0} and {1}", range.Minimum, range.Maximum); + } + }, + { typeof(MaxLengthAttribute), a => + { + MaxLengthAttribute maxLength = (MaxLengthAttribute)a; + return String.Format(CultureInfo.CurrentCulture, "Max length: {0}", maxLength.Length); + } + }, + { typeof(MinLengthAttribute), a => + { + MinLengthAttribute minLength = (MinLengthAttribute)a; + return String.Format(CultureInfo.CurrentCulture, "Min length: {0}", minLength.Length); + } + }, + { typeof(StringLengthAttribute), a => + { + StringLengthAttribute strLength = (StringLengthAttribute)a; + return String.Format(CultureInfo.CurrentCulture, "String length: inclusive between {0} and {1}", strLength.MinimumLength, strLength.MaximumLength); + } + }, + { typeof(DataTypeAttribute), a => + { + DataTypeAttribute dataType = (DataTypeAttribute)a; + return String.Format(CultureInfo.CurrentCulture, "Data type: {0}", dataType.CustomDataType ?? dataType.DataType.ToString()); + } + }, + { typeof(RegularExpressionAttribute), a => + { + RegularExpressionAttribute regularExpression = (RegularExpressionAttribute)a; + return String.Format(CultureInfo.CurrentCulture, "Matching regular expression pattern: {0}", regularExpression.Pattern); + } + }, + }; + + // Modify this to add more default documentations. + private readonly IDictionary DefaultTypeDocumentation = new Dictionary + { + { typeof(Int16), "integer" }, + { typeof(Int32), "integer" }, + { typeof(Int64), "integer" }, + { typeof(UInt16), "unsigned integer" }, + { typeof(UInt32), "unsigned integer" }, + { typeof(UInt64), "unsigned integer" }, + { typeof(Byte), "byte" }, + { typeof(Char), "character" }, + { typeof(SByte), "signed byte" }, + { typeof(Uri), "URI" }, + { typeof(Single), "decimal number" }, + { typeof(Double), "decimal number" }, + { typeof(Decimal), "decimal number" }, + { typeof(String), "string" }, + { typeof(Guid), "globally unique identifier" }, + { typeof(TimeSpan), "time interval" }, + { typeof(DateTime), "date" }, + { typeof(DateTimeOffset), "date" }, + { typeof(Boolean), "boolean" }, + }; + + private Lazy _documentationProvider; + + public ModelDescriptionGenerator(HttpConfiguration config) + { + if (config == null) + { + throw new ArgumentNullException("config"); + } + + _documentationProvider = new Lazy(() => config.Services.GetDocumentationProvider() as IModelDocumentationProvider); + GeneratedModels = new Dictionary(StringComparer.OrdinalIgnoreCase); + } + + public Dictionary GeneratedModels { get; private set; } + + private IModelDocumentationProvider DocumentationProvider + { + get + { + return _documentationProvider.Value; + } + } + + public ModelDescription GetOrCreateModelDescription(Type modelType) + { + if (modelType == null) + { + throw new ArgumentNullException("modelType"); + } + + Type underlyingType = Nullable.GetUnderlyingType(modelType); + if (underlyingType != null) + { + modelType = underlyingType; + } + + ModelDescription modelDescription; + string modelName = ModelNameHelper.GetModelName(modelType); + if (GeneratedModels.TryGetValue(modelName, out modelDescription)) + { + if (modelType != modelDescription.ModelType) + { + throw new InvalidOperationException( + String.Format( + CultureInfo.CurrentCulture, + "A model description could not be created. Duplicate model name '{0}' was found for types '{1}' and '{2}'. " + + "Use the [ModelName] attribute to change the model name for at least one of the types so that it has a unique name.", + modelName, + modelDescription.ModelType.FullName, + modelType.FullName)); + } + + return modelDescription; + } + + if (DefaultTypeDocumentation.ContainsKey(modelType)) + { + return GenerateSimpleTypeModelDescription(modelType); + } + + if (modelType.IsEnum) + { + return GenerateEnumTypeModelDescription(modelType); + } + + if (modelType.IsGenericType) + { + Type[] genericArguments = modelType.GetGenericArguments(); + + if (genericArguments.Length == 1) + { + Type enumerableType = typeof(IEnumerable<>).MakeGenericType(genericArguments); + if (enumerableType.IsAssignableFrom(modelType)) + { + return GenerateCollectionModelDescription(modelType, genericArguments[0]); + } + } + if (genericArguments.Length == 2) + { + Type dictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments); + if (dictionaryType.IsAssignableFrom(modelType)) + { + return GenerateDictionaryModelDescription(modelType, genericArguments[0], genericArguments[1]); + } + + Type keyValuePairType = typeof(KeyValuePair<,>).MakeGenericType(genericArguments); + if (keyValuePairType.IsAssignableFrom(modelType)) + { + return GenerateKeyValuePairModelDescription(modelType, genericArguments[0], genericArguments[1]); + } + } + } + + if (modelType.IsArray) + { + Type elementType = modelType.GetElementType(); + return GenerateCollectionModelDescription(modelType, elementType); + } + + if (modelType == typeof(NameValueCollection)) + { + return GenerateDictionaryModelDescription(modelType, typeof(string), typeof(string)); + } + + if (typeof(IDictionary).IsAssignableFrom(modelType)) + { + return GenerateDictionaryModelDescription(modelType, typeof(object), typeof(object)); + } + + if (typeof(IEnumerable).IsAssignableFrom(modelType)) + { + return GenerateCollectionModelDescription(modelType, typeof(object)); + } + + return GenerateComplexTypeModelDescription(modelType); + } + + // Change this to provide different name for the member. + private static string GetMemberName(MemberInfo member, bool hasDataContractAttribute) + { + JsonPropertyAttribute jsonProperty = member.GetCustomAttribute(); + if (jsonProperty != null && !String.IsNullOrEmpty(jsonProperty.PropertyName)) + { + return jsonProperty.PropertyName; + } + + if (hasDataContractAttribute) + { + DataMemberAttribute dataMember = member.GetCustomAttribute(); + if (dataMember != null && !String.IsNullOrEmpty(dataMember.Name)) + { + return dataMember.Name; + } + } + + return member.Name; + } + + private static bool ShouldDisplayMember(MemberInfo member, bool hasDataContractAttribute) + { + JsonIgnoreAttribute jsonIgnore = member.GetCustomAttribute(); + XmlIgnoreAttribute xmlIgnore = member.GetCustomAttribute(); + IgnoreDataMemberAttribute ignoreDataMember = member.GetCustomAttribute(); + NonSerializedAttribute nonSerialized = member.GetCustomAttribute(); + ApiExplorerSettingsAttribute apiExplorerSetting = member.GetCustomAttribute(); + + bool hasMemberAttribute = member.DeclaringType.IsEnum ? + member.GetCustomAttribute() != null : + member.GetCustomAttribute() != null; + + // Display member only if all the followings are true: + // no JsonIgnoreAttribute + // no XmlIgnoreAttribute + // no IgnoreDataMemberAttribute + // no NonSerializedAttribute + // no ApiExplorerSettingsAttribute with IgnoreApi set to true + // no DataContractAttribute without DataMemberAttribute or EnumMemberAttribute + return jsonIgnore == null && + xmlIgnore == null && + ignoreDataMember == null && + nonSerialized == null && + (apiExplorerSetting == null || !apiExplorerSetting.IgnoreApi) && + (!hasDataContractAttribute || hasMemberAttribute); + } + + private string CreateDefaultDocumentation(Type type) + { + string documentation; + if (DefaultTypeDocumentation.TryGetValue(type, out documentation)) + { + return documentation; + } + if (DocumentationProvider != null) + { + documentation = DocumentationProvider.GetDocumentation(type); + } + + return documentation; + } + + private void GenerateAnnotations(MemberInfo property, ParameterDescription propertyModel) + { + List annotations = new List(); + + IEnumerable attributes = property.GetCustomAttributes(); + foreach (Attribute attribute in attributes) + { + Func textGenerator; + if (AnnotationTextGenerator.TryGetValue(attribute.GetType(), out textGenerator)) + { + annotations.Add( + new ParameterAnnotation + { + AnnotationAttribute = attribute, + Documentation = textGenerator(attribute) + }); + } + } + + // Rearrange the annotations + annotations.Sort((x, y) => + { + // Special-case RequiredAttribute so that it shows up on top + if (x.AnnotationAttribute is RequiredAttribute) + { + return -1; + } + if (y.AnnotationAttribute is RequiredAttribute) + { + return 1; + } + + // Sort the rest based on alphabetic order of the documentation + return String.Compare(x.Documentation, y.Documentation, StringComparison.OrdinalIgnoreCase); + }); + + foreach (ParameterAnnotation annotation in annotations) + { + propertyModel.Annotations.Add(annotation); + } + } + + private CollectionModelDescription GenerateCollectionModelDescription(Type modelType, Type elementType) + { + ModelDescription collectionModelDescription = GetOrCreateModelDescription(elementType); + if (collectionModelDescription != null) + { + return new CollectionModelDescription + { + Name = ModelNameHelper.GetModelName(modelType), + ModelType = modelType, + ElementDescription = collectionModelDescription + }; + } + + return null; + } + + private ModelDescription GenerateComplexTypeModelDescription(Type modelType) + { + ComplexTypeModelDescription complexModelDescription = new ComplexTypeModelDescription + { + Name = ModelNameHelper.GetModelName(modelType), + ModelType = modelType, + Documentation = CreateDefaultDocumentation(modelType) + }; + + GeneratedModels.Add(complexModelDescription.Name, complexModelDescription); + bool hasDataContractAttribute = modelType.GetCustomAttribute() != null; + PropertyInfo[] properties = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance); + foreach (PropertyInfo property in properties) + { + if (ShouldDisplayMember(property, hasDataContractAttribute)) + { + ParameterDescription propertyModel = new ParameterDescription + { + Name = GetMemberName(property, hasDataContractAttribute) + }; + + if (DocumentationProvider != null) + { + propertyModel.Documentation = DocumentationProvider.GetDocumentation(property); + } + + GenerateAnnotations(property, propertyModel); + complexModelDescription.Properties.Add(propertyModel); + propertyModel.TypeDescription = GetOrCreateModelDescription(property.PropertyType); + } + } + + FieldInfo[] fields = modelType.GetFields(BindingFlags.Public | BindingFlags.Instance); + foreach (FieldInfo field in fields) + { + if (ShouldDisplayMember(field, hasDataContractAttribute)) + { + ParameterDescription propertyModel = new ParameterDescription + { + Name = GetMemberName(field, hasDataContractAttribute) + }; + + if (DocumentationProvider != null) + { + propertyModel.Documentation = DocumentationProvider.GetDocumentation(field); + } + + complexModelDescription.Properties.Add(propertyModel); + propertyModel.TypeDescription = GetOrCreateModelDescription(field.FieldType); + } + } + + return complexModelDescription; + } + + private DictionaryModelDescription GenerateDictionaryModelDescription(Type modelType, Type keyType, Type valueType) + { + ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType); + ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType); + + return new DictionaryModelDescription + { + Name = ModelNameHelper.GetModelName(modelType), + ModelType = modelType, + KeyModelDescription = keyModelDescription, + ValueModelDescription = valueModelDescription + }; + } + + private EnumTypeModelDescription GenerateEnumTypeModelDescription(Type modelType) + { + EnumTypeModelDescription enumDescription = new EnumTypeModelDescription + { + Name = ModelNameHelper.GetModelName(modelType), + ModelType = modelType, + Documentation = CreateDefaultDocumentation(modelType) + }; + bool hasDataContractAttribute = modelType.GetCustomAttribute() != null; + foreach (FieldInfo field in modelType.GetFields(BindingFlags.Public | BindingFlags.Static)) + { + if (ShouldDisplayMember(field, hasDataContractAttribute)) + { + EnumValueDescription enumValue = new EnumValueDescription + { + Name = field.Name, + Value = field.GetRawConstantValue().ToString() + }; + if (DocumentationProvider != null) + { + enumValue.Documentation = DocumentationProvider.GetDocumentation(field); + } + enumDescription.Values.Add(enumValue); + } + } + GeneratedModels.Add(enumDescription.Name, enumDescription); + + return enumDescription; + } + + private KeyValuePairModelDescription GenerateKeyValuePairModelDescription(Type modelType, Type keyType, Type valueType) + { + ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType); + ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType); + + return new KeyValuePairModelDescription + { + Name = ModelNameHelper.GetModelName(modelType), + ModelType = modelType, + KeyModelDescription = keyModelDescription, + ValueModelDescription = valueModelDescription + }; + } + + private ModelDescription GenerateSimpleTypeModelDescription(Type modelType) + { + SimpleTypeModelDescription simpleModelDescription = new SimpleTypeModelDescription + { + Name = ModelNameHelper.GetModelName(modelType), + ModelType = modelType, + Documentation = CreateDefaultDocumentation(modelType) + }; + GeneratedModels.Add(simpleModelDescription.Name, simpleModelDescription); + + return simpleModelDescription; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs new file mode 100644 index 00000000..932a38aa --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs @@ -0,0 +1,18 @@ +using System; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + /// + /// Use this attribute to change the name of the generated for a type. + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false, Inherited = false)] + public sealed class ModelNameAttribute : Attribute + { + public ModelNameAttribute(string name) + { + Name = name; + } + + public string Name { get; private set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs new file mode 100644 index 00000000..e3d2fef3 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs @@ -0,0 +1,36 @@ +using System; +using System.Globalization; +using System.Linq; +using System.Reflection; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + internal static class ModelNameHelper + { + // Modify this to provide custom model name mapping. + public static string GetModelName(Type type) + { + ModelNameAttribute modelNameAttribute = type.GetCustomAttribute(); + if (modelNameAttribute != null && !String.IsNullOrEmpty(modelNameAttribute.Name)) + { + return modelNameAttribute.Name; + } + + string modelName = type.Name; + if (type.IsGenericType) + { + // Format the generic type name to something like: GenericOfAgurment1AndArgument2 + Type genericType = type.GetGenericTypeDefinition(); + Type[] genericArguments = type.GetGenericArguments(); + string genericTypeName = genericType.Name; + + // Trim the generic parameter counts from the name + genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`')); + string[] argumentTypeNames = genericArguments.Select(t => GetModelName(t)).ToArray(); + modelName = String.Format(CultureInfo.InvariantCulture, "{0}Of{1}", genericTypeName, String.Join("And", argumentTypeNames)); + } + + return modelName; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs new file mode 100644 index 00000000..62692ab9 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs @@ -0,0 +1,11 @@ +using System; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class ParameterAnnotation + { + public Attribute AnnotationAttribute { get; set; } + + public string Documentation { get; set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs new file mode 100644 index 00000000..94588bce --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class ParameterDescription + { + public ParameterDescription() + { + Annotations = new Collection(); + } + + public Collection Annotations { get; private set; } + + public string Documentation { get; set; } + + public string Name { get; set; } + + public ModelDescription TypeDescription { get; set; } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs new file mode 100644 index 00000000..6c4fa744 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs @@ -0,0 +1,6 @@ +namespace $safeprojectname$.Areas.HelpPage.ModelDescriptions +{ + public class SimpleTypeModelDescription : ModelDescription + { + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Models/HelpPageApiModel.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Models/HelpPageApiModel.cs new file mode 100644 index 00000000..2f96a123 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Models/HelpPageApiModel.cs @@ -0,0 +1,108 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Net.Http.Headers; +using System.Web.Http.Description; +using $safeprojectname$.Areas.HelpPage.ModelDescriptions; + +namespace $safeprojectname$.Areas.HelpPage.Models +{ + /// + /// The model that represents an API displayed on the help page. + /// + public class HelpPageApiModel + { + /// + /// Initializes a new instance of the class. + /// + public HelpPageApiModel() + { + UriParameters = new Collection(); + SampleRequests = new Dictionary(); + SampleResponses = new Dictionary(); + ErrorMessages = new Collection(); + } + + /// + /// Gets or sets the that describes the API. + /// + public ApiDescription ApiDescription { get; set; } + + /// + /// Gets or sets the collection that describes the URI parameters for the API. + /// + public Collection UriParameters { get; private set; } + + /// + /// Gets or sets the documentation for the request. + /// + public string RequestDocumentation { get; set; } + + /// + /// Gets or sets the that describes the request body. + /// + public ModelDescription RequestModelDescription { get; set; } + + /// + /// Gets the request body parameter descriptions. + /// + public IList RequestBodyParameters + { + get + { + return GetParameterDescriptions(RequestModelDescription); + } + } + + /// + /// Gets or sets the that describes the resource. + /// + public ModelDescription ResourceDescription { get; set; } + + /// + /// Gets the resource property descriptions. + /// + public IList ResourceProperties + { + get + { + return GetParameterDescriptions(ResourceDescription); + } + } + + /// + /// Gets the sample requests associated with the API. + /// + public IDictionary SampleRequests { get; private set; } + + /// + /// Gets the sample responses associated with the API. + /// + public IDictionary SampleResponses { get; private set; } + + /// + /// Gets the error messages associated with this model. + /// + public Collection ErrorMessages { get; private set; } + + private static IList GetParameterDescriptions(ModelDescription modelDescription) + { + ComplexTypeModelDescription complexTypeModelDescription = modelDescription as ComplexTypeModelDescription; + if (complexTypeModelDescription != null) + { + return complexTypeModelDescription.Properties; + } + + CollectionModelDescription collectionModelDescription = modelDescription as CollectionModelDescription; + if (collectionModelDescription != null) + { + complexTypeModelDescription = collectionModelDescription.ElementDescription as ComplexTypeModelDescription; + if (complexTypeModelDescription != null) + { + return complexTypeModelDescription.Properties; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs new file mode 100644 index 00000000..fd42587e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs @@ -0,0 +1,444 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Formatting; +using System.Net.Http.Headers; +using System.Web.Http.Description; +using System.Xml.Linq; +using Newtonsoft.Json; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// This class will generate the samples for the help page. + /// + public class HelpPageSampleGenerator + { + /// + /// Initializes a new instance of the class. + /// + public HelpPageSampleGenerator() + { + ActualHttpMessageTypes = new Dictionary(); + ActionSamples = new Dictionary(); + SampleObjects = new Dictionary(); + SampleObjectFactories = new List> + { + DefaultSampleObjectFactory, + }; + } + + /// + /// Gets CLR types that are used as the content of or . + /// + public IDictionary ActualHttpMessageTypes { get; internal set; } + + /// + /// Gets the objects that are used directly as samples for certain actions. + /// + public IDictionary ActionSamples { get; internal set; } + + /// + /// Gets the objects that are serialized as samples by the supported formatters. + /// + public IDictionary SampleObjects { get; internal set; } + + /// + /// Gets factories for the objects that the supported formatters will serialize as samples. Processed in order, + /// stopping when the factory successfully returns a non- object. + /// + /// + /// Collection includes just initially. Use + /// SampleObjectFactories.Insert(0, func) to provide an override and + /// SampleObjectFactories.Add(func) to provide a fallback. + [SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", + Justification = "This is an appropriate nesting of generic types")] + public IList> SampleObjectFactories { get; private set; } + + /// + /// Gets the request body samples for a given . + /// + /// The . + /// The samples keyed by media type. + public IDictionary GetSampleRequests(ApiDescription api) + { + return GetSample(api, SampleDirection.Request); + } + + /// + /// Gets the response body samples for a given . + /// + /// The . + /// The samples keyed by media type. + public IDictionary GetSampleResponses(ApiDescription api) + { + return GetSample(api, SampleDirection.Response); + } + + /// + /// Gets the request or response body samples. + /// + /// The . + /// The value indicating whether the sample is for a request or for a response. + /// The samples keyed by media type. + public virtual IDictionary GetSample(ApiDescription api, SampleDirection sampleDirection) + { + if (api == null) + { + throw new ArgumentNullException("api"); + } + string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName; + string actionName = api.ActionDescriptor.ActionName; + IEnumerable parameterNames = api.ParameterDescriptions.Select(p => p.Name); + Collection formatters; + Type type = ResolveType(api, controllerName, actionName, parameterNames, sampleDirection, out formatters); + var samples = new Dictionary(); + + // Use the samples provided directly for actions + var actionSamples = GetAllActionSamples(controllerName, actionName, parameterNames, sampleDirection); + foreach (var actionSample in actionSamples) + { + samples.Add(actionSample.Key.MediaType, WrapSampleIfString(actionSample.Value)); + } + + // Do the sample generation based on formatters only if an action doesn't return an HttpResponseMessage. + // Here we cannot rely on formatters because we don't know what's in the HttpResponseMessage, it might not even use formatters. + if (type != null && !typeof(HttpResponseMessage).IsAssignableFrom(type)) + { + object sampleObject = GetSampleObject(type); + foreach (var formatter in formatters) + { + foreach (MediaTypeHeaderValue mediaType in formatter.SupportedMediaTypes) + { + if (!samples.ContainsKey(mediaType)) + { + object sample = GetActionSample(controllerName, actionName, parameterNames, type, formatter, mediaType, sampleDirection); + + // If no sample found, try generate sample using formatter and sample object + if (sample == null && sampleObject != null) + { + sample = WriteSampleObjectUsingFormatter(formatter, sampleObject, type, mediaType); + } + + samples.Add(mediaType, WrapSampleIfString(sample)); + } + } + } + } + + return samples; + } + + /// + /// Search for samples that are provided directly through . + /// + /// Name of the controller. + /// Name of the action. + /// The parameter names. + /// The CLR type. + /// The formatter. + /// The media type. + /// The value indicating whether the sample is for a request or for a response. + /// The sample that matches the parameters. + public virtual object GetActionSample(string controllerName, string actionName, IEnumerable parameterNames, Type type, MediaTypeFormatter formatter, MediaTypeHeaderValue mediaType, SampleDirection sampleDirection) + { + object sample; + + // First, try to get the sample provided for the specified mediaType, sampleDirection, controllerName, actionName and parameterNames. + // If not found, try to get the sample provided for the specified mediaType, sampleDirection, controllerName and actionName regardless of the parameterNames. + // If still not found, try to get the sample provided for the specified mediaType and type. + // Finally, try to get the sample provided for the specified mediaType. + if (ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, parameterNames), out sample) || + ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, new[] { "*" }), out sample) || + ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, type), out sample) || + ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType), out sample)) + { + return sample; + } + + return null; + } + + /// + /// Gets the sample object that will be serialized by the formatters. + /// First, it will look at the . If no sample object is found, it will try to create + /// one using (which wraps an ) and other + /// factories in . + /// + /// The type. + /// The sample object. + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", + Justification = "Even if all items in SampleObjectFactories throw, problem will be visible as missing sample.")] + public virtual object GetSampleObject(Type type) + { + object sampleObject; + + if (!SampleObjects.TryGetValue(type, out sampleObject)) + { + // No specific object available, try our factories. + foreach (Func factory in SampleObjectFactories) + { + if (factory == null) + { + continue; + } + + try + { + sampleObject = factory(this, type); + if (sampleObject != null) + { + break; + } + } + catch + { + // Ignore any problems encountered in the factory; go on to the next one (if any). + } + } + } + + return sampleObject; + } + + /// + /// Resolves the actual type of passed to the in an action. + /// + /// The . + /// The type. + public virtual Type ResolveHttpRequestMessageType(ApiDescription api) + { + string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName; + string actionName = api.ActionDescriptor.ActionName; + IEnumerable parameterNames = api.ParameterDescriptions.Select(p => p.Name); + Collection formatters; + return ResolveType(api, controllerName, actionName, parameterNames, SampleDirection.Request, out formatters); + } + + /// + /// Resolves the type of the action parameter or return value when or is used. + /// + /// The . + /// Name of the controller. + /// Name of the action. + /// The parameter names. + /// The value indicating whether the sample is for a request or a response. + /// The formatters. + [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", Justification = "This is only used in advanced scenarios.")] + public virtual Type ResolveType(ApiDescription api, string controllerName, string actionName, IEnumerable parameterNames, SampleDirection sampleDirection, out Collection formatters) + { + if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection)) + { + throw new InvalidEnumArgumentException("sampleDirection", (int)sampleDirection, typeof(SampleDirection)); + } + if (api == null) + { + throw new ArgumentNullException("api"); + } + Type type; + if (ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, parameterNames), out type) || + ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, new[] { "*" }), out type)) + { + // Re-compute the supported formatters based on type + Collection newFormatters = new Collection(); + foreach (var formatter in api.ActionDescriptor.Configuration.Formatters) + { + if (IsFormatSupported(sampleDirection, formatter, type)) + { + newFormatters.Add(formatter); + } + } + formatters = newFormatters; + } + else + { + switch (sampleDirection) + { + case SampleDirection.Request: + ApiParameterDescription requestBodyParameter = api.ParameterDescriptions.FirstOrDefault(p => p.Source == ApiParameterSource.FromBody); + type = requestBodyParameter == null ? null : requestBodyParameter.ParameterDescriptor.ParameterType; + formatters = api.SupportedRequestBodyFormatters; + break; + case SampleDirection.Response: + default: + type = api.ResponseDescription.ResponseType ?? api.ResponseDescription.DeclaredType; + formatters = api.SupportedResponseFormatters; + break; + } + } + + return type; + } + + /// + /// Writes the sample object using formatter. + /// + /// The formatter. + /// The value. + /// The type. + /// Type of the media. + /// + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "The exception is recorded as InvalidSample.")] + public virtual object WriteSampleObjectUsingFormatter(MediaTypeFormatter formatter, object value, Type type, MediaTypeHeaderValue mediaType) + { + if (formatter == null) + { + throw new ArgumentNullException("formatter"); + } + if (mediaType == null) + { + throw new ArgumentNullException("mediaType"); + } + + object sample = String.Empty; + MemoryStream ms = null; + HttpContent content = null; + try + { + if (formatter.CanWriteType(type)) + { + ms = new MemoryStream(); + content = new ObjectContent(type, value, formatter, mediaType); + formatter.WriteToStreamAsync(type, value, ms, content, null).Wait(); + ms.Position = 0; + StreamReader reader = new StreamReader(ms); + string serializedSampleString = reader.ReadToEnd(); + if (mediaType.MediaType.ToUpperInvariant().Contains("XML")) + { + serializedSampleString = TryFormatXml(serializedSampleString); + } + else if (mediaType.MediaType.ToUpperInvariant().Contains("JSON")) + { + serializedSampleString = TryFormatJson(serializedSampleString); + } + + sample = new TextSample(serializedSampleString); + } + else + { + sample = new InvalidSample(String.Format( + CultureInfo.CurrentCulture, + "Failed to generate the sample for media type '{0}'. Cannot use formatter '{1}' to write type '{2}'.", + mediaType, + formatter.GetType().Name, + type.Name)); + } + } + catch (Exception e) + { + sample = new InvalidSample(String.Format( + CultureInfo.CurrentCulture, + "An exception has occurred while using the formatter '{0}' to generate sample for media type '{1}'. Exception message: {2}", + formatter.GetType().Name, + mediaType.MediaType, + UnwrapException(e).Message)); + } + finally + { + if (ms != null) + { + ms.Dispose(); + } + if (content != null) + { + content.Dispose(); + } + } + + return sample; + } + + internal static Exception UnwrapException(Exception exception) + { + AggregateException aggregateException = exception as AggregateException; + if (aggregateException != null) + { + return aggregateException.Flatten().InnerException; + } + return exception; + } + + // Default factory for sample objects + private static object DefaultSampleObjectFactory(HelpPageSampleGenerator sampleGenerator, Type type) + { + // Try to create a default sample object + ObjectGenerator objectGenerator = new ObjectGenerator(); + return objectGenerator.GenerateObject(type); + } + + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Handling the failure by returning the original string.")] + private static string TryFormatJson(string str) + { + try + { + object parsedJson = JsonConvert.DeserializeObject(str); + return JsonConvert.SerializeObject(parsedJson, Formatting.Indented); + } + catch + { + // can't parse JSON, return the original string + return str; + } + } + + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Handling the failure by returning the original string.")] + private static string TryFormatXml(string str) + { + try + { + XDocument xml = XDocument.Parse(str); + return xml.ToString(); + } + catch + { + // can't parse XML, return the original string + return str; + } + } + + private static bool IsFormatSupported(SampleDirection sampleDirection, MediaTypeFormatter formatter, Type type) + { + switch (sampleDirection) + { + case SampleDirection.Request: + return formatter.CanReadType(type); + case SampleDirection.Response: + return formatter.CanWriteType(type); + } + return false; + } + + private IEnumerable> GetAllActionSamples(string controllerName, string actionName, IEnumerable parameterNames, SampleDirection sampleDirection) + { + HashSet parameterNamesSet = new HashSet(parameterNames, StringComparer.OrdinalIgnoreCase); + foreach (var sample in ActionSamples) + { + HelpPageSampleKey sampleKey = sample.Key; + if (String.Equals(controllerName, sampleKey.ControllerName, StringComparison.OrdinalIgnoreCase) && + String.Equals(actionName, sampleKey.ActionName, StringComparison.OrdinalIgnoreCase) && + (sampleKey.ParameterNames.SetEquals(new[] { "*" }) || parameterNamesSet.SetEquals(sampleKey.ParameterNames)) && + sampleDirection == sampleKey.SampleDirection) + { + yield return sample; + } + } + } + + private static object WrapSampleIfString(object sample) + { + string stringSample = sample as string; + if (stringSample != null) + { + return new TextSample(stringSample); + } + + return sample; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs new file mode 100644 index 00000000..b4321ee1 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Net.Http.Headers; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// This is used to identify the place where the sample should be applied. + /// + public class HelpPageSampleKey + { + /// + /// Creates a new based on media type. + /// + /// The media type. + public HelpPageSampleKey(MediaTypeHeaderValue mediaType) + { + if (mediaType == null) + { + throw new ArgumentNullException("mediaType"); + } + + ActionName = String.Empty; + ControllerName = String.Empty; + MediaType = mediaType; + ParameterNames = new HashSet(StringComparer.OrdinalIgnoreCase); + } + + /// + /// Creates a new based on media type and CLR type. + /// + /// The media type. + /// The CLR type. + public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type) + : this(mediaType) + { + if (type == null) + { + throw new ArgumentNullException("type"); + } + + ParameterType = type; + } + + /// + /// Creates a new based on , controller name, action name and parameter names. + /// + /// The . + /// Name of the controller. + /// Name of the action. + /// The parameter names. + public HelpPageSampleKey(SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable parameterNames) + { + if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection)) + { + throw new InvalidEnumArgumentException("sampleDirection", (int)sampleDirection, typeof(SampleDirection)); + } + if (controllerName == null) + { + throw new ArgumentNullException("controllerName"); + } + if (actionName == null) + { + throw new ArgumentNullException("actionName"); + } + if (parameterNames == null) + { + throw new ArgumentNullException("parameterNames"); + } + + ControllerName = controllerName; + ActionName = actionName; + ParameterNames = new HashSet(parameterNames, StringComparer.OrdinalIgnoreCase); + SampleDirection = sampleDirection; + } + + /// + /// Creates a new based on media type, , controller name, action name and parameter names. + /// + /// The media type. + /// The . + /// Name of the controller. + /// Name of the action. + /// The parameter names. + public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable parameterNames) + : this(sampleDirection, controllerName, actionName, parameterNames) + { + if (mediaType == null) + { + throw new ArgumentNullException("mediaType"); + } + + MediaType = mediaType; + } + + /// + /// Gets the name of the controller. + /// + /// + /// The name of the controller. + /// + public string ControllerName { get; private set; } + + /// + /// Gets the name of the action. + /// + /// + /// The name of the action. + /// + public string ActionName { get; private set; } + + /// + /// Gets the media type. + /// + /// + /// The media type. + /// + public MediaTypeHeaderValue MediaType { get; private set; } + + /// + /// Gets the parameter names. + /// + public HashSet ParameterNames { get; private set; } + + public Type ParameterType { get; private set; } + + /// + /// Gets the . + /// + public SampleDirection? SampleDirection { get; private set; } + + public override bool Equals(object obj) + { + HelpPageSampleKey otherKey = obj as HelpPageSampleKey; + if (otherKey == null) + { + return false; + } + + return String.Equals(ControllerName, otherKey.ControllerName, StringComparison.OrdinalIgnoreCase) && + String.Equals(ActionName, otherKey.ActionName, StringComparison.OrdinalIgnoreCase) && + (MediaType == otherKey.MediaType || (MediaType != null && MediaType.Equals(otherKey.MediaType))) && + ParameterType == otherKey.ParameterType && + SampleDirection == otherKey.SampleDirection && + ParameterNames.SetEquals(otherKey.ParameterNames); + } + + public override int GetHashCode() + { + int hashCode = ControllerName.ToUpperInvariant().GetHashCode() ^ ActionName.ToUpperInvariant().GetHashCode(); + if (MediaType != null) + { + hashCode ^= MediaType.GetHashCode(); + } + if (SampleDirection != null) + { + hashCode ^= SampleDirection.GetHashCode(); + } + if (ParameterType != null) + { + hashCode ^= ParameterType.GetHashCode(); + } + foreach (string parameterName in ParameterNames) + { + hashCode ^= parameterName.ToUpperInvariant().GetHashCode(); + } + + return hashCode; + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/ImageSample.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/ImageSample.cs new file mode 100644 index 00000000..14a28afb --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/ImageSample.cs @@ -0,0 +1,41 @@ +using System; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// This represents an image sample on the help page. There's a display template named ImageSample associated with this class. + /// + public class ImageSample + { + /// + /// Initializes a new instance of the class. + /// + /// The URL of an image. + public ImageSample(string src) + { + if (src == null) + { + throw new ArgumentNullException("src"); + } + Src = src; + } + + public string Src { get; private set; } + + public override bool Equals(object obj) + { + ImageSample other = obj as ImageSample; + return other != null && Src == other.Src; + } + + public override int GetHashCode() + { + return Src.GetHashCode(); + } + + public override string ToString() + { + return Src; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/InvalidSample.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/InvalidSample.cs new file mode 100644 index 00000000..5f6dad0a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/InvalidSample.cs @@ -0,0 +1,37 @@ +using System; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// This represents an invalid sample on the help page. There's a display template named InvalidSample associated with this class. + /// + public class InvalidSample + { + public InvalidSample(string errorMessage) + { + if (errorMessage == null) + { + throw new ArgumentNullException("errorMessage"); + } + ErrorMessage = errorMessage; + } + + public string ErrorMessage { get; private set; } + + public override bool Equals(object obj) + { + InvalidSample other = obj as InvalidSample; + return other != null && ErrorMessage == other.ErrorMessage; + } + + public override int GetHashCode() + { + return ErrorMessage.GetHashCode(); + } + + public override string ToString() + { + return ErrorMessage; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs new file mode 100644 index 00000000..8f2a13e3 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs @@ -0,0 +1,456 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Linq; +using System.Reflection; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// This class will create an object of a given type and populate it with sample data. + /// + public class ObjectGenerator + { + internal const int DefaultCollectionSize = 2; + private readonly SimpleTypeObjectGenerator SimpleObjectGenerator = new SimpleTypeObjectGenerator(); + + /// + /// Generates an object for a given type. The type needs to be public, have a public default constructor and settable public properties/fields. Currently it supports the following types: + /// Simple types: , , , , , etc. + /// Complex types: POCO types. + /// Nullables: . + /// Arrays: arrays of simple types or complex types. + /// Key value pairs: + /// Tuples: , , etc + /// Dictionaries: or anything deriving from . + /// Collections: , , , , , or anything deriving from or . + /// Queryables: , . + /// + /// The type. + /// An object of the given type. + public object GenerateObject(Type type) + { + return GenerateObject(type, new Dictionary()); + } + + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Here we just want to return null if anything goes wrong.")] + private object GenerateObject(Type type, Dictionary createdObjectReferences) + { + try + { + if (SimpleTypeObjectGenerator.CanGenerateObject(type)) + { + return SimpleObjectGenerator.GenerateObject(type); + } + + if (type.IsArray) + { + return GenerateArray(type, DefaultCollectionSize, createdObjectReferences); + } + + if (type.IsGenericType) + { + return GenerateGenericType(type, DefaultCollectionSize, createdObjectReferences); + } + + if (type == typeof(IDictionary)) + { + return GenerateDictionary(typeof(Hashtable), DefaultCollectionSize, createdObjectReferences); + } + + if (typeof(IDictionary).IsAssignableFrom(type)) + { + return GenerateDictionary(type, DefaultCollectionSize, createdObjectReferences); + } + + if (type == typeof(IList) || + type == typeof(IEnumerable) || + type == typeof(ICollection)) + { + return GenerateCollection(typeof(ArrayList), DefaultCollectionSize, createdObjectReferences); + } + + if (typeof(IList).IsAssignableFrom(type)) + { + return GenerateCollection(type, DefaultCollectionSize, createdObjectReferences); + } + + if (type == typeof(IQueryable)) + { + return GenerateQueryable(type, DefaultCollectionSize, createdObjectReferences); + } + + if (type.IsEnum) + { + return GenerateEnum(type); + } + + if (type.IsPublic || type.IsNestedPublic) + { + return GenerateComplexObject(type, createdObjectReferences); + } + } + catch + { + // Returns null if anything fails + return null; + } + + return null; + } + + private static object GenerateGenericType(Type type, int collectionSize, Dictionary createdObjectReferences) + { + Type genericTypeDefinition = type.GetGenericTypeDefinition(); + if (genericTypeDefinition == typeof(Nullable<>)) + { + return GenerateNullable(type, createdObjectReferences); + } + + if (genericTypeDefinition == typeof(KeyValuePair<,>)) + { + return GenerateKeyValuePair(type, createdObjectReferences); + } + + if (IsTuple(genericTypeDefinition)) + { + return GenerateTuple(type, createdObjectReferences); + } + + Type[] genericArguments = type.GetGenericArguments(); + if (genericArguments.Length == 1) + { + if (genericTypeDefinition == typeof(IList<>) || + genericTypeDefinition == typeof(IEnumerable<>) || + genericTypeDefinition == typeof(ICollection<>)) + { + Type collectionType = typeof(List<>).MakeGenericType(genericArguments); + return GenerateCollection(collectionType, collectionSize, createdObjectReferences); + } + + if (genericTypeDefinition == typeof(IQueryable<>)) + { + return GenerateQueryable(type, collectionSize, createdObjectReferences); + } + + Type closedCollectionType = typeof(ICollection<>).MakeGenericType(genericArguments[0]); + if (closedCollectionType.IsAssignableFrom(type)) + { + return GenerateCollection(type, collectionSize, createdObjectReferences); + } + } + + if (genericArguments.Length == 2) + { + if (genericTypeDefinition == typeof(IDictionary<,>)) + { + Type dictionaryType = typeof(Dictionary<,>).MakeGenericType(genericArguments); + return GenerateDictionary(dictionaryType, collectionSize, createdObjectReferences); + } + + Type closedDictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments[0], genericArguments[1]); + if (closedDictionaryType.IsAssignableFrom(type)) + { + return GenerateDictionary(type, collectionSize, createdObjectReferences); + } + } + + if (type.IsPublic || type.IsNestedPublic) + { + return GenerateComplexObject(type, createdObjectReferences); + } + + return null; + } + + private static object GenerateTuple(Type type, Dictionary createdObjectReferences) + { + Type[] genericArgs = type.GetGenericArguments(); + object[] parameterValues = new object[genericArgs.Length]; + bool failedToCreateTuple = true; + ObjectGenerator objectGenerator = new ObjectGenerator(); + for (int i = 0; i < genericArgs.Length; i++) + { + parameterValues[i] = objectGenerator.GenerateObject(genericArgs[i], createdObjectReferences); + failedToCreateTuple &= parameterValues[i] == null; + } + if (failedToCreateTuple) + { + return null; + } + object result = Activator.CreateInstance(type, parameterValues); + return result; + } + + private static bool IsTuple(Type genericTypeDefinition) + { + return genericTypeDefinition == typeof(Tuple<>) || + genericTypeDefinition == typeof(Tuple<,>) || + genericTypeDefinition == typeof(Tuple<,,>) || + genericTypeDefinition == typeof(Tuple<,,,>) || + genericTypeDefinition == typeof(Tuple<,,,,>) || + genericTypeDefinition == typeof(Tuple<,,,,,>) || + genericTypeDefinition == typeof(Tuple<,,,,,,>) || + genericTypeDefinition == typeof(Tuple<,,,,,,,>); + } + + private static object GenerateKeyValuePair(Type keyValuePairType, Dictionary createdObjectReferences) + { + Type[] genericArgs = keyValuePairType.GetGenericArguments(); + Type typeK = genericArgs[0]; + Type typeV = genericArgs[1]; + ObjectGenerator objectGenerator = new ObjectGenerator(); + object keyObject = objectGenerator.GenerateObject(typeK, createdObjectReferences); + object valueObject = objectGenerator.GenerateObject(typeV, createdObjectReferences); + if (keyObject == null && valueObject == null) + { + // Failed to create key and values + return null; + } + object result = Activator.CreateInstance(keyValuePairType, keyObject, valueObject); + return result; + } + + private static object GenerateArray(Type arrayType, int size, Dictionary createdObjectReferences) + { + Type type = arrayType.GetElementType(); + Array result = Array.CreateInstance(type, size); + bool areAllElementsNull = true; + ObjectGenerator objectGenerator = new ObjectGenerator(); + for (int i = 0; i < size; i++) + { + object element = objectGenerator.GenerateObject(type, createdObjectReferences); + result.SetValue(element, i); + areAllElementsNull &= element == null; + } + + if (areAllElementsNull) + { + return null; + } + + return result; + } + + private static object GenerateDictionary(Type dictionaryType, int size, Dictionary createdObjectReferences) + { + Type typeK = typeof(object); + Type typeV = typeof(object); + if (dictionaryType.IsGenericType) + { + Type[] genericArgs = dictionaryType.GetGenericArguments(); + typeK = genericArgs[0]; + typeV = genericArgs[1]; + } + + object result = Activator.CreateInstance(dictionaryType); + MethodInfo addMethod = dictionaryType.GetMethod("Add") ?? dictionaryType.GetMethod("TryAdd"); + MethodInfo containsMethod = dictionaryType.GetMethod("Contains") ?? dictionaryType.GetMethod("ContainsKey"); + ObjectGenerator objectGenerator = new ObjectGenerator(); + for (int i = 0; i < size; i++) + { + object newKey = objectGenerator.GenerateObject(typeK, createdObjectReferences); + if (newKey == null) + { + // Cannot generate a valid key + return null; + } + + bool containsKey = (bool)containsMethod.Invoke(result, new object[] { newKey }); + if (!containsKey) + { + object newValue = objectGenerator.GenerateObject(typeV, createdObjectReferences); + addMethod.Invoke(result, new object[] { newKey, newValue }); + } + } + + return result; + } + + private static object GenerateEnum(Type enumType) + { + Array possibleValues = Enum.GetValues(enumType); + if (possibleValues.Length > 0) + { + return possibleValues.GetValue(0); + } + return null; + } + + private static object GenerateQueryable(Type queryableType, int size, Dictionary createdObjectReferences) + { + bool isGeneric = queryableType.IsGenericType; + object list; + if (isGeneric) + { + Type listType = typeof(List<>).MakeGenericType(queryableType.GetGenericArguments()); + list = GenerateCollection(listType, size, createdObjectReferences); + } + else + { + list = GenerateArray(typeof(object[]), size, createdObjectReferences); + } + if (list == null) + { + return null; + } + if (isGeneric) + { + Type argumentType = typeof(IEnumerable<>).MakeGenericType(queryableType.GetGenericArguments()); + MethodInfo asQueryableMethod = typeof(Queryable).GetMethod("AsQueryable", new[] { argumentType }); + return asQueryableMethod.Invoke(null, new[] { list }); + } + + return Queryable.AsQueryable((IEnumerable)list); + } + + private static object GenerateCollection(Type collectionType, int size, Dictionary createdObjectReferences) + { + Type type = collectionType.IsGenericType ? + collectionType.GetGenericArguments()[0] : + typeof(object); + object result = Activator.CreateInstance(collectionType); + MethodInfo addMethod = collectionType.GetMethod("Add"); + bool areAllElementsNull = true; + ObjectGenerator objectGenerator = new ObjectGenerator(); + for (int i = 0; i < size; i++) + { + object element = objectGenerator.GenerateObject(type, createdObjectReferences); + addMethod.Invoke(result, new object[] { element }); + areAllElementsNull &= element == null; + } + + if (areAllElementsNull) + { + return null; + } + + return result; + } + + private static object GenerateNullable(Type nullableType, Dictionary createdObjectReferences) + { + Type type = nullableType.GetGenericArguments()[0]; + ObjectGenerator objectGenerator = new ObjectGenerator(); + return objectGenerator.GenerateObject(type, createdObjectReferences); + } + + private static object GenerateComplexObject(Type type, Dictionary createdObjectReferences) + { + object result = null; + + if (createdObjectReferences.TryGetValue(type, out result)) + { + // The object has been created already, just return it. This will handle the circular reference case. + return result; + } + + if (type.IsValueType) + { + result = Activator.CreateInstance(type); + } + else + { + ConstructorInfo defaultCtor = type.GetConstructor(Type.EmptyTypes); + if (defaultCtor == null) + { + // Cannot instantiate the type because it doesn't have a default constructor + return null; + } + + result = defaultCtor.Invoke(new object[0]); + } + createdObjectReferences.Add(type, result); + SetPublicProperties(type, result, createdObjectReferences); + SetPublicFields(type, result, createdObjectReferences); + return result; + } + + private static void SetPublicProperties(Type type, object obj, Dictionary createdObjectReferences) + { + PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); + ObjectGenerator objectGenerator = new ObjectGenerator(); + foreach (PropertyInfo property in properties) + { + if (property.CanWrite) + { + object propertyValue = objectGenerator.GenerateObject(property.PropertyType, createdObjectReferences); + property.SetValue(obj, propertyValue, null); + } + } + } + + private static void SetPublicFields(Type type, object obj, Dictionary createdObjectReferences) + { + FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance); + ObjectGenerator objectGenerator = new ObjectGenerator(); + foreach (FieldInfo field in fields) + { + object fieldValue = objectGenerator.GenerateObject(field.FieldType, createdObjectReferences); + field.SetValue(obj, fieldValue); + } + } + + private class SimpleTypeObjectGenerator + { + private long _index = 0; + private static readonly Dictionary> DefaultGenerators = InitializeGenerators(); + + [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "These are simple type factories and cannot be split up.")] + private static Dictionary> InitializeGenerators() + { + return new Dictionary> + { + { typeof(Boolean), index => true }, + { typeof(Byte), index => (Byte)64 }, + { typeof(Char), index => (Char)65 }, + { typeof(DateTime), index => DateTime.Now }, + { typeof(DateTimeOffset), index => new DateTimeOffset(DateTime.Now) }, + { typeof(DBNull), index => DBNull.Value }, + { typeof(Decimal), index => (Decimal)index }, + { typeof(Double), index => (Double)(index + 0.1) }, + { typeof(Guid), index => Guid.NewGuid() }, + { typeof(Int16), index => (Int16)(index % Int16.MaxValue) }, + { typeof(Int32), index => (Int32)(index % Int32.MaxValue) }, + { typeof(Int64), index => (Int64)index }, + { typeof(Object), index => new object() }, + { typeof(SByte), index => (SByte)64 }, + { typeof(Single), index => (Single)(index + 0.1) }, + { + typeof(String), index => + { + return String.Format(CultureInfo.CurrentCulture, "sample string {0}", index); + } + }, + { + typeof(TimeSpan), index => + { + return TimeSpan.FromTicks(1234567); + } + }, + { typeof(UInt16), index => (UInt16)(index % UInt16.MaxValue) }, + { typeof(UInt32), index => (UInt32)(index % UInt32.MaxValue) }, + { typeof(UInt64), index => (UInt64)index }, + { + typeof(Uri), index => + { + return new Uri(String.Format(CultureInfo.CurrentCulture, "http://webapihelppage{0}.com", index)); + } + }, + }; + } + + public static bool CanGenerateObject(Type type) + { + return DefaultGenerators.ContainsKey(type); + } + + public object GenerateObject(Type type) + { + return DefaultGenerators[type](++_index); + } + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/SampleDirection.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/SampleDirection.cs new file mode 100644 index 00000000..ceeed142 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/SampleDirection.cs @@ -0,0 +1,11 @@ +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// Indicates whether the sample is used for request or response + /// + public enum SampleDirection + { + Request = 0, + Response + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/TextSample.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/TextSample.cs new file mode 100644 index 00000000..e0c6d51e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/SampleGeneration/TextSample.cs @@ -0,0 +1,37 @@ +using System; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// This represents a preformatted text sample on the help page. There's a display template named TextSample associated with this class. + /// + public class TextSample + { + public TextSample(string text) + { + if (text == null) + { + throw new ArgumentNullException("text"); + } + Text = text; + } + + public string Text { get; private set; } + + public override bool Equals(object obj) + { + TextSample other = obj as TextSample; + return other != null && Text == other.Text; + } + + public override int GetHashCode() + { + return Text.GetHashCode(); + } + + public override string ToString() + { + return Text; + } + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/TestClient.css b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/TestClient.css new file mode 100644 index 00000000..6c733af3 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/TestClient.css @@ -0,0 +1,38 @@ +.httpMethod { + width: 20%; +} + +.uriPath { + width: 70%; +} + +.sampleArea { + width: 95%; +} + +#testClientButton { + position: fixed; + right: 0; + bottom: 0; + width: 150px; + font-size: x-large; +} + +select { + margin-top: 10px; +} + +.panel { + max-height: 120px; + overflow: auto; +} + + .panel input { + width: 150px; + } + +.uriParameterLabel { + width: 100px; + float: left; + border: none; +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/Api.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/Api.cshtml new file mode 100644 index 00000000..449e553e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/Api.cshtml @@ -0,0 +1,28 @@ +@using System.Web.Http +@using $safeprojectname$.Areas.HelpPage.Models +@model HelpPageApiModel + +@{ + var description = Model.ApiDescription; + ViewBag.Title = description.HttpMethod.Method + " " + description.RelativePath; +} + + +
+ +
+ @Html.DisplayForModel() +
+
+ +@Html.DisplayForModel("TestClientDialogs") +@section Scripts { + @Html.DisplayForModel("TestClientReferences") + +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml new file mode 100644 index 00000000..d0316096 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml @@ -0,0 +1,41 @@ +@using System.Web.Http +@using System.Web.Http.Controllers +@using System.Web.Http.Description +@using $safeprojectname$.Areas.HelpPage +@using $safeprojectname$.Areas.HelpPage.Models +@model IGrouping + +@{ + var controllerDocumentation = ViewBag.DocumentationProvider != null ? + ViewBag.DocumentationProvider.GetDocumentation(Model.Key) : + null; +} + +

@Model.Key.ControllerName

+@if (!String.IsNullOrEmpty(controllerDocumentation)) +{ +

@controllerDocumentation

+} + + + + + + @foreach (var api in Model) + { + + + + + } + +
APIDescription
@api.HttpMethod.Method @api.RelativePath + @if (api.Documentation != null) + { +

@api.Documentation

+ } + else + { +

No documentation available.

+ } +
\ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml new file mode 100644 index 00000000..e3e30030 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml @@ -0,0 +1,6 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model CollectionModelDescription +@if (Model.ElementDescription is ComplexTypeModelDescription) +{ + @Html.DisplayFor(m => m.ElementDescription) +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml new file mode 100644 index 00000000..bab04241 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml @@ -0,0 +1,3 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model ComplexTypeModelDescription +@Html.DisplayFor(m => m.Properties, "Parameters") \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml new file mode 100644 index 00000000..d8a22d44 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml @@ -0,0 +1,4 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model DictionaryModelDescription +Dictionary of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.KeyModelDescription }) [key] +and @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ValueModelDescription }) [value] \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml new file mode 100644 index 00000000..51374632 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml @@ -0,0 +1,24 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model EnumTypeModelDescription + +

Possible enumeration values:

+ + + + + + + @foreach (EnumValueDescription value in Model.Values) + { + + + + + + } + +
NameValueDescription
@value.Name +

@value.Value

+
+

@value.Documentation

+
\ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml new file mode 100644 index 00000000..8ddde7aa --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml @@ -0,0 +1,67 @@ +@using System.Web.Http +@using System.Web.Http.Description +@using $safeprojectname$.Areas.HelpPage.Models +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model HelpPageApiModel + +@{ + ApiDescription description = Model.ApiDescription; +} +

@description.HttpMethod.Method @description.RelativePath

+
+

@description.Documentation

+ +

Request Information

+ +

URI Parameters

+ @Html.DisplayFor(m => m.UriParameters, "Parameters") + +

Body Parameters

+ +

@Model.RequestDocumentation

+ + @if (Model.RequestModelDescription != null) + { + @Html.DisplayFor(m => m.RequestModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.RequestModelDescription }) + if (Model.RequestBodyParameters != null) + { + @Html.DisplayFor(m => m.RequestBodyParameters, "Parameters") + } + } + else + { +

None.

+ } + + @if (Model.SampleRequests.Count > 0) + { +

Request Formats

+ @Html.DisplayFor(m => m.SampleRequests, "Samples") + } + +

Response Information

+ +

Resource Description

+ +

@description.ResponseDescription.Documentation

+ + @if (Model.ResourceDescription != null) + { + @Html.DisplayFor(m => m.ResourceDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ResourceDescription }) + if (Model.ResourceProperties != null) + { + @Html.DisplayFor(m => m.ResourceProperties, "Parameters") + } + } + else + { +

None.

+ } + + @if (Model.SampleResponses.Count > 0) + { +

Response Formats

+ @Html.DisplayFor(m => m.SampleResponses, "Samples") + } + +
\ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml new file mode 100644 index 00000000..59e14c2f --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml @@ -0,0 +1,4 @@ +@using $safeprojectname$.Areas.HelpPage +@model ImageSample + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml new file mode 100644 index 00000000..50564d9a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml @@ -0,0 +1,13 @@ +@using $safeprojectname$.Areas.HelpPage +@model InvalidSample + +@if (HttpContext.Current.IsDebuggingEnabled) +{ +
+

@Model.ErrorMessage

+
+} +else +{ +

Sample not available.

+} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml new file mode 100644 index 00000000..5a4a95c5 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml @@ -0,0 +1,4 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model KeyValuePairModelDescription +Pair of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.KeyModelDescription }) [key] +and @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ValueModelDescription }) [value] \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml new file mode 100644 index 00000000..dfc9aecb --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml @@ -0,0 +1,26 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model Type +@{ + ModelDescription modelDescription = ViewBag.modelDescription; + if (modelDescription is ComplexTypeModelDescription || modelDescription is EnumTypeModelDescription) + { + if (Model == typeof(Object)) + { + @:Object + } + else + { + @Html.ActionLink(modelDescription.Name, "ResourceModel", "Help", new { modelName = modelDescription.Name }, null) + } + } + else if (modelDescription is CollectionModelDescription) + { + var collectionDescription = modelDescription as CollectionModelDescription; + var elementDescription = collectionDescription.ElementDescription; + @:Collection of @Html.DisplayFor(m => elementDescription.ModelType, "ModelDescriptionLink", new { modelDescription = elementDescription }) + } + else + { + @Html.DisplayFor(m => modelDescription) + } +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml new file mode 100644 index 00000000..894d3531 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml @@ -0,0 +1,48 @@ +@using System.Collections.Generic +@using System.Collections.ObjectModel +@using System.Web.Http.Description +@using System.Threading +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model IList + +@if (Model.Count > 0) +{ + + + + + + @foreach (ParameterDescription parameter in Model) + { + ModelDescription modelDescription = parameter.TypeDescription; + + + + + + + } + +
NameDescriptionTypeAdditional information
@parameter.Name +

@parameter.Documentation

+
+ @Html.DisplayFor(m => modelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = modelDescription }) + + @if (parameter.Annotations.Count > 0) + { + foreach (var annotation in parameter.Annotations) + { +

@annotation.Documentation

+ } + } + else + { +

None.

+ } +
+} +else +{ +

None.

+} + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml new file mode 100644 index 00000000..c19596fb --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml @@ -0,0 +1,30 @@ +@using System.Net.Http.Headers +@model Dictionary + +@{ + // Group the samples into a single tab if they are the same. + Dictionary samples = Model.GroupBy(pair => pair.Value).ToDictionary( + pair => String.Join(", ", pair.Select(m => m.Key.ToString()).ToArray()), + pair => pair.Key); + var mediaTypes = samples.Keys; +} +
+ @foreach (var mediaType in mediaTypes) + { +

@mediaType

+
+ Sample: + @{ + var sample = samples[mediaType]; + if (sample == null) + { +

Sample not available.

+ } + else + { + @Html.DisplayFor(s => sample); + } + } +
+ } +
\ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml new file mode 100644 index 00000000..c26f1c07 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml @@ -0,0 +1,3 @@ +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model SimpleTypeModelDescription +@Model.Documentation \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TestClientDialogs.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TestClientDialogs.cshtml new file mode 100644 index 00000000..5b3d4ed1 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TestClientDialogs.cshtml @@ -0,0 +1,87 @@ +@using System.Web.Http +@using $safeprojectname$.Areas.HelpPage.Models +@model HelpPageApiModel + +@{ + var description = Model.ApiDescription; + string applicationPath = Request.ApplicationPath; + if (!applicationPath.EndsWith("/")) + { + applicationPath += "/"; + } +} + + +
+ + +
+
URI parameters
+
+
+
+ + = + + +
+
+
+
+
Headers | Add header +
+
+
+
+ + : + + Delete +
+
+
+
+ Body
+
+
+ Samples: + +
+
+
+
+ +
+
+
Status
+ +
+
+
Headers
+ +
+
+
Body
+ +
+
+ + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TestClientReferences.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TestClientReferences.cshtml new file mode 100644 index 00000000..4cdd3a0e --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TestClientReferences.cshtml @@ -0,0 +1,10 @@ +@using System.Text.RegularExpressions + + +@* Automatically grabs the installed version of JQuery/JQueryUI/KnockoutJS *@ +@{var filePattern = @"(jquery-[0-9]+.[0-9]+.[0-9]+.js|jquery-ui-[0-9]+.[0-9]+.[0-9]+.js|knockout-[0-9]+.[0-9]+.[0-9]+.js)";} +@foreach (var item in Directory.GetFiles(Server.MapPath(@"~/Scripts")).Where(f => Regex.IsMatch(f, filePattern))) +{ + +} + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml new file mode 100644 index 00000000..830a76a5 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml @@ -0,0 +1,6 @@ +@using $safeprojectname$.Areas.HelpPage +@model TextSample + +
+@Model.Text
+
\ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/Index.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/Index.cshtml new file mode 100644 index 00000000..46d0d99b --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/Index.cshtml @@ -0,0 +1,38 @@ +@using System.Web.Http +@using System.Web.Http.Controllers +@using System.Web.Http.Description +@using System.Collections.ObjectModel +@using $safeprojectname$.Areas.HelpPage.Models +@model Collection + +@{ + ViewBag.Title = "ASP.NET Web API Help Page"; + + // Group APIs by controller + ILookup apiGroups = Model.ToLookup(api => api.ActionDescriptor.ControllerDescriptor); +} + + +
+
+
+

@ViewBag.Title

+
+
+
+
+ +
+ @foreach (var group in apiGroups) + { + @Html.DisplayFor(m => group, "ApiGroup") + } +
+
diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/ResourceModel.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/ResourceModel.cshtml new file mode 100644 index 00000000..c6183dea --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Help/ResourceModel.cshtml @@ -0,0 +1,19 @@ +@using System.Web.Http +@using $safeprojectname$.Areas.HelpPage.ModelDescriptions +@model ModelDescription + + +
+ +

@Model.Name

+

@Model.Documentation

+
+ @Html.DisplayFor(m => Model) +
+
diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Shared/_Layout.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Shared/_Layout.cshtml new file mode 100644 index 00000000..896c833a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Shared/_Layout.cshtml @@ -0,0 +1,12 @@ + + + + + + @ViewBag.Title + @RenderSection("scripts", required: false) + + + @RenderBody() + + \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Web.config b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Web.config new file mode 100644 index 00000000..d525025a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/Web.config @@ -0,0 +1,41 @@ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/_ViewStart.cshtml b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/_ViewStart.cshtml new file mode 100644 index 00000000..a9259508 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/Views/_ViewStart.cshtml @@ -0,0 +1,4 @@ +@{ + // Change the Layout path below to blend the look and feel of the help page with your existing web pages. + Layout = "~/Areas/HelpPage/Views/Shared/_Layout.cshtml"; +} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/XmlDocumentationProvider.cs b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/XmlDocumentationProvider.cs new file mode 100644 index 00000000..bea4e0cb --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Areas/HelpPage/XmlDocumentationProvider.cs @@ -0,0 +1,161 @@ +using System; +using System.Globalization; +using System.Linq; +using System.Reflection; +using System.Web.Http.Controllers; +using System.Web.Http.Description; +using System.Xml.XPath; +using $safeprojectname$.Areas.HelpPage.ModelDescriptions; + +namespace $safeprojectname$.Areas.HelpPage +{ + /// + /// A custom that reads the API documentation from an XML documentation file. + /// + public class XmlDocumentationProvider : IDocumentationProvider, IModelDocumentationProvider + { + private XPathNavigator _documentNavigator; + private const string TypeExpression = "/doc/members/member[@name='T:{0}']"; + private const string MethodExpression = "/doc/members/member[@name='M:{0}']"; + private const string PropertyExpression = "/doc/members/member[@name='P:{0}']"; + private const string FieldExpression = "/doc/members/member[@name='F:{0}']"; + private const string ParameterExpression = "param[@name='{0}']"; + + /// + /// Initializes a new instance of the class. + /// + /// The physical path to XML document. + public XmlDocumentationProvider(string documentPath) + { + if (documentPath == null) + { + throw new ArgumentNullException("documentPath"); + } + XPathDocument xpath = new XPathDocument(documentPath); + _documentNavigator = xpath.CreateNavigator(); + } + + public string GetDocumentation(HttpControllerDescriptor controllerDescriptor) + { + XPathNavigator typeNode = GetTypeNode(controllerDescriptor.ControllerType); + return GetTagValue(typeNode, "summary"); + } + + public virtual string GetDocumentation(HttpActionDescriptor actionDescriptor) + { + XPathNavigator methodNode = GetMethodNode(actionDescriptor); + return GetTagValue(methodNode, "summary"); + } + + public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor) + { + ReflectedHttpParameterDescriptor reflectedParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor; + if (reflectedParameterDescriptor != null) + { + XPathNavigator methodNode = GetMethodNode(reflectedParameterDescriptor.ActionDescriptor); + if (methodNode != null) + { + string parameterName = reflectedParameterDescriptor.ParameterInfo.Name; + XPathNavigator parameterNode = methodNode.SelectSingleNode(String.Format(CultureInfo.InvariantCulture, ParameterExpression, parameterName)); + if (parameterNode != null) + { + return parameterNode.Value.Trim(); + } + } + } + + return null; + } + + public string GetResponseDocumentation(HttpActionDescriptor actionDescriptor) + { + XPathNavigator methodNode = GetMethodNode(actionDescriptor); + return GetTagValue(methodNode, "returns"); + } + + public string GetDocumentation(MemberInfo member) + { + string memberName = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", GetTypeName(member.DeclaringType), member.Name); + string expression = member.MemberType == MemberTypes.Field ? FieldExpression : PropertyExpression; + string selectExpression = String.Format(CultureInfo.InvariantCulture, expression, memberName); + XPathNavigator propertyNode = _documentNavigator.SelectSingleNode(selectExpression); + return GetTagValue(propertyNode, "summary"); + } + + public string GetDocumentation(Type type) + { + XPathNavigator typeNode = GetTypeNode(type); + return GetTagValue(typeNode, "summary"); + } + + private XPathNavigator GetMethodNode(HttpActionDescriptor actionDescriptor) + { + ReflectedHttpActionDescriptor reflectedActionDescriptor = actionDescriptor as ReflectedHttpActionDescriptor; + if (reflectedActionDescriptor != null) + { + string selectExpression = String.Format(CultureInfo.InvariantCulture, MethodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo)); + return _documentNavigator.SelectSingleNode(selectExpression); + } + + return null; + } + + private static string GetMemberName(MethodInfo method) + { + string name = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", GetTypeName(method.DeclaringType), method.Name); + ParameterInfo[] parameters = method.GetParameters(); + if (parameters.Length != 0) + { + string[] parameterTypeNames = parameters.Select(param => GetTypeName(param.ParameterType)).ToArray(); + name += String.Format(CultureInfo.InvariantCulture, "({0})", String.Join(",", parameterTypeNames)); + } + + return name; + } + + private static string GetTagValue(XPathNavigator parentNode, string tagName) + { + if (parentNode != null) + { + XPathNavigator node = parentNode.SelectSingleNode(tagName); + if (node != null) + { + return node.Value.Trim(); + } + } + + return null; + } + + private XPathNavigator GetTypeNode(Type type) + { + string controllerTypeName = GetTypeName(type); + string selectExpression = String.Format(CultureInfo.InvariantCulture, TypeExpression, controllerTypeName); + return _documentNavigator.SelectSingleNode(selectExpression); + } + + private static string GetTypeName(Type type) + { + string name = type.FullName; + if (type.IsGenericType) + { + // Format the generic type name to something like: Generic{System.Int32,System.String} + Type genericType = type.GetGenericTypeDefinition(); + Type[] genericArguments = type.GetGenericArguments(); + string genericTypeName = genericType.FullName; + + // Trim the generic parameter counts from the name + genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`')); + string[] argumentTypeNames = genericArguments.Select(t => GetTypeName(t)).ToArray(); + name = String.Format(CultureInfo.InvariantCulture, "{0}{{{1}}}", genericTypeName, String.Join(",", argumentTypeNames)); + } + if (type.IsNested) + { + // Changing the nested type name from OuterType+InnerType to OuterType.InnerType to match the XML documentation syntax. + name = name.Replace("+", "."); + } + + return name; + } + } +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/Site.css b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/Site.css new file mode 100644 index 00000000..d825a52a --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/Site.css @@ -0,0 +1,17 @@ +body { + padding-top: 50px; + padding-bottom: 20px; +} + +/* Set padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Set width on the form input elements since they're 100% wide by default */ +input, +select, +textarea { + max-width: 280px; +} diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.css b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.css new file mode 100644 index 00000000..f860bbc0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.css @@ -0,0 +1,442 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default:disabled, +.btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2)); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-primary:disabled, +.btn-primary[disabled] { + background-color: #2d6ca2; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success:disabled, +.btn-success[disabled] { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info:disabled, +.btn-info[disabled] { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning:disabled, +.btn-warning[disabled] { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger:disabled, +.btn-danger[disabled] { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: -o-linear-gradient(top, #222 0%, #282828 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828)); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9)); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3)); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.css.map b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.css.map new file mode 100644 index 00000000..4cc41ab0 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAeA;;;;;;EAME,0CAAA;EC+CA,6FAAA;EACQ,qFAAA;EC5DT;AFiBC;;;;;;;;;;;;EC0CA,0DAAA;EACQ,kDAAA;EC7CT;AFqCC;;EAEE,wBAAA;EEnCH;AFwCD;EG/CI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EA+B2C,2BAAA;EAA2B,oBAAA;EE7BvE;AFAC;;EAEE,2BAAA;EACA,8BAAA;EEEH;AFCC;;EAEE,2BAAA;EACA,uBAAA;EECH;AFEC;;EAEE,2BAAA;EACA,wBAAA;EEAH;AFeD;EGhDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0BD;AFxBC;;EAEE,2BAAA;EACA,8BAAA;EE0BH;AFvBC;;EAEE,2BAAA;EACA,uBAAA;EEyBH;AFtBC;;EAEE,2BAAA;EACA,wBAAA;EEwBH;AFRD;EGjDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkDD;AFhDC;;EAEE,2BAAA;EACA,8BAAA;EEkDH;AF/CC;;EAEE,2BAAA;EACA,uBAAA;EEiDH;AF9CC;;EAEE,2BAAA;EACA,wBAAA;EEgDH;AF/BD;EGlDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0ED;AFxEC;;EAEE,2BAAA;EACA,8BAAA;EE0EH;AFvEC;;EAEE,2BAAA;EACA,uBAAA;EEyEH;AFtEC;;EAEE,2BAAA;EACA,wBAAA;EEwEH;AFtDD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkGD;AFhGC;;EAEE,2BAAA;EACA,8BAAA;EEkGH;AF/FC;;EAEE,2BAAA;EACA,uBAAA;EEiGH;AF9FC;;EAEE,2BAAA;EACA,wBAAA;EEgGH;AF7ED;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0HD;AFxHC;;EAEE,2BAAA;EACA,8BAAA;EE0HH;AFvHC;;EAEE,2BAAA;EACA,uBAAA;EEyHH;AFtHC;;EAEE,2BAAA;EACA,wBAAA;EEwHH;AF7FD;;ECbE,oDAAA;EACQ,4CAAA;EC8GT;AFvFD;;EGvEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHsEF,2BAAA;EE6FD;AF3FD;;;EG5EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4EF,2BAAA;EEiGD;AFvFD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ4GA,oBAAA;EC9CA,6FAAA;EACQ,qFAAA;EC4IT;AFlGD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECqJT;AF/FD;;EAEE,gDAAA;EEiGD;AF7FD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EFgOD;AFrGD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0KT;AF9GD;;EAWI,2CAAA;EEuGH;AFlGD;;;EAGE,kBAAA;EEoGD;AF1FD;EACE,+CAAA;EC3FA,4FAAA;EACQ,oFAAA;ECwLT;AFlFD;EGtJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8FD;AFzFD;EGvJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsGD;AFhGD;EGxJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8GD;AFvGD;EGzJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsHD;AFtGD;EGlKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2QH;AFnGD;EG5KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkRH;AFzGD;EG7KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDyRH;AF/GD;EG9KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDgSH;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AF3HD;EGhLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AF9HD;EGnJI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDoRH;AF1HD;EACE,oBAAA;EC/IA,oDAAA;EACQ,4CAAA;EC4QT;AF3HD;;;EAGE,+BAAA;EGpME,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHkMF,uBAAA;EEiID;AFvHD;ECjKE,mDAAA;EACQ,2CAAA;EC2RT;AFjHD;EG1NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8UH;AFvHD;EG3NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqVH;AF7HD;EG5NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4VH;AFnID;EG7NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmWH;AFzID;EG9NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0WH;AF/ID;EG/NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDiXH;AF9ID;EGvOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHqOF,uBAAA;EC1LA,2FAAA;EACQ,mFAAA;EC+UT","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.min.css b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.min.css new file mode 100644 index 00000000..2e97597c --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap-theme.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap.css b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap.css new file mode 100644 index 00000000..037dd056 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap.css @@ -0,0 +1,6203 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #428bca; + text-decoration: none; +} +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + width: 100% \9; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +cite { + font-style: normal; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #428bca; +} +a.text-primary:hover { + color: #3071a9; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #428bca; +} +a.bg-primary:hover { + background-color: #3071a9; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +blockquote:before, +blockquote:after { + content: ""; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: auto; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #777; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #777; +} +.form-control::-webkit-input-placeholder { + color: #777; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 34px; + line-height: 1.42857143 \0; +} +input[type="date"].input-sm, +input[type="time"].input-sm, +input[type="datetime-local"].input-sm, +input[type="month"].input-sm { + line-height: 30px; +} +input[type="date"].input-lg, +input[type="time"].input-lg, +input[type="datetime-local"].input-lg, +input[type="month"].input-lg { + line-height: 46px; +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + min-height: 20px; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm, +.form-horizontal .form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.input-lg, +.form-horizontal .form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 25px; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + top: 0; + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #3071a9; + border-color: #285e8e; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary .badge { + color: #428bca; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height .35s ease; + -o-transition: height .35s ease; + transition: height .35s ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + filter: alpha(opacity=0); + opacity: 0; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #428bca; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } + .navbar-text.navbar-right:last-child { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #777; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #777; +} +.navbar-inverse .navbar-nav > li > a { + color: #777; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #777; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #777; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #428bca; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #2a6496; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #428bca; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar[aria-valuenow="1"], +.progress-bar[aria-valuenow="2"] { + min-width: 30px; +} +.progress-bar[aria-valuenow="0"] { + min-width: 30px; + color: #777; + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-object { + display: block; +} +.media-heading { + margin: 0 0 5px; +} +.media > .pull-left { + margin-right: 10px; +} +.media > .pull-right { + margin-left: 10px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +a.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +a.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #428bca; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; +} +.panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate3d(0, -25%, 0); + -o-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); +} +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-size: 12px; + line-height: 1.4; + visibility: visible; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap.css.map b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap.css.map new file mode 100644 index 00000000..bfb56168 --- /dev/null +++ b/Extensions/VS2015/Output/Extract/ProjectTemplates/TrackableWebApi/WebApi/Content/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACuBD;;;;;;;;;;;;EAYE,gBAAA;EDrBD;AC6BD;;;;EAIE,uBAAA;EACA,0BAAA;ED3BD;ACmCD;EACE,eAAA;EACA,WAAA;EDjCD;ACyCD;;EAEE,eAAA;EDvCD;ACiDD;EACE,yBAAA;ED/CD;ACsDD;;EAEE,YAAA;EDpDD;AC8DD;EACE,2BAAA;ED5DD;ACmED;;EAEE,mBAAA;EDjED;ACwED;EACE,oBAAA;EDtED;AC8ED;EACE,gBAAA;EACA,kBAAA;ED5ED;ACmFD;EACE,kBAAA;EACA,aAAA;EDjFD;ACwFD;EACE,gBAAA;EDtFD;AC6FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED3FD;AC8FD;EACE,aAAA;ED5FD;AC+FD;EACE,iBAAA;ED7FD;ACuGD;EACE,WAAA;EDrGD;AC4GD;EACE,kBAAA;ED1GD;ACoHD;EACE,kBAAA;EDlHD;ACyHD;EACE,8BAAA;EACA,iCAAA;EAAA,yBAAA;EACA,WAAA;EDvHD;AC8HD;EACE,gBAAA;ED5HD;ACmID;;;;EAIE,mCAAA;EACA,gBAAA;EDjID;ACmJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDjJD;ACwJD;EACE,mBAAA;EDtJD;ACgKD;;EAEE,sBAAA;ED9JD;ACyKD;;;;EAIE,4BAAA;EACA,iBAAA;EDvKD;AC8KD;;EAEE,iBAAA;ED5KD;ACmLD;;EAEE,WAAA;EACA,YAAA;EDjLD;ACyLD;EACE,qBAAA;EDvLD;ACkMD;;EAEE,gCAAA;EAAA,6BAAA;EAAA,wBAAA;EACA,YAAA;EDhMD;ACyMD;;EAEE,cAAA;EDvMD;ACgND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED9MD;ACuND;;EAEE,0BAAA;EDrND;AC4ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED1ND;ACkOD;EACE,WAAA;EACA,YAAA;EDhOD;ACuOD;EACE,gBAAA;EDrOD;AC6OD;EACE,mBAAA;ED3OD;ACqPD;EACE,2BAAA;EACA,mBAAA;EDnPD;ACsPD;;EAEE,YAAA;EDpPD;AE9ED;EA9FE;IACE,8BAAA;IACA,wBAAA;IACA,oCAAA;IACA,qCAAA;IAAA,6BAAA;IF+KD;EE5KD;;IAEE,4BAAA;IF8KD;EE3KD;IACE,8BAAA;IF6KD;EE1KD;IACE,+BAAA;IF4KD;EExKD;;IAEE,aAAA;IF0KD;EEvKD;;IAEE,wBAAA;IACA,0BAAA;IFyKD;EEtKD;IACE,6BAAA;IFwKD;EErKD;;IAEE,0BAAA;IFuKD;EEpKD;IACE,4BAAA;IFsKD;EEnKD;;;IAGE,YAAA;IACA,WAAA;IFqKD;EElKD;;IAEE,yBAAA;IFoKD;EE/JD;IACE,6BAAA;IFiKD;EE7JD;IACE,eAAA;IF+JD;EE7JD;;IAGI,mCAAA;IF8JH;EE3JD;;IAGI,mCAAA;IF4JH;EEzJD;IACE,wBAAA;IF2JD;EExJD;IACE,sCAAA;IF0JD;EExJD;;IAGI,mCAAA;IFyJH;EACF;AGhPD;EACE,qCAAA;EACA,uDAAA;EACA,6TAAA;EHkPD;AG3OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EH6OD;AGzOmC;EAAW,gBAAA;EH4O9C;AG3OmC;EAAW,gBAAA;EH8O9C;AG7OmC;EAAW,kBAAA;EHgP9C;AG/OmC;EAAW,kBAAA;EHkP9C;AGjPmC;EAAW,kBAAA;EHoP9C;AGnPmC;EAAW,kBAAA;EHsP9C;AGrPmC;EAAW,kBAAA;EHwP9C;AGvPmC;EAAW,kBAAA;EH0P9C;AGzPmC;EAAW,kBAAA;EH4P9C;AG3PmC;EAAW,kBAAA;EH8P9C;AG7PmC;EAAW,kBAAA;EHgQ9C;AG/PmC;EAAW,kBAAA;EHkQ9C;AGjQmC;EAAW,kBAAA;EHoQ9C;AGnQmC;EAAW,kBAAA;EHsQ9C;AGrQmC;EAAW,kBAAA;EHwQ9C;AGvQmC;EAAW,kBAAA;EH0Q9C;AGzQmC;EAAW,kBAAA;EH4Q9C;AG3QmC;EAAW,kBAAA;EH8Q9C;AG7QmC;EAAW,kBAAA;EHgR9C;AG/QmC;EAAW,kBAAA;EHkR9C;AGjRmC;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBAAA;EHkjB9C;AGjjBmC;EAAW,kBAAA;EHojB9C;AGnjBmC;EAAW,kBAAA;EHsjB9C;AGrjBmC;EAAW,kBAAA;EHwjB9C;AGvjBmC;EAAW,kBAAA;EH0jB9C;AGzjBmC;EAAW,kBAAA;EH4jB9C;AG3jBmC;EAAW,kBAAA;EH8jB9C;AG7jBmC;EAAW,kBAAA;EHgkB9C;AG/jBmC;EAAW,kBAAA;EHkkB9C;AGjkBmC;EAAW,kBAAA;EHokB9C;AGnkBmC;EAAW,kBAAA;EHskB9C;AGrkBmC;EAAW,kBAAA;EHwkB9C;AGvkBmC;EAAW,kBAAA;EH0kB9C;AGzkBmC;EAAW,kBAAA;EH4kB9C;AG3kBmC;EAAW,kBAAA;EH8kB9C;AG7kBmC;EAAW,kBAAA;EHglB9C;AG/kBmC;EAAW,kBAAA;EHklB9C;AGjlBmC;EAAW,kBAAA;EHolB9C;AGnlBmC;EAAW,kBAAA;EHslB9C;AGrlBmC;EAAW,kBAAA;EHwlB9C;AGvlBmC;EAAW,kBAAA;EH0lB9C;AGzlBmC;EAAW,kBAAA;EH4lB9C;AG3lBmC;EAAW,kBAAA;EH8lB9C;AG7lBmC;EAAW,kBAAA;EHgmB9C;AG/lBmC;EAAW,kBAAA;EHkmB9C;AGjmBmC;EAAW,kBAAA;EHomB9C;AGnmBmC;EAAW,kBAAA;EHsmB9C;AGrmBmC;EAAW,kBAAA;EHwmB9C;AGvmBmC;EAAW,kBAAA;EH0mB9C;AGzmBmC;EAAW,kBAAA;EH4mB9C;AG3mBmC;EAAW,kBAAA;EH8mB9C;AG7mBmC;EAAW,kBAAA;EHgnB9C;AG/mBmC;EAAW,kBAAA;EHknB9C;AGjnBmC;EAAW,kBAAA;EHonB9C;AGnnBmC;EAAW,kBAAA;EHsnB9C;AGrnBmC;EAAW,kBAAA;EHwnB9C;AGvnBmC;EAAW,kBAAA;EH0nB9C;AIx1BD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL2xBT;AI11BD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELiyBT;AIx1BD;EACE,iBAAA;EACA,+CAAA;EJ01BD;AIv1BD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJy1BD;AIr1BD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJu1BD;AIj1BD;EACE,gBAAA;EACA,uBAAA;EJm1BD;AIj1BC;;EAEE,gBAAA;EACA,4BAAA;EJm1BH;AIh1BC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENu4BD;AI10BD;EACE,WAAA;EJ40BD;AIt0BD;EACE,wBAAA;EJw0BD;AIp0BD;;;;;EGvEE,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPk5BD;AIz0BD;EACE,oBAAA;EJ20BD;AIr0BD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC0FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEpLR,uBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPm6BD;AIt0BD;EACE,oBAAA;EJw0BD;AIl0BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJo0BD;AI5zBD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ8zBD;AItzBC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJwzBH;AQn8BD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+8BD;AQp9BD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERq+BH;AQj+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERs+BD;AQ1+BD;;;;;;;;;;;;EAQI,gBAAA;ERg/BH;AQ7+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERk/BD;AQt/BD;;;;;;;;;;;;EAQI,gBAAA;ER4/BH;AQx/BD;;EAAU,iBAAA;ER4/BT;AQ3/BD;;EAAU,iBAAA;ER+/BT;AQ9/BD;;EAAU,iBAAA;ERkgCT;AQjgCD;;EAAU,iBAAA;ERqgCT;AQpgCD;;EAAU,iBAAA;ERwgCT;AQvgCD;;EAAU,iBAAA;ER2gCT;AQrgCD;EACE,kBAAA;ERugCD;AQpgCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERsgCD;AQjgCD;EAAA;IAFI,iBAAA;IRugCD;EACF;AQ//BD;;EAEE,gBAAA;ERigCD;AQ7/BD;EACE,oBAAA;ER+/BD;AQ5/BD;;EAEE,2BAAA;EACA,eAAA;ER8/BD;AQ1/BD;EAAuB,kBAAA;ER6/BtB;AQ5/BD;EAAuB,mBAAA;ER+/BtB;AQ9/BD;EAAuB,oBAAA;ERigCtB;AQhgCD;EAAuB,qBAAA;ERmgCtB;AQlgCD;EAAuB,qBAAA;ERqgCtB;AQlgCD;EAAuB,2BAAA;ERqgCtB;AQpgCD;EAAuB,2BAAA;ERugCtB;AQtgCD;EAAuB,4BAAA;ERygCtB;AQtgCD;EACE,gBAAA;ERwgCD;AQtgCD;EC1GE,gBAAA;ETmnCD;ASlnCC;EACE,gBAAA;ETonCH;AQzgCD;EC7GE,gBAAA;ETynCD;ASxnCC;EACE,gBAAA;ET0nCH;AQ5gCD;EChHE,gBAAA;ET+nCD;AS9nCC;EACE,gBAAA;ETgoCH;AQ/gCD;ECnHE,gBAAA;ETqoCD;ASpoCC;EACE,gBAAA;ETsoCH;AQlhCD;ECtHE,gBAAA;ET2oCD;AS1oCC;EACE,gBAAA;ET4oCH;AQjhCD;EAGE,aAAA;EEhIA,2BAAA;EVkpCD;AUjpCC;EACE,2BAAA;EVmpCH;AQlhCD;EEnIE,2BAAA;EVwpCD;AUvpCC;EACE,2BAAA;EVypCH;AQrhCD;EEtIE,2BAAA;EV8pCD;AU7pCC;EACE,2BAAA;EV+pCH;AQxhCD;EEzIE,2BAAA;EVoqCD;AUnqCC;EACE,2BAAA;EVqqCH;AQ3hCD;EE5IE,2BAAA;EV0qCD;AUzqCC;EACE,2BAAA;EV2qCH;AQzhCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER2hCD;AQnhCD;;EAEE,eAAA;EACA,qBAAA;ERqhCD;AQxhCD;;;;EAMI,kBAAA;ERwhCH;AQjhCD;EACE,iBAAA;EACA,kBAAA;ERmhCD;AQ/gCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERkhCD;AQphCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERkhCH;AQ7gCD;EACE,eAAA;EACA,qBAAA;ER+gCD;AQ7gCD;;EAEE,yBAAA;ER+gCD;AQ7gCD;EACE,mBAAA;ER+gCD;AQ7gCD;EACE,gBAAA;ER+gCD;AQt/BD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IG3NJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IXguCC;EQhgCH;IAHM,oBAAA;IRsgCH;EACF;AQ7/BD;;EAGE,cAAA;EACA,mCAAA;ER8/BD;AQ5/BD;EACE,gBAAA;EACA,2BAAA;ER8/BD;AQ1/BD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER4/BD;AQv/BG;;;EACE,kBAAA;ER2/BL;AQrgCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERu/BH;AQr/BG;;;EACE,wBAAA;ERy/BL;AQj/BD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERm/BD;AQ7+BG;;;;;;EAAW,aAAA;ERq/Bd;AQp/BG;;;;;;EACE,wBAAA;ER2/BL;AQr/BD;;EAEE,aAAA;ERu/BD;AQn/BD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERq/BD;AYtyCD;;;;EAIE,gEAAA;EZwyCD;AYpyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZsyCD;AYlyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;EAAA,gDAAA;EZoyCD;AY1yCD;EASI,YAAA;EACA,iBAAA;EACA,0BAAA;EAAA,kBAAA;EZoyCH;AY/xCD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZiyCD;AY5yCD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZgyCH;AY3xCD;EACE,mBAAA;EACA,oBAAA;EZ6xCD;Aat1CD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed41CD;Aat1CC;EAAA;IAFE,cAAA;Ib41CD;EACF;Aax1CC;EAAA;IAFE,cAAA;Ib81CD;EACF;Aa11CD;EAAA;IAFI,eAAA;Ibg2CD;EACF;Aav1CD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Edi3CD;Aap1CD;ECvBE,oBAAA;EACA,qBAAA;Ed82CD;Ae92CG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;Ef82CL;Ae91CG;EACE,aAAA;Efg2CL;Aez1CC;EACE,aAAA;Ef21CH;Ae51CC;EACE,qBAAA;Ef81CH;Ae/1CC;EACE,qBAAA;Efi2CH;Ael2CC;EACE,YAAA;Efo2CH;Aer2CC;EACE,qBAAA;Efu2CH;Aex2CC;EACE,qBAAA;Ef02CH;Ae32CC;EACE,YAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,YAAA;Efs3CH;Aev3CC;EACE,qBAAA;Efy3CH;Ae13CC;EACE,oBAAA;Ef43CH;Ae92CC;EACE,aAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,qBAAA;Efs3CH;Aev3CC;EACE,YAAA;Efy3CH;Ae13CC;EACE,qBAAA;Ef43CH;Ae73CC;EACE,qBAAA;Ef+3CH;Aeh4CC;EACE,YAAA;Efk4CH;Aen4CC;EACE,qBAAA;Efq4CH;Aet4CC;EACE,qBAAA;Efw4CH;Aez4CC;EACE,YAAA;Ef24CH;Ae54CC;EACE,qBAAA;Ef84CH;Ae/4CC;EACE,oBAAA;Efi5CH;Ae74CC;EACE,aAAA;Ef+4CH;Ae/5CC;EACE,YAAA;Efi6CH;Ael6CC;EACE,oBAAA;Efo6CH;Aer6CC;EACE,oBAAA;Efu6CH;Aex6CC;EACE,WAAA;Ef06CH;Ae36CC;EACE,oBAAA;Ef66CH;Ae96CC;EACE,oBAAA;Efg7CH;Aej7CC;EACE,WAAA;Efm7CH;Aep7CC;EACE,oBAAA;Efs7CH;Aev7CC;EACE,oBAAA;Efy7CH;Ae17CC;EACE,WAAA;Ef47CH;Ae77CC;EACE,oBAAA;Ef+7CH;Aeh8CC;EACE,mBAAA;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3DD;IACE,YAAA;If03DD;Ee33DD;IACE,oBAAA;If63DD;Ee93DD;IACE,oBAAA;Ifg4DD;Eej4DD;IACE,WAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eev4DD;IACE,oBAAA;Ify4DD;Ee14DD;IACE,WAAA;If44DD;Ee74DD;IACE,oBAAA;If+4DD;Eeh5DD;IACE,oBAAA;Ifk5DD;Een5DD;IACE,WAAA;Ifq5DD;Eet5DD;IACE,oBAAA;Ifw5DD;Eez5DD;IACE,mBAAA;If25DD;Eev5DD;IACE,YAAA;Ify5DD;Ee34DD;IACE,mBAAA;If64DD;Ee94DD;IACE,2BAAA;Ifg5DD;Eej5DD;IACE,2BAAA;Ifm5DD;Eep5DD;IACE,kBAAA;Ifs5DD;Eev5DD;IACE,2BAAA;Ify5DD;Ee15DD;IACE,2BAAA;If45DD;Ee75DD;IACE,kBAAA;If+5DD;Eeh6DD;IACE,2BAAA;Ifk6DD;Een6DD;IACE,2BAAA;Ifq6DD;Eet6DD;IACE,kBAAA;Ifw6DD;Eez6DD;IACE,2BAAA;If26DD;Ee56DD;IACE,0BAAA;If86DD;Ee/6DD;IACE,iBAAA;Ifi7DD;EACF;AgBr/DD;EACE,+BAAA;EhBu/DD;AgBr/DD;EACE,kBAAA;EhBu/DD;AgBj/DD;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhBm/DD;AgBt/DD;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhBm/DP;AgBjgED;EAoBI,wBAAA;EACA,kCAAA;EhBg/DH;AgBrgED;;;;;;EA8BQ,eAAA;EhB++DP;AgB7gED;EAoCI,+BAAA;EhB4+DH;AgBhhED;EAyCI,2BAAA;EhB0+DH;AgBn+DD;;;;;;EAOQ,cAAA;EhBo+DP;AgBz9DD;EACE,2BAAA;EhB29DD;AgB59DD;;;;;;EAQQ,2BAAA;EhB49DP;AgBp+DD;;EAeM,0BAAA;EhBy9DL;AgB/8DD;;EAIM,2BAAA;EhB+8DL;AgBr8DD;;EAIM,2BAAA;EhBq8DL;AgB37DD;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB67DD;AgBx7DG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhB27DL;AiBvkEC;;;;;;;;;;;;EAOI,2BAAA;EjB8kEL;AiBxkEC;;;;;EAMI,2BAAA;EjBykEL;AiB5lEC;;;;;;;;;;;;EAOI,2BAAA;EjBmmEL;AiB7lEC;;;;;EAMI,2BAAA;EjB8lEL;AiBjnEC;;;;;;;;;;;;EAOI,2BAAA;EjBwnEL;AiBlnEC;;;;;EAMI,2BAAA;EjBmnEL;AiBtoEC;;;;;;;;;;;;EAOI,2BAAA;EjB6oEL;AiBvoEC;;;;;EAMI,2BAAA;EjBwoEL;AiB3pEC;;;;;;;;;;;;EAOI,2BAAA;EjBkqEL;AiB5pEC;;;;;EAMI,2BAAA;EjB6pEL;AgB78DD;EAAA;IA5DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,kBAAA;IACA,8CAAA;IACA,2BAAA;IACA,mCAAA;IhB6gED;EgBv9DH;IAlDM,kBAAA;IhB4gEH;EgB19DH;;;;;;IAzCY,qBAAA;IhB2gET;EgBl+DH;IAjCM,WAAA;IhBsgEH;EgBr+DH;;;;;;IAxBY,gBAAA;IhBqgET;EgB7+DH;;;;;;IApBY,iBAAA;IhBygET;EgBr/DH;;;;IAPY,kBAAA;IhBkgET;EACF;AkB3tED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB0tED;AkBvtED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBytED;AkBttED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBwtED;AkB7sED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELorET;AkB7sED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+sED;AkB3sED;EACE,gBAAA;ElB6sED;AkBzsED;EACE,gBAAA;EACA,aAAA;ElB2sED;AkBvsED;;EAEE,cAAA;ElBysED;AkBrsED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENixED;AkBrsED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBusED;AkB7qED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAsHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELonET;AmB7vEC;EACE,uBAAA;EACA,YAAA;EdcF,wFAAA;EACQ,gFAAA;ELkvET;AKltEC;EAAgC,gBAAA;EACA,YAAA;ELqtEjC;AKptEC;EAAgC,gBAAA;ELutEjC;AKttEC;EAAgC,gBAAA;ELytEjC;AkBrrEC;;;EAGE,qBAAA;EACA,2BAAA;EACA,YAAA;ElBurEH;AkBnrEC;EACE,cAAA;ElBqrEH;AkBzqED;EACE,0BAAA;ElB2qED;AkB/pED;;;;EAIE,mBAAA;EAEA,4BAAA;ElBgqED;AkB9pEC;;;;EACE,mBAAA;ElBmqEH;AkBjqEC;;;;EACE,mBAAA;ElBsqEH;AkB5pED;EACE,qBAAA;ElB8pED;AkBtpED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,qBAAA;ElBwpED;AkB9pED;;EASI,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElBypEH;AkBtpED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElBwpED;AkBrpED;;EAEE,kBAAA;ElBupED;AkBnpED;;EAEE,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElBqpED;AkBnpED;;EAEE,eAAA;EACA,mBAAA;ElBqpED;AkB5oEC;;;;;;EAGE,qBAAA;ElBipEH;AkB3oEC;;;;EAEE,qBAAA;ElB+oEH;AkBzoEC;;;;EAGI,qBAAA;ElB4oEL;AkBjoED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;ElBioED;AkB/nEC;;EAEE,iBAAA;EACA,kBAAA;ElBioEH;AkBvnED;;ECnPE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB82ED;AmB52EC;EACE,cAAA;EACA,mBAAA;EnB82EH;AmB32EC;;EAEE,cAAA;EnB62EH;AkBnoED;;ECvPE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnB83ED;AmB53EC;EACE,cAAA;EACA,mBAAA;EnB83EH;AmB33EC;;EAEE,cAAA;EnB63EH;AkB1oED;EAEE,oBAAA;ElB2oED;AkB7oED;EAMI,uBAAA;ElB0oEH;AkBtoED;EACE,oBAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;ElBwoED;AkBtoED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElBwoED;AkBtoED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElBwoED;AkBpoED;;;;;;ECrVI,gBAAA;EnBi+EH;AkB5oED;ECjVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;EL86ET;AmBh+EG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;ELm7ET;AkBtpED;ECvUI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBg+EH;AkB3pED;ECjUI,gBAAA;EnB+9EH;AkB3pED;;;;;;ECxVI,gBAAA;EnB2/EH;AkBnqED;ECpVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;ELw8ET;AmB1/EG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;EL68ET;AkB7qED;EC1UI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnB0/EH;AkBlrED;ECpUI,gBAAA;EnBy/EH;AkBlrED;;;;;;EC3VI,gBAAA;EnBqhFH;AkB1rED;ECvVI,uBAAA;EdmDF,0DAAA;EACQ,kDAAA;ELk+ET;AmBphFG;EACE,uBAAA;EdgDJ,2EAAA;EACQ,mEAAA;ELu+ET;AkBpsED;EC7UI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBohFH;AkBzsED;ECvUI,gBAAA;EnBmhFH;AkBtsED;EACE,QAAA;ElBwsED;AkB/rED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBisED;AkB9mED;EAAA;IA7DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+qEH;EkBpnEH;IAtDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB6qEH;EkBznEH;IAhDM,uBAAA;IACA,wBAAA;IlB4qEH;EkB7nEH;;;IA1CQ,aAAA;IlB4qEL;EkBloEH;IApCM,aAAA;IlByqEH;EkBroEH;IAhCM,kBAAA;IACA,wBAAA;IlBwqEH;EkBzoEH;;IAvBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBoqEH;EkBhpEH;;IAjBQ,iBAAA;IlBqqEL;EkBppEH;;IAZM,oBAAA;IACA,gBAAA;IlBoqEH;EkBzpEH;IAHM,QAAA;IlB+pEH;EACF;AkBrpED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBkpEH;AkB7pED;;EAiBI,kBAAA;ElBgpEH;AkBjqED;EJxcE,oBAAA;EACA,qBAAA;Ed4mFD;AkBloEC;EAAA;IANI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB4oEH;EACF;AkB5qED;EAwCI,QAAA;EACA,aAAA;ElBuoEH;AkB1nEG;EAAA;IAHI,qBAAA;IlBioEL;EACF;AkBrnEG;EAAA;IAHI,kBAAA;IlB4nEL;EACF;AoBzoFD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC4BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB2KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;ELs8ET;AoB5oFG;;;EdpBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENoqFD;AoB9oFC;;EAEE,gBAAA;EACA,uBAAA;EpBgpFH;AoB7oFC;;EAEE,YAAA;EACA,wBAAA;Ef8BF,0DAAA;EACQ,kDAAA;ELknFT;AoB7oFC;;;EAGE,qBAAA;EACA,sBAAA;EE3CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL4nFT;AoBzoFD;EClDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8rFD;AqB5rFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8rFP;AqB5rFC;;;EAGE,wBAAA;ErB8rFH;AqBzrFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EpBq2FD;AoBn2FC;;;;EAIE,+BAAA;Ef1BF,0BAAA;EACQ,kBAAA;ELg4FT;AoBp2FC;;;;EAIE,2BAAA;EpBs2FH;AoBp2FC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpBs2FH;AoBl2FG;;;;EAEE,gBAAA;EACA,uBAAA;EpBs2FL;AoB71FD;;EC9EE,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;ErB+6FD;AoBh2FD;;EClFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBs7FD;AoBn2FD;;ECtFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB67FD;AoBl2FD;EACE,gBAAA;EACA,aAAA;EpBo2FD;AoBh2FD;EACE,iBAAA;EpBk2FD;AoB31FC;;;EACE,aAAA;EpB+1FH;AuBh/FD;EACE,YAAA;ElBiLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELk0FT;AuBn/FC;EACE,YAAA;EvBq/FH;AuBj/FD;EACE,eAAA;EvBm/FD;AuBj/FC;EAAY,gBAAA;EvBo/Fb;AuBn/FC;EAAY,oBAAA;EvBs/Fb;AuBr/FC;EAAY,0BAAA;EvBw/Fb;AuBr/FD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElB+JA,uCAAA;EACK,kCAAA;EACG,+BAAA;ELy1FT;AwBhhGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;EACA,qCAAA;EACA,oCAAA;ExBkhGD;AwB9gGD;EACE,oBAAA;ExBghGD;AwB5gGD;EACE,YAAA;ExB8gGD;AwB1gGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBwBA,qDAAA;EACQ,6CAAA;EmBvBR,sCAAA;EAAA,8BAAA;ExB6gGD;AwBxgGC;EACE,UAAA;EACA,YAAA;ExB0gGH;AwBniGD;ECvBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB6jGD;AwBziGD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBygGH;AwBngGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExBqgGH;AwB//FC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExBigGH;AwBx/FC;;;EAGE,gBAAA;ExB0/FH;AwBr/FC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBu/FH;AwBl/FD;EAGI,gBAAA;ExBk/FH;AwBr/FD;EAQI,YAAA;ExBg/FH;AwBx+FD;EACE,YAAA;EACA,UAAA;ExB0+FD;AwBl+FD;EACE,SAAA;EACA,aAAA;ExBo+FD;AwBh+FD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBk+FD;AwB99FD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExBg+FD;AwB59FD;EACE,UAAA;EACA,YAAA;ExB89FD;AwBt9FD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBs9FH;AwB59FD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBs9FH;AwBh8FD;EAZE;IAnEA,YAAA;IACA,UAAA;IxBmhGC;EwBj9FD;IAzDA,SAAA;IACA,aAAA;IxB6gGC;EACF;A2B5pGD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3B8pGD;A2BlqGD;;EAMI,oBAAA;EACA,aAAA;E3BgqGH;A2B9pGG;;;;;;;;EAIE,YAAA;E3BoqGL;A2BlqGG;;EAEE,YAAA;E3BoqGL;A2B9pGD;;;;EAKI,mBAAA;E3B+pGH;A2B1pGD;EACE,mBAAA;E3B4pGD;A2B7pGD;;EAMI,aAAA;E3B2pGH;A2BjqGD;;;EAWI,kBAAA;E3B2pGH;A2BvpGD;EACE,kBAAA;E3BypGD;A2BrpGD;EACE,gBAAA;E3BupGD;A2BtpGC;ECrDA,+BAAA;EACG,4BAAA;E5B8sGJ;A2BrpGD;;EClDE,8BAAA;EACG,2BAAA;E5B2sGJ;A2BppGD;EACE,aAAA;E3BspGD;A2BppGD;EACE,kBAAA;E3BspGD;A2BppGD;;ECtEE,+BAAA;EACG,4BAAA;E5B8tGJ;A2BnpGD;ECpEE,8BAAA;EACG,2BAAA;E5B0tGJ;A2BlpGD;;EAEE,YAAA;E3BopGD;A2BnoGD;EACE,mBAAA;EACA,oBAAA;E3BqoGD;A2BnoGD;EACE,oBAAA;EACA,qBAAA;E3BqoGD;A2BhoGD;EtBlDE,0DAAA;EACQ,kDAAA;ELqrGT;A2BhoGC;EtBtDA,0BAAA;EACQ,kBAAA;ELyrGT;A2B7nGD;EACE,gBAAA;E3B+nGD;A2B5nGD;EACE,yBAAA;EACA,wBAAA;E3B8nGD;A2B3nGD;EACE,yBAAA;E3B6nGD;A2BtnGD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3BunGH;A2B9nGD;EAcM,aAAA;E3BmnGL;A2BjoGD;;;;EAsBI,kBAAA;EACA,gBAAA;E3BinGH;A2B5mGC;EACE,kBAAA;E3B8mGH;A2B5mGC;EACE,8BAAA;ECvKF,+BAAA;EACC,8BAAA;E5BsxGF;A2B7mGC;EACE,gCAAA;ECnLF,4BAAA;EACC,2BAAA;E5BmyGF;A2B7mGD;EACE,kBAAA;E3B+mGD;A2B7mGD;;EClLE,+BAAA;EACC,8BAAA;E5BmyGF;A2B5mGD;EChME,4BAAA;EACC,2BAAA;E5B+yGF;A2BvmGD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3BymGD;A2B7mGD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3B0mGH;A2BnnGD;EAYI,aAAA;E3B0mGH;A2BtnGD;EAgBI,YAAA;E3BymGH;A2B3lGD;;EAEE,oBAAA;EACA,aAAA;EL1OA,YAAA;EAGA,0BAAA;EtBs0GD;A6Bt0GD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7Bw0GD;A6Br0GC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7Bu0GH;A6Bh1GD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7B+zGH;A6BtzGD;;;EV0BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnBiyGD;AmB/xGC;;;EACE,cAAA;EACA,mBAAA;EnBmyGH;AmBhyGC;;;;;;EAEE,cAAA;EnBsyGH;A6Bx0GD;;;EVqBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBwzGD;AmBtzGC;;;EACE,cAAA;EACA,mBAAA;EnB0zGH;AmBvzGC;;;;;;EAEE,cAAA;EnB6zGH;A6Bt1GD;;;EAGE,qBAAA;E7Bw1GD;A6Bt1GC;;;EACE,kBAAA;E7B01GH;A6Bt1GD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7Bw1GD;A6Bn1GD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7Bq1GD;A6Bl1GC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7Bo1GH;A6Bl1GC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7Bo1GH;A6Bx2GD;;EA0BI,eAAA;E7Bk1GH;A6B70GD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5Bs7GJ;A6B90GD;EACE,iBAAA;E7Bg1GD;A6B90GD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5B27GJ;A6B/0GD;EACE,gBAAA;E7Bi1GD;A6B50GD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7B40GD;A6Bj1GD;EAUI,oBAAA;E7B00GH;A6Bp1GD;EAYM,mBAAA;E7B20GL;A6Bx0GG;;;EAGE,YAAA;E7B00GL;A6Br0GC;;EAGI,oBAAA;E7Bs0GL;A6Bn0GC;;EAGI,mBAAA;E7Bo0GL;A8B99GD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9Bg+GD;A8Bn+GD;EAOI,oBAAA;EACA,gBAAA;E9B+9GH;A8Bv+GD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9B+9GL;A8B99GK;;EAEE,uBAAA;EACA,2BAAA;E9Bg+GP;A8B39GG;EACE,gBAAA;E9B69GL;A8B39GK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9B69GP;A8Bt9GG;;;EAGE,2BAAA;EACA,uBAAA;E9Bw9GL;A8BjgHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBugHD;A8BvgHD;EA0DI,iBAAA;E9Bg9GH;A8Bv8GD;EACE,kCAAA;E9By8GD;A8B18GD;EAGI,aAAA;EAEA,qBAAA;E9By8GH;A8B98GD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9Bw8GL;A8Bv8GK;EACE,uCAAA;E9By8GP;A8Bn8GK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9Bq8GP;A8Bh8GC;EAqDA,aAAA;EA8BA,kBAAA;E9Bi3GD;A8Bp8GC;EAwDE,aAAA;E9B+4GH;A8Bv8GC;EA0DI,oBAAA;EACA,oBAAA;E9Bg5GL;A8B38GC;EAgEE,WAAA;EACA,YAAA;E9B84GH;A8Bl4GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B64GH;E8Bv4GH;IAJQ,kBAAA;I9B84GL;EACF;A8Bx9GC;EAuFE,iBAAA;EACA,oBAAA;E9Bo4GH;A8B59GC;;;EA8FE,2BAAA;E9Bm4GH;A8Br3GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bk4GH;E8B13GH;;;IAHM,8BAAA;I9Bk4GH;EACF;A8Bn+GD;EAEI,aAAA;E9Bo+GH;A8Bt+GD;EAMM,oBAAA;E9Bm+GL;A8Bz+GD;EASM,kBAAA;E9Bm+GL;A8B99GK;;;EAGE,gBAAA;EACA,2BAAA;E9Bg+GP;A8Bx9GD;EAEI,aAAA;E9By9GH;A8B39GD;EAIM,iBAAA;EACA,gBAAA;E9B09GL;A8B98GD;EACE,aAAA;E9Bg9GD;A8Bj9GD;EAII,aAAA;E9Bg9GH;A8Bp9GD;EAMM,oBAAA;EACA,oBAAA;E9Bi9GL;A8Bx9GD;EAYI,WAAA;EACA,YAAA;E9B+8GH;A8Bn8GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B88GH;E8Bx8GH;IAJQ,kBAAA;I9B+8GL;EACF;A8Bv8GD;EACE,kBAAA;E9By8GD;A8B18GD;EAKI,iBAAA;EACA,oBAAA;E9Bw8GH;A8B98GD;;;EAYI,2BAAA;E9Bu8GH;A8Bz7GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bs8GH;E8B97GH;;;IAHM,8BAAA;I9Bs8GH;EACF;A8B77GD;EAEI,eAAA;E9B87GH;A8Bh8GD;EAKI,gBAAA;E9B87GH;A8Br7GD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5BkqHF;A+B5pHD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/B8pHD;A+BtpHD;EAAA;IAFI,oBAAA;I/B4pHD;EACF;A+B7oHD;EAAA;IAFI,aAAA;I/BmpHD;EACF;A+BroHD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;EAAA,oDAAA;EAEA,mCAAA;E/BsoHD;A+BpoHC;EACE,kBAAA;E/BsoHH;A+B1mHD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;IAAA,kBAAA;I/BsoHD;E+BpoHC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/BsoHH;E+BnoHC;IACE,qBAAA;I/BqoHH;E+BhoHC;;;IAGE,iBAAA;IACA,kBAAA;I/BkoHH;EACF;A+B9nHD;;EAGI,mBAAA;E/B+nHH;A+B1nHC;EAAA;;IAFI,mBAAA;I/BioHH;EACF;A+BxnHD;;;;EAII,qBAAA;EACA,oBAAA;E/B0nHH;A+BpnHC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/B8nHH;EACF;A+BlnHD;EACE,eAAA;EACA,uBAAA;E/BonHD;A+B/mHD;EAAA;IAFI,kBAAA;I/BqnHD;EACF;A+BjnHD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E1BGA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELinHT;A+B9mHD;EAAA;;IAFI,kBAAA;I/BqnHD;EACF;A+BnnHD;EACE,QAAA;EACA,uBAAA;E/BqnHD;A+BnnHD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/BqnHD;A+B/mHD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/BinHD;A+B/mHC;;EAEE,uBAAA;E/BinHH;A+BxmHD;EALI;;IAEE,oBAAA;I/BgnHH;EACF;A+BtmHD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC3LA,iBAAA;EACA,oBAAA;ED4LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/BymHD;A+BrmHC;EACE,YAAA;E/BumHH;A+BrnHD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/BqmHH;A+B3nHD;EAyBI,iBAAA;E/BqmHH;A+B/lHD;EAAA;IAFI,eAAA;I/BqmHD;EACF;A+B5lHD;EACE,qBAAA;E/B8lHD;A+B/lHD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/B8lHH;A+BnkHC;EAAA;IArBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;IAAA,kBAAA;I/B4lHH;E+B7kHD;;IAZM,4BAAA;I/B6lHL;E+BjlHD;IATM,mBAAA;I/B6lHL;E+B5lHK;;IAEE,wBAAA;I/B8lHP;EACF;A+BxkHD;EAAA;IAfI,aAAA;IACA,WAAA;I/B2lHD;E+B7kHH;IAXM,aAAA;I/B2lHH;E+BhlHH;IATQ,mBAAA;IACA,sBAAA;I/B4lHL;E+BxlHC;IACE,qBAAA;I/B0lHH;EACF;A+BzkHD;EALE;IE9QA,wBAAA;IjCg2HC;E+BjlHD;IElRA,yBAAA;IjCs2HC;EACF;A+B5kHD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B3OA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhC03HD;AkBl7GD;EAAA;IA7DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlBm/GH;EkBx7GH;IAtDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBi/GH;EkB77GH;IAhDM,uBAAA;IACA,wBAAA;IlBg/GH;EkBj8GH;;;IA1CQ,aAAA;IlBg/GL;EkBt8GH;IApCM,aAAA;IlB6+GH;EkBz8GH;IAhCM,kBAAA;IACA,wBAAA;IlB4+GH;EkB78GH;;IAvBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBw+GH;EkBp9GH;;IAjBQ,iBAAA;IlBy+GL;EkBx9GH;;IAZM,oBAAA;IACA,gBAAA;IlBw+GH;EkB79GH;IAHM,QAAA;IlBm+GH;EACF;A+BtnHC;EAAA;IAFI,oBAAA;I/B4nHH;EACF;A+BvmHD;EAAA;IAbI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BlQF,0BAAA;IACQ,kBAAA;IL23HP;E+BtnHC;IACE,qBAAA;I/BwnHH;EACF;A+BhnHD;EACE,eAAA;EHlVA,4BAAA;EACC,2BAAA;E5Bq8HF;A+BhnHD;EH9UE,+BAAA;EACC,8BAAA;E5Bi8HF;A+B3mHD;EC5VE,iBAAA;EACA,oBAAA;EhC08HD;A+B5mHC;EC/VA,kBAAA;EACA,qBAAA;EhC88HD;A+B7mHC;EClWA,kBAAA;EACA,qBAAA;EhCk9HD;A+BvmHD;EC5WE,kBAAA;EACA,qBAAA;EhCs9HD;A+B9lHD;EAAA;IATI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B2mHD;E+BxmHC;IACE,iBAAA;I/B0mHH;EACF;A+BlmHD;EACE,2BAAA;EACA,uBAAA;E/BomHD;A+BtmHD;EAKI,gBAAA;E/BomHH;A+BnmHG;;EAEE,gBAAA;EACA,+BAAA;E/BqmHL;A+B9mHD;EAcI,gBAAA;E/BmmHH;A+BjnHD;EAmBM,gBAAA;E/BimHL;A+B/lHK;;EAEE,gBAAA;EACA,+BAAA;E/BimHP;A+B7lHK;;;EAGE,gBAAA;EACA,2BAAA;E/B+lHP;A+B3lHK;;;EAGE,gBAAA;EACA,+BAAA;E/B6lHP;A+BroHD;EA8CI,uBAAA;E/B0lHH;A+BzlHG;;EAEE,2BAAA;E/B2lHL;A+B5oHD;EAoDM,2BAAA;E/B2lHL;A+B/oHD;;EA0DI,uBAAA;E/BylHH;A+BllHK;;;EAGE,2BAAA;EACA,gBAAA;E/BolHP;A+BnjHC;EAAA;IAzBQ,gBAAA;I/BglHP;E+B/kHO;;IAEE,gBAAA;IACA,+BAAA;I/BilHT;E+B7kHO;;;IAGE,gBAAA;IACA,2BAAA;I/B+kHT;E+B3kHO;;;IAGE,gBAAA;IACA,+BAAA;I/B6kHT;EACF;A+B/qHD;EA8GI,gBAAA;E/BokHH;A+BnkHG;EACE,gBAAA;E/BqkHL;A+BrrHD;EAqHI,gBAAA;E/BmkHH;A+BlkHG;;EAEE,gBAAA;E/BokHL;A+BhkHK;;;;EAEE,gBAAA;E/BokHP;A+B5jHD;EACE,2BAAA;EACA,uBAAA;E/B8jHD;A+BhkHD;EAKI,gBAAA;E/B8jHH;A+B7jHG;;EAEE,gBAAA;EACA,+BAAA;E/B+jHL;A+BxkHD;EAcI,gBAAA;E/B6jHH;A+B3kHD;EAmBM,gBAAA;E/B2jHL;A+BzjHK;;EAEE,gBAAA;EACA,+BAAA;E/B2jHP;A+BvjHK;;;EAGE,gBAAA;EACA,2BAAA;E/ByjHP;A+BrjHK;;;EAGE,gBAAA;EACA,+BAAA;E/BujHP;A+B/lHD;EA+CI,uBAAA;E/BmjHH;A+BljHG;;EAEE,2BAAA;E/BojHL;A+BtmHD;EAqDM,2BAAA;E/BojHL;A+BzmHD;;EA2DI,uBAAA;E/BkjHH;A+B5iHK;;;EAGE,2BAAA;EACA,gBAAA;E/B8iHP;A+BvgHC;EAAA;IA/BQ,uBAAA;I/B0iHP;E+B3gHD;IA5BQ,2BAAA;I/B0iHP;E+B9gHD;IAzBQ,gBAAA;I/B0iHP;E+BziHO;;IAEE,gBAAA;IACA,+BAAA;I/B2iHT;E+BviHO;;;IAGE,gBAAA;IACA,2BAAA;I/ByiHT;E+BriHO;;;IAGE,gBAAA;IACA,+BAAA;I/BuiHT;EACF;A+B/oHD;EA+GI,gBAAA;E/BmiHH;A+BliHG;EACE,gBAAA;E/BoiHL;A+BrpHD;EAsHI,gBAAA;E/BkiHH;A+BjiHG;;EAEE,gBAAA;E/BmiHL;A+B/hHK;;;;EAEE,gBAAA;E/BmiHP;AkCxqID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElC0qID;AkC/qID;EAQI,uBAAA;ElC0qIH;AkClrID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElC0qIL;AkCvrID;EAkBI,gBAAA;ElCwqIH;AmC5rID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC8rID;AmClsID;EAOI,iBAAA;EnC8rIH;AmCrsID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC+rIL;AmC7rIG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5B0sIJ;AmC5rIG;;EPvBF,iCAAA;EACG,8BAAA;E5ButIJ;AmCvrIG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnC2rIL;AmCrrIG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnC0rIL;AmChvID;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCurIL;AmC9qID;;EC1EM,oBAAA;EACA,iBAAA;EpC4vIL;AoC1vIG;;ERMF,gCAAA;EACG,6BAAA;E5BwvIJ;AoCzvIG;;ERRF,iCAAA;EACG,8BAAA;E5BqwIJ;AmCxrID;;EC/EM,mBAAA;EACA,iBAAA;EpC2wIL;AoCzwIG;;ERMF,gCAAA;EACG,6BAAA;E5BuwIJ;AoCxwIG;;ERRF,iCAAA;EACG,8BAAA;E5BoxIJ;AqCvxID;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCyxID;AqC7xID;EAOI,iBAAA;ErCyxIH;AqChyID;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErC0xIL;AqCxyID;;EAmBM,uBAAA;EACA,2BAAA;ErCyxIL;AqC7yID;;EA2BM,cAAA;ErCsxIL;AqCjzID;;EAkCM,aAAA;ErCmxIL;AqCrzID;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErCgxIL;AsC9zID;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtCg0ID;AsC5zIG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC8zIL;AsCzzIC;EACE,eAAA;EtC2zIH;AsCvzIC;EACE,oBAAA;EACA,WAAA;EtCyzIH;AsClzID;ECtCE,2BAAA;EvC21ID;AuCx1IG;;EAEE,2BAAA;EvC01IL;AsCrzID;EC1CE,2BAAA;EvCk2ID;AuC/1IG;;EAEE,2BAAA;EvCi2IL;AsCxzID;EC9CE,2BAAA;EvCy2ID;AuCt2IG;;EAEE,2BAAA;EvCw2IL;AsC3zID;EClDE,2BAAA;EvCg3ID;AuC72IG;;EAEE,2BAAA;EvC+2IL;AsC9zID;ECtDE,2BAAA;EvCu3ID;AuCp3IG;;EAEE,2BAAA;EvCs3IL;AsCj0ID;EC1DE,2BAAA;EvC83ID;AuC33IG;;EAEE,2BAAA;EvC63IL;AwC/3ID;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExCi4ID;AwC93IC;EACE,eAAA;ExCg4IH;AwC53IC;EACE,oBAAA;EACA,WAAA;ExC83IH;AwC53IC;EACE,QAAA;EACA,kBAAA;ExC83IH;AwCz3IG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExC23IL;AwCt3IC;;EAEE,gBAAA;EACA,2BAAA;ExCw3IH;AwCt3IC;EACE,kBAAA;ExCw3IH;AyCv6ID;EACE,eAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzCy6ID;AyC76ID;;EAQI,gBAAA;EzCy6IH;AyCj7ID;EAWI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzCy6IH;AyCt7ID;EAiBI,2BAAA;EzCw6IH;AyCr6IC;EACE,oBAAA;EzCu6IH;AyC57ID;EAyBI,iBAAA;EzCs6IH;AyCr5ID;EAAA;IAbI,mBAAA;IACA,sBAAA;IzCs6ID;EyCp6IC;IACE,oBAAA;IACA,qBAAA;IzCs6IH;EyC95IH;;IAHM,iBAAA;IzCq6IH;EACF;A0C58ID;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErC8KA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELiyIT;A0Cx9ID;;EAaI,mBAAA;EACA,oBAAA;E1C+8IH;A0C38IC;;;EAGE,uBAAA;E1C68IH;A0Cl+ID;EA0BI,cAAA;EACA,gBAAA;E1C28IH;A2Cp+ID;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3Cs+ID;A2C1+ID;EAQI,eAAA;EAEA,gBAAA;E3Co+IH;A2C9+ID;EAcI,mBAAA;E3Cm+IH;A2Cj/ID;;EAoBI,kBAAA;E3Ci+IH;A2Cr/ID;EAuBI,iBAAA;E3Ci+IH;A2Cz9ID;;EAEE,qBAAA;E3C29ID;A2C79ID;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C29IH;A2Cn9ID;ECrDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C2gJD;A2Cx9ID;EChDI,2BAAA;E5C2gJH;A2C39ID;EC7CI,gBAAA;E5C2gJH;A2C39ID;ECxDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CshJD;A2Ch+ID;ECnDI,2BAAA;E5CshJH;A2Cn+ID;EChDI,gBAAA;E5CshJH;A2Cn+ID;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CiiJD;A2Cx+ID;ECtDI,2BAAA;E5CiiJH;A2C3+ID;ECnDI,gBAAA;E5CiiJH;A2C3+ID;EC9DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C4iJD;A2Ch/ID;ECzDI,2BAAA;E5C4iJH;A2Cn/ID;ECtDI,gBAAA;E5C4iJH;A6C9iJD;EACE;IAAQ,6BAAA;I7CijJP;E6ChjJD;IAAQ,0BAAA;I7CmjJP;EACF;A6ChjJD;EACE;IAAQ,6BAAA;I7CmjJP;E6CljJD;IAAQ,0BAAA;I7CqjJP;EACF;A6CxjJD;EACE;IAAQ,6BAAA;I7CmjJP;E6CljJD;IAAQ,0BAAA;I7CqjJP;EACF;A6C7iJD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCqCA,wDAAA;EACQ,gDAAA;EL2gJT;A6C5iJD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCwBA,wDAAA;EACQ,gDAAA;EAsHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELk6IT;A6CziJD;;ECAI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDCF,oCAAA;EAAA,4BAAA;E7C6iJD;A6CtiJD;;ExC7CE,4DAAA;EACK,uDAAA;EACG,oDAAA;ELulJT;A6CriJC;;EAEE,iBAAA;E7CuiJH;A6CpiJC;EACE,gBAAA;EACA,iBAAA;EACA,+BAAA;EACA,wBAAA;EACA,0BAAA;EAAA,kBAAA;E7CsiJH;A6C7hJD;EEvFE,2BAAA;E/CunJD;A+CpnJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CukJH;A6CjiJD;EE3FE,2BAAA;E/C+nJD;A+C5nJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+kJH;A6CriJD;EE/FE,2BAAA;E/CuoJD;A+CpoJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CulJH;A6CziJD;EEnGE,2BAAA;E/C+oJD;A+C5oJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+lJH;AgD9oJD;;EAEE,kBAAA;EACA,SAAA;EhDgpJD;AgD5oJD;;EAEE,kBAAA;EhD8oJD;AgD5oJD;EACE,eAAA;EhD8oJD;AgD1oJD;EACE,gBAAA;EhD4oJD;AgDxoJD;EACE,iBAAA;EhD0oJD;AgDnoJD;EAEI,oBAAA;EhDooJH;AgDtoJD;EAKI,mBAAA;EhDooJH;AgD3nJD;EACE,iBAAA;EACA,kBAAA;EhD6nJD;AiD1qJD;EAEE,qBAAA;EACA,iBAAA;EjD2qJD;AiDnqJD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjDoqJD;AiDjqJC;ErB3BA,8BAAA;EACC,6BAAA;E5B+rJF;AiDlqJC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5B4rJF;AiDprJD;EAoBI,cAAA;EjDmqJH;AiDvrJD;EAuBI,mBAAA;EjDmqJH;AiDzpJD;EACE,gBAAA;EjD2pJD;AiD5pJD;EAII,gBAAA;EjD2pJH;AiDvpJC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDypJH;AiDnpJC;;;EAGE,2BAAA;EACA,gBAAA;EjDqpJH;AiDzpJC;;;EAQI,gBAAA;EjDspJL;AiD9pJC;;;EAWI,gBAAA;EjDwpJL;AiDnpJC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDqpJH;AiD3pJC;;;;;;;;;EAYI,gBAAA;EjD0pJL;AiDtqJC;;;EAeI,gBAAA;EjD4pJL;AkD/vJC;EACE,gBAAA;EACA,2BAAA;ElDiwJH;AkD/vJG;EACE,gBAAA;ElDiwJL;AkDlwJG;EAII,gBAAA;ElDiwJP;AkD9vJK;;EAEE,gBAAA;EACA,2BAAA;ElDgwJP;AkD9vJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDgwJP;AkDrxJC;EACE,gBAAA;EACA,2BAAA;ElDuxJH;AkDrxJG;EACE,gBAAA;ElDuxJL;AkDxxJG;EAII,gBAAA;ElDuxJP;AkDpxJK;;EAEE,gBAAA;EACA,2BAAA;ElDsxJP;AkDpxJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsxJP;AkD3yJC;EACE,gBAAA;EACA,2BAAA;ElD6yJH;AkD3yJG;EACE,gBAAA;ElD6yJL;AkD9yJG;EAII,gBAAA;ElD6yJP;AkD1yJK;;EAEE,gBAAA;EACA,2BAAA;ElD4yJP;AkD1yJK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4yJP;AkDj0JC;EACE,gBAAA;EACA,2BAAA;ElDm0JH;AkDj0JG;EACE,gBAAA;ElDm0JL;AkDp0JG;EAII,gBAAA;ElDm0JP;AkDh0JK;;EAEE,gBAAA;EACA,2BAAA;ElDk0JP;AkDh0JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDk0JP;AiD/tJD;EACE,eAAA;EACA,oBAAA;EjDiuJD;AiD/tJD;EACE,kBAAA;EACA,kBAAA;EjDiuJD;AmD51JD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;ELqyJT;AmD31JD;EACE,eAAA;EnD61JD;AmDx1JD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5B+2JF;AmD91JD;EAMI,gBAAA;EnD21JH;AmDt1JD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnDw1JD;AmD51JD;EAOI,gBAAA;EnDw1JH;AmDn1JD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBpCA,iCAAA;EACC,gCAAA;E5B03JF;AmD70JD;EAEI,kBAAA;EnD80JH;AmDh1JD;EAKM,qBAAA;EACA,kBAAA;EnD80JL;AmD10JG;EAEI,eAAA;EvBlEN,8BAAA;EACC,6BAAA;E5B84JF;AmDx0JG;EAEI,kBAAA;EvBjEN,iCAAA;EACC,gCAAA;E5B24JF;AmDp0JD;EAEI,qBAAA;EnDq0JH;AmDl0JD;EACE,qBAAA;EnDo0JD;AmD5zJD;;;EAII,kBAAA;EnD6zJH;AmDj0JD;;EvB9FE,8BAAA;EACC,6BAAA;E5Bm6JF;AmDt0JD;;;;;;;;EAgBU,6BAAA;EnDg0JT;AmDh1JD;;;;;;;;EAoBU,8BAAA;EnDs0JT;AmD11JD;;EvBtFE,iCAAA;EACC,gCAAA;E5Bo7JF;AmD/1JD;;;;;;;;EAmCU,gCAAA;EnDs0JT;AmDz2JD;;;;;;;;EAuCU,iCAAA;EnD40JT;AmDn3JD;;EA8CI,+BAAA;EnDy0JH;AmDv3JD;;EAkDI,eAAA;EnDy0JH;AmD33JD;;EAsDI,WAAA;EnDy0JH;AmD/3JD;;;;;;;;;;;;EA6DU,gBAAA;EnDg1JT;AmD74JD;;;;;;;;;;;;EAiEU,iBAAA;EnD01JT;AmD35JD;;;;;;;;EA0EU,kBAAA;EnD21JT;AmDr6JD;;;;;;;;EAmFU,kBAAA;EnD41JT;AmD/6JD;EAyFI,WAAA;EACA,kBAAA;EnDy1JH;AmD/0JD;EACE,qBAAA;EnDi1JD;AmDl1JD;EAKI,kBAAA;EACA,oBAAA;EnDg1JH;AmDt1JD;EAQM,iBAAA;EnDi1JL;AmDz1JD;EAaI,kBAAA;EnD+0JH;AmD51JD;EAeM,+BAAA;EnDg1JL;AmD/1JD;EAmBI,eAAA;EnD+0JH;AmDl2JD;EAqBM,kCAAA;EnDg1JL;AmDz0JD;EC9NE,uBAAA;EpD0iKD;AoDxiKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD0iKH;AoD7iKC;EAMI,2BAAA;EpD0iKL;AoDhjKC;EASI,gBAAA;EACA,2BAAA;EpD0iKL;AoDviKC;EAEI,8BAAA;EpDwiKL;AmDx1JD;ECjOE,uBAAA;EpD4jKD;AoD1jKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD4jKH;AoD/jKC;EAMI,2BAAA;EpD4jKL;AoDlkKC;EASI,gBAAA;EACA,2BAAA;EpD4jKL;AoDzjKC;EAEI,8BAAA;EpD0jKL;AmDv2JD;ECpOE,uBAAA;EpD8kKD;AoD5kKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD8kKH;AoDjlKC;EAMI,2BAAA;EpD8kKL;AoDplKC;EASI,gBAAA;EACA,2BAAA;EpD8kKL;AoD3kKC;EAEI,8BAAA;EpD4kKL;AmDt3JD;ECvOE,uBAAA;EpDgmKD;AoD9lKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDgmKH;AoDnmKC;EAMI,2BAAA;EpDgmKL;AoDtmKC;EASI,gBAAA;EACA,2BAAA;EpDgmKL;AoD7lKC;EAEI,8BAAA;EpD8lKL;AmDr4JD;EC1OE,uBAAA;EpDknKD;AoDhnKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDknKH;AoDrnKC;EAMI,2BAAA;EpDknKL;AoDxnKC;EASI,gBAAA;EACA,2BAAA;EpDknKL;AoD/mKC;EAEI,8BAAA;EpDgnKL;AmDp5JD;EC7OE,uBAAA;EpDooKD;AoDloKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDooKH;AoDvoKC;EAMI,2BAAA;EpDooKL;AoD1oKC;EASI,gBAAA;EACA,2BAAA;EpDooKL;AoDjoKC;EAEI,8BAAA;EpDkoKL;AqDlpKD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDopKD;AqDzpKD;;;;EAWI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDopKH;AqDhpKC;EACE,wBAAA;ErDkpKH;AqD9oKC;EACE,qBAAA;ErDgpKH;AsDzqKD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;ELonKT;AsDnrKD;EASI,oBAAA;EACA,mCAAA;EtD6qKH;AsDxqKD;EACE,eAAA;EACA,oBAAA;EtD0qKD;AsDxqKD;EACE,cAAA;EACA,oBAAA;EtD0qKD;AuDhsKD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtBysKD;AuDjsKC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBitKD;AuD9rKC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDgsKH;AwDptKD;EACE,kBAAA;ExDstKD;AwDltKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDitKD;AwD9sKC;EnDkHA,4CAAA;EACQ,uCAAA;EAAA,oCAAA;EA8DR,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELkiKT;AwDltKC;EnD8GA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELumKT;AwDptKD;EACE,oBAAA;EACA,kBAAA;ExDstKD;AwDltKD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExDotKD;AwDhtKD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;EAAA,8BAAA;EAEA,YAAA;ExDktKD;AwD9sKD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExDgtKD;AwD9sKC;ElCrEA,YAAA;EAGA,0BAAA;EtBoxKD;AwDjtKC;ElCtEA,cAAA;EAGA,2BAAA;EtBwxKD;AwDhtKD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExDktKD;AwD/sKD;EACE,kBAAA;ExDitKD;AwD7sKD;EACE,WAAA;EACA,yBAAA;ExD+sKD;AwD1sKD;EACE,oBAAA;EACA,eAAA;ExD4sKD;AwDxsKD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExD0sKD;AwD7sKD;EAQI,kBAAA;EACA,kBAAA;ExDwsKH;AwDjtKD;EAaI,mBAAA;ExDusKH;AwDptKD;EAiBI,gBAAA;ExDssKH;AwDjsKD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExDmsKD;AwDjrKD;EAZE;IACE,cAAA;IACA,mBAAA;IxDgsKD;EwD9rKD;InDvEA,mDAAA;IACQ,2CAAA;ILwwKP;EwD7rKD;IAAY,cAAA;IxDgsKX;EACF;AwD3rKD;EAFE;IAAY,cAAA;IxDisKX;EACF;AyDh1KD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EnCTA,YAAA;EAGA,0BAAA;EtB01KD;AyDj1KC;EnCZA,cAAA;EAGA,2BAAA;EtB81KD;AyDp1KC;EAAW,kBAAA;EAAmB,gBAAA;EzDw1K/B;AyDv1KC;EAAW,kBAAA;EAAmB,gBAAA;EzD21K/B;AyD11KC;EAAW,iBAAA;EAAmB,gBAAA;EzD81K/B;AyD71KC;EAAW,mBAAA;EAAmB,gBAAA;EzDi2K/B;AyD71KD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzD+1KD;AyD31KD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzD61KD;AyD11KC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,WAAA;EACA,WAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,WAAA;EACA,YAAA;EACA,yBAAA;EACA,2BAAA;EzD41KH;AyD11KC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzD41KH;AyD11KC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,WAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;AyD11KC;EACE,QAAA;EACA,YAAA;EACA,yBAAA;EACA,8BAAA;EzD41KH;A0Dn7KD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;EAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErDkDA,mDAAA;EACQ,2CAAA;EqD/CR,qBAAA;E1Do7KD;A0Dj7KC;EAAY,mBAAA;E1Do7Kb;A0Dn7KC;EAAY,mBAAA;E1Ds7Kb;A0Dr7KC;EAAY,kBAAA;E1Dw7Kb;A0Dv7KC;EAAY,oBAAA;E1D07Kb;A0Dv7KD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,mBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1Dy7KD;A0Dt7KD;EACE,mBAAA;E1Dw7KD;A0Dh7KC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1Dk7KH;A0D/6KD;EACE,oBAAA;E1Di7KD;A0D/6KD;EACE,oBAAA;EACA,aAAA;E1Di7KD;A0D76KC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1Dg7KL;A0D76KC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1Dg7KL;A0D76KC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D+6KH;A0D96KG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1Dg7KL;A0D56KC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D86KH;A0D76KG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D+6KL;A2DziLD;EACE,oBAAA;E3D2iLD;A2DxiLD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D0iLD;A2D7iLD;EAMI,eAAA;EACA,oBAAA;EtD0KF,2CAAA;EACK,sCAAA;EACG,mCAAA;ELi4KT;A2DpjLD;;EAcM,gBAAA;E3D0iLL;A2DxjLD;;;EAqBI,gBAAA;E3DwiLH;A2D7jLD;EAyBI,SAAA;E3DuiLH;A2DhkLD;;EA8BI,oBAAA;EACA,QAAA;EACA,aAAA;E3DsiLH;A2DtkLD;EAoCI,YAAA;E3DqiLH;A2DzkLD;EAuCI,aAAA;E3DqiLH;A2D5kLD;;EA2CI,SAAA;E3DqiLH;A2DhlLD;EA+CI,aAAA;E3DoiLH;A2DnlLD;EAkDI,YAAA;E3DoiLH;A2D5hLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErCtEA,cAAA;EAGA,2BAAA;EqCqEA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+hLD;A2D1hLC;Eb1EE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CumLH;A2D9hLC;EACE,YAAA;EACA,UAAA;Eb/EA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CgnLH;A2DhiLC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErC9FF,cAAA;EAGA,2BAAA;EtB+nLD;A2DjkLD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3DiiLH;A2D1kLD;;EA6CI,WAAA;EACA,oBAAA;E3DiiLH;A2D/kLD;;EAkDI,YAAA;EACA,qBAAA;E3DiiLH;A2DplLD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;E3DiiLH;A2D5hLG;EACE,kBAAA;E3D8hLL;A2D1hLG;EACE,kBAAA;E3D4hLL;A2DlhLD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3DohLD;A2D7hLD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAUA,2BAAA;EACA,oCAAA;E3D2gLH;A2DziLD;EAiCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3D2gLH;A2DpgLD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3DsgLD;A2DrgLC;EACE,mBAAA;E3DugLH;A2D99KD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3DggLH;E2DxgLD;;IAYI,oBAAA;I3DggLH;E2D5gLD;;IAgBI,qBAAA;I3DggLH;E2D3/KD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3D6/KD;E2Dz/KD;IACE,cAAA;I3D2/KD;EACF;A4D/tLC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5D6vLH;A4D3vLC;;;;;;;;;;;;;;;EACE,aAAA;E5D2wLH;AiCnxLD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7D8xLD;AiCrxLD;EACE,yBAAA;EjCuxLD;AiCrxLD;EACE,wBAAA;EjCuxLD;AiC/wLD;EACE,0BAAA;EjCixLD;AiC/wLD;EACE,2BAAA;EjCixLD;AiC/wLD;EACE,oBAAA;EjCixLD;AiC/wLD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D2yLD;AiC7wLD;EACE,0BAAA;EACA,+BAAA;EjC+wLD;AiCxwLD;EACE,iBAAA;E5B2FA,yCAAA;EACQ,oCAAA;EAAA,iCAAA;ELgrLT;A+D9yLD;EACE,qBAAA;E/DgzLD;A+D1yLD;;;;ECdE,0BAAA;EhE8zLD;A+DzyLD;;;;;;;;;;;;EAYE,0BAAA;E/D2yLD;A+DpyLD;EAAA;IChDE,2BAAA;IhEw1LC;EgEv1LD;IAAU,gBAAA;IhE01LT;EgEz1LD;IAAU,+BAAA;IhE41LT;EgE31LD;;IACU,gCAAA;IhE81LT;EACF;A+D9yLD;EAAA;IAFI,2BAAA;I/DozLD;EACF;A+D9yLD;EAAA;IAFI,4BAAA;I/DozLD;EACF;A+D9yLD;EAAA;IAFI,kCAAA;I/DozLD;EACF;A+D7yLD;EAAA;ICrEE,2BAAA;IhEs3LC;EgEr3LD;IAAU,gBAAA;IhEw3LT;EgEv3LD;IAAU,+BAAA;IhE03LT;EgEz3LD;;IACU,gCAAA;IhE43LT;EACF;A+DvzLD;EAAA;IAFI,2BAAA;I/D6zLD;EACF;A+DvzLD;EAAA;IAFI,4BAAA;I/D6zLD;EACF;A+DvzLD;EAAA;IAFI,kCAAA;I/D6zLD;EACF;A+DtzLD;EAAA;IC1FE,2BAAA;IhEo5LC;EgEn5LD;IAAU,gBAAA;IhEs5LT;EgEr5LD;IAAU,+BAAA;IhEw5LT;EgEv5LD;;IACU,gCAAA;IhE05LT;EACF;A+Dh0LD;EAAA;IAFI,2BAAA;I/Ds0LD;EACF;A+Dh0LD;EAAA;IAFI,4BAAA;I/Ds0LD;EACF;A+Dh0LD;EAAA;IAFI,kCAAA;I/Ds0LD;EACF;A+D/zLD;EAAA;IC/GE,2BAAA;IhEk7LC;EgEj7LD;IAAU,gBAAA;IhEo7LT;EgEn7LD;IAAU,+BAAA;IhEs7LT;EgEr7LD;;IACU,gCAAA;IhEw7LT;EACF;A+Dz0LD;EAAA;IAFI,2BAAA;I/D+0LD;EACF;A+Dz0LD;EAAA;IAFI,4BAAA;I/D+0LD;EACF;A+Dz0LD;EAAA;IAFI,kCAAA;I/D+0LD;EACF;A+Dx0LD;EAAA;IC5HE,0BAAA;IhEw8LC;EACF;A+Dx0LD;EAAA;ICjIE,0BAAA;IhE68LC;EACF;A+Dx0LD;EAAA;ICtIE,0BAAA;IhEk9LC;EACF;A+Dx0LD;EAAA;IC3IE,0BAAA;IhEu9LC;EACF;A+Dr0LD;ECnJE,0BAAA;EhE29LD;A+Dl0LD;EAAA;ICjKE,2BAAA;IhEu+LC;EgEt+LD;IAAU,gBAAA;IhEy+LT;EgEx+LD;IAAU,+BAAA;IhE2+LT;EgE1+LD;;IACU,gCAAA;IhE6+LT;EACF;A+Dh1LD;EACE,0BAAA;E/Dk1LD;A+D70LD;EAAA;IAFI,2BAAA;I/Dm1LD;EACF;A+Dj1LD;EACE,0BAAA;E/Dm1LD;A+D90LD;EAAA;IAFI,4BAAA;I/Do1LD;EACF;A+Dl1LD;EACE,0BAAA;E/Do1LD;A+D/0LD;EAAA;IAFI,kCAAA;I/Dq1LD;EACF;A+D90LD;EAAA;ICpLE,0BAAA;IhEsgMC;EACF","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n width: 100% \\9; // Force IE10 and below to size SVG images correctly\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n font-style: normal;\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: @input-height-base;\n // IE8+ misaligns the text within date inputs, so we reset\n line-height: @line-height-base ~\"\\0\";\n\n &.input-sm {\n line-height: @input-height-small;\n }\n &.input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because