Added DotNet2018 Ooui Sample
|
@ -0,0 +1,815 @@
|
|||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETStandard,Version=v2.0/",
|
||||
"signature": "aabdbe0a6d7e0a67a00b9bb3d50419ececf771d0"
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETStandard,Version=v2.0": {},
|
||||
".NETStandard,Version=v2.0/": {
|
||||
"Ooui.Forms/1.0.0": {
|
||||
"dependencies": {
|
||||
"NETStandard.Library": "2.0.1",
|
||||
"Ooui": "1.0.0",
|
||||
"Xamarin.Forms": "2.5.0.122203"
|
||||
},
|
||||
"runtime": {
|
||||
"Ooui.Forms.dll": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.CSharp/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Dynamic.Runtime": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Linq": "4.3.0",
|
||||
"System.Linq.Expressions": "4.3.0",
|
||||
"System.ObjectModel": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Extensions": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Reflection.TypeExtensions": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/Microsoft.CSharp.dll": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/1.1.0": {},
|
||||
"Microsoft.NETCore.Targets/1.1.0": {},
|
||||
"NETStandard.Library/2.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0"
|
||||
}
|
||||
},
|
||||
"Newtonsoft.Json/10.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.CSharp": "4.3.0",
|
||||
"NETStandard.Library": "2.0.1",
|
||||
"System.ComponentModel.TypeConverter": "4.3.0",
|
||||
"System.Runtime.Serialization.Formatters": "4.3.0",
|
||||
"System.Runtime.Serialization.Primitives": "4.3.0",
|
||||
"System.Xml.XmlDocument": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/Newtonsoft.Json.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Collections/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Collections.NonGeneric/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Collections.NonGeneric.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Collections.Specialized/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Globalization.Extensions": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Collections.Specialized.dll": {}
|
||||
}
|
||||
},
|
||||
"System.ComponentModel/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.ComponentModel.dll": {}
|
||||
}
|
||||
},
|
||||
"System.ComponentModel.Primitives/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.ComponentModel": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/System.ComponentModel.Primitives.dll": {}
|
||||
}
|
||||
},
|
||||
"System.ComponentModel.TypeConverter/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
"System.Collections.Specialized": "4.3.0",
|
||||
"System.ComponentModel": "4.3.0",
|
||||
"System.ComponentModel.Primitives": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Linq": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Extensions": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Reflection.TypeExtensions": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.Debug/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Dynamic.Runtime/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Linq": "4.3.0",
|
||||
"System.Linq.Expressions": "4.3.0",
|
||||
"System.ObjectModel": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Emit": "4.3.0",
|
||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Reflection.TypeExtensions": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Dynamic.Runtime.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Globalization/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Globalization.Extensions/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.IO/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.IO.FileSystem/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.IO.FileSystem.Primitives/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Linq/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.6/System.Linq.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Linq.Expressions/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Linq": "4.3.0",
|
||||
"System.ObjectModel": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Emit": "4.3.0",
|
||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
||||
"System.Reflection.Emit.Lightweight": "4.3.0",
|
||||
"System.Reflection.Extensions": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Reflection.TypeExtensions": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.6/System.Linq.Expressions.dll": {}
|
||||
}
|
||||
},
|
||||
"System.ObjectModel/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.ObjectModel.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Reflection/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.Emit/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.IO": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Reflection.Emit.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Reflection.Emit.ILGeneration/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Reflection.Emit.Lightweight/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Reflection.Extensions/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.Primitives/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.TypeExtensions/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Resources.ResourceManager/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.Extensions/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.Handles/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.InteropServices/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Reflection.Primitives": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Handles": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.Serialization.Formatters/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Reflection": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Serialization.Primitives": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.4/System.Runtime.Serialization.Formatters.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Runtime.Serialization.Primitives/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Text.Encoding/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Text.Encoding.Extensions/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Text.RegularExpressions/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Threading": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.6/System.Text.RegularExpressions.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Threading/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Threading.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Threading.Tasks/4.3.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
||||
"Microsoft.NETCore.Targets": "1.1.0",
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"System.Threading.Tasks.Extensions/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Xml.ReaderWriter/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.IO.FileSystem": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Runtime.InteropServices": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Text.Encoding.Extensions": "4.3.0",
|
||||
"System.Text.RegularExpressions": "4.3.0",
|
||||
"System.Threading.Tasks": "4.3.0",
|
||||
"System.Threading.Tasks.Extensions": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Xml.ReaderWriter.dll": {}
|
||||
}
|
||||
},
|
||||
"System.Xml.XmlDocument/4.3.0": {
|
||||
"dependencies": {
|
||||
"System.Collections": "4.3.0",
|
||||
"System.Diagnostics.Debug": "4.3.0",
|
||||
"System.Globalization": "4.3.0",
|
||||
"System.IO": "4.3.0",
|
||||
"System.Resources.ResourceManager": "4.3.0",
|
||||
"System.Runtime": "4.3.0",
|
||||
"System.Runtime.Extensions": "4.3.0",
|
||||
"System.Text.Encoding": "4.3.0",
|
||||
"System.Threading": "4.3.0",
|
||||
"System.Xml.ReaderWriter": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.3/System.Xml.XmlDocument.dll": {}
|
||||
}
|
||||
},
|
||||
"Xamarin.Forms/2.5.0.122203": {
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
|
||||
"lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
|
||||
"lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
|
||||
}
|
||||
},
|
||||
"Ooui/1.0.0": {
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "10.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"Ooui.dll": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Ooui.Forms/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Microsoft.CSharp/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-P+MBhIM0YX+JqROuf7i306ZLJEjQYA9uUyRDE+OqwUI5sh41e2ZbPQV3LfAPh+29cmceE1pUffXsGfR4eMY3KA==",
|
||||
"path": "microsoft.csharp/4.3.0",
|
||||
"hashPath": "microsoft.csharp.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
|
||||
"path": "microsoft.netcore.platforms/1.1.0",
|
||||
"hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.NETCore.Targets/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
|
||||
"path": "microsoft.netcore.targets/1.1.0",
|
||||
"hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"NETStandard.Library/2.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-oA6nwv9MhEKYvLpjZ0ggSpb1g4CQViDVQjLUcDWg598jtvJbpfeP2reqwI1GLW2TbxC/Ml7xL6BBR1HmKPXlTg==",
|
||||
"path": "netstandard.library/2.0.1",
|
||||
"hashPath": "netstandard.library.2.0.1.nupkg.sha512"
|
||||
},
|
||||
"Newtonsoft.Json/10.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iwElSU2IXmwGvytJsezyDML2ZWDkG2JzTYzlU/BNlmzMdlmRvbnwITsGGY74gwVEpDli1UdOLkMT7/3jxWvXzA==",
|
||||
"path": "newtonsoft.json/10.0.2",
|
||||
"hashPath": "newtonsoft.json.10.0.2.nupkg.sha512"
|
||||
},
|
||||
"System.Collections/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
|
||||
"path": "system.collections/4.3.0",
|
||||
"hashPath": "system.collections.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Collections.NonGeneric/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fo1z+YvNpb7h8zbzfvliNj/aVO+8ea5Bz5+iMKBpX7ekkMLB1Znf0Yx3iDRffPnNLeruAoLwnNVnuTAM6XIkOQ==",
|
||||
"path": "system.collections.nongeneric/4.3.0",
|
||||
"hashPath": "system.collections.nongeneric.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Collections.Specialized/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-R9jCiZQps9O/DnHKYWl/0CzghORAN2JUVqfNQ6Xw2xNGzVyb77H0Q0Tkxj02gyZoYwRO1ad1G7PZpsorkeInCA==",
|
||||
"path": "system.collections.specialized/4.3.0",
|
||||
"hashPath": "system.collections.specialized.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.ComponentModel/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-k/ahcIfdwoCOIkHgICJuZudukj1GJKgdgle9O/YhYTLZYin5pfc1UEuRmtbHkSHKmHmGqC265/btmE019JnhUg==",
|
||||
"path": "system.componentmodel/4.3.0",
|
||||
"hashPath": "system.componentmodel.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.ComponentModel.Primitives/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==",
|
||||
"path": "system.componentmodel.primitives/4.3.0",
|
||||
"hashPath": "system.componentmodel.primitives.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.ComponentModel.TypeConverter/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==",
|
||||
"path": "system.componentmodel.typeconverter/4.3.0",
|
||||
"hashPath": "system.componentmodel.typeconverter.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.Debug/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
|
||||
"path": "system.diagnostics.debug/4.3.0",
|
||||
"hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Dynamic.Runtime/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==",
|
||||
"path": "system.dynamic.runtime/4.3.0",
|
||||
"hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Globalization/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
|
||||
"path": "system.globalization/4.3.0",
|
||||
"hashPath": "system.globalization.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Globalization.Extensions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-H1T7PZi4cp0++yoH9R1a8x0/+ANsb3RYQkw+s7K0LY+MKvpRQd5wyKzPhixUfBDPjN6TyKhO/XCFVGG1rQ5zHw==",
|
||||
"path": "system.globalization.extensions/4.3.0",
|
||||
"hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.IO/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
|
||||
"path": "system.io/4.3.0",
|
||||
"hashPath": "system.io.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.IO.FileSystem/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
|
||||
"path": "system.io.filesystem/4.3.0",
|
||||
"hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.IO.FileSystem.Primitives/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
|
||||
"path": "system.io.filesystem.primitives/4.3.0",
|
||||
"hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Linq/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
|
||||
"path": "system.linq/4.3.0",
|
||||
"hashPath": "system.linq.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Linq.Expressions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
|
||||
"path": "system.linq.expressions/4.3.0",
|
||||
"hashPath": "system.linq.expressions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.ObjectModel/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
|
||||
"path": "system.objectmodel/4.3.0",
|
||||
"hashPath": "system.objectmodel.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
|
||||
"path": "system.reflection/4.3.0",
|
||||
"hashPath": "system.reflection.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Emit/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-aTrZSsXzZBfiQbxSKE6s7hp4ehmeWBXepnxdhifURJe6p4m4sfzfcEhGVbEtPthrt6jWgF7Gax7pajfUfuGZWw==",
|
||||
"path": "system.reflection.emit/4.3.0",
|
||||
"hashPath": "system.reflection.emit.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Emit.ILGeneration/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
|
||||
"path": "system.reflection.emit.ilgeneration/4.3.0",
|
||||
"hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Emit.Lightweight/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
|
||||
"path": "system.reflection.emit.lightweight/4.3.0",
|
||||
"hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Extensions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
|
||||
"path": "system.reflection.extensions/4.3.0",
|
||||
"hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Primitives/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
|
||||
"path": "system.reflection.primitives/4.3.0",
|
||||
"hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.TypeExtensions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
|
||||
"path": "system.reflection.typeextensions/4.3.0",
|
||||
"hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Resources.ResourceManager/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
|
||||
"path": "system.resources.resourcemanager/4.3.0",
|
||||
"hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
|
||||
"path": "system.runtime/4.3.0",
|
||||
"hashPath": "system.runtime.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.Extensions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
|
||||
"path": "system.runtime.extensions/4.3.0",
|
||||
"hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.Handles/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
|
||||
"path": "system.runtime.handles/4.3.0",
|
||||
"hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.InteropServices/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
|
||||
"path": "system.runtime.interopservices/4.3.0",
|
||||
"hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.Serialization.Formatters/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==",
|
||||
"path": "system.runtime.serialization.formatters/4.3.0",
|
||||
"hashPath": "system.runtime.serialization.formatters.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.Serialization.Primitives/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==",
|
||||
"path": "system.runtime.serialization.primitives/4.3.0",
|
||||
"hashPath": "system.runtime.serialization.primitives.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Encoding/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
|
||||
"path": "system.text.encoding/4.3.0",
|
||||
"hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Encoding.Extensions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
|
||||
"path": "system.text.encoding.extensions/4.3.0",
|
||||
"hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.RegularExpressions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
|
||||
"path": "system.text.regularexpressions/4.3.0",
|
||||
"hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
|
||||
"path": "system.threading/4.3.0",
|
||||
"hashPath": "system.threading.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.Tasks/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
|
||||
"path": "system.threading.tasks/4.3.0",
|
||||
"hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.Tasks.Extensions/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
|
||||
"path": "system.threading.tasks.extensions/4.3.0",
|
||||
"hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Xml.ReaderWriter/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
|
||||
"path": "system.xml.readerwriter/4.3.0",
|
||||
"hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"System.Xml.XmlDocument/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==",
|
||||
"path": "system.xml.xmldocument/4.3.0",
|
||||
"hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"Xamarin.Forms/2.5.0.122203": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-qg7A2IXbVV/5u9qqeiDhRMwpVEsbWKBxzeAtD0rTuntmaDB1Z7WuBg5IK2VBklJbKe2Ps8V9zBfEwgJIqPVJUw==",
|
||||
"path": "xamarin.forms/2.5.0.122203",
|
||||
"hashPath": "xamarin.forms.2.5.0.122203.nupkg.sha512"
|
||||
},
|
||||
"Ooui/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27703.2000
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Movies.Web", "Movies.Web\Movies.Web.csproj", "{5378447F-1501-4690-A823-0E642E90A2B7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5378447F-1501-4690-A823-0E642E90A2B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5378447F-1501-4690-A823-0E642E90A2B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5378447F-1501-4690-A823-0E642E90A2B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5378447F-1501-4690-A823-0E642E90A2B7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {62E204E2-0BFD-47A3-B3EC-B2CC2FBEAC33}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,15 @@
|
|||
namespace Movies.Web
|
||||
{
|
||||
public static class AppSettings
|
||||
{
|
||||
public static string ApiKey = "1e01bec596ba252a25dbb806a9792279";
|
||||
public static string ApiUrl = "https://api.themoviedb.org/3/";
|
||||
public static string PosterImageUrl = "http://image.tmdb.org/t/p/w185/";
|
||||
public static string BackdropImageUrl = "http://image.tmdb.org/t/p/w500/";
|
||||
public static string YouTubeUrl = "https://www.youtube.com/watch?v=";
|
||||
public static string DialogMessage = "ShowDialog";
|
||||
public static string MoviesMessage = "Movies";
|
||||
public static string ShowsMessage = "Shows";
|
||||
public static string ImagesMessage = "Images";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Movies.Web.Models;
|
||||
using Movies.Web.Pages;
|
||||
using Ooui.AspNetCore;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Controllers
|
||||
{
|
||||
|
||||
public class HomeController : Controller
|
||||
{
|
||||
public IActionResult Index()
|
||||
{
|
||||
var page = new HomeView();
|
||||
var navigationPage = new NavigationPage(page);
|
||||
var element = navigationPage.GetOouiElement();
|
||||
return new ElementResult(element, "Movies Ooui Forms");
|
||||
}
|
||||
|
||||
public IActionResult About()
|
||||
{
|
||||
ViewData["Message"] = "Your application description page.";
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Contact()
|
||||
{
|
||||
ViewData["Message"] = "Your contact page.";
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Error()
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,176 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Controls
|
||||
{
|
||||
public class HorizontalList : Grid
|
||||
{
|
||||
private ICommand _innerSelectedCommand;
|
||||
private readonly ScrollView _scrollView;
|
||||
private readonly StackLayout _itemsStackLayout;
|
||||
|
||||
public event EventHandler SelectedItemChanged;
|
||||
|
||||
public StackOrientation ListOrientation { get; set; }
|
||||
|
||||
public double Spacing { get; set; }
|
||||
|
||||
public static readonly BindableProperty SelectedCommandProperty =
|
||||
BindableProperty.Create("SelectedCommand", typeof(ICommand), typeof(HorizontalList), null);
|
||||
|
||||
public static readonly BindableProperty ItemsSourceProperty =
|
||||
BindableProperty.Create("ItemsSource", typeof(IEnumerable), typeof(HorizontalList), default(IEnumerable<object>), BindingMode.TwoWay, propertyChanged: ItemsSourceChanged);
|
||||
|
||||
public static readonly BindableProperty SelectedItemProperty =
|
||||
BindableProperty.Create("SelectedItem", typeof(object), typeof(HorizontalList), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
|
||||
|
||||
public static readonly BindableProperty ItemTemplateProperty =
|
||||
BindableProperty.Create("ItemTemplate", typeof(DataTemplate), typeof(HorizontalList), default(DataTemplate));
|
||||
|
||||
public ICommand SelectedCommand
|
||||
{
|
||||
get { return (ICommand)GetValue(SelectedCommandProperty); }
|
||||
set { SetValue(SelectedCommandProperty, value); }
|
||||
}
|
||||
|
||||
public IEnumerable ItemsSource
|
||||
{
|
||||
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
|
||||
set { SetValue(ItemsSourceProperty, value); }
|
||||
}
|
||||
|
||||
public object SelectedItem
|
||||
{
|
||||
get { return (object)GetValue(SelectedItemProperty); }
|
||||
set { SetValue(SelectedItemProperty, value); }
|
||||
}
|
||||
|
||||
public DataTemplate ItemTemplate
|
||||
{
|
||||
get { return (DataTemplate)GetValue(ItemTemplateProperty); }
|
||||
set { SetValue(ItemTemplateProperty, value); }
|
||||
}
|
||||
|
||||
private static void ItemsSourceChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var itemsLayout = (HorizontalList)bindable;
|
||||
itemsLayout.SetItems();
|
||||
}
|
||||
|
||||
public HorizontalList()
|
||||
{
|
||||
BackgroundColor = Color.FromHex("#1E2634");
|
||||
Spacing = 6;
|
||||
_scrollView = new ScrollView();
|
||||
_itemsStackLayout = new StackLayout
|
||||
{
|
||||
BackgroundColor = BackgroundColor,
|
||||
Padding = Padding,
|
||||
Spacing = Spacing,
|
||||
HorizontalOptions = LayoutOptions.FillAndExpand
|
||||
};
|
||||
|
||||
_scrollView.BackgroundColor = BackgroundColor;
|
||||
_scrollView.Content = _itemsStackLayout;
|
||||
Children.Add(_scrollView);
|
||||
}
|
||||
|
||||
protected virtual void SetItems()
|
||||
{
|
||||
_itemsStackLayout.Children.Clear();
|
||||
_itemsStackLayout.Spacing = Spacing;
|
||||
|
||||
_innerSelectedCommand = new Command<View>(view =>
|
||||
{
|
||||
SelectedItem = view.BindingContext;
|
||||
SelectedItem = null; // Allowing item second time selection
|
||||
});
|
||||
|
||||
_itemsStackLayout.Orientation = ListOrientation;
|
||||
_scrollView.Orientation = ListOrientation == StackOrientation.Horizontal
|
||||
? ScrollOrientation.Horizontal
|
||||
: ScrollOrientation.Vertical;
|
||||
|
||||
if (ItemsSource == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
foreach (var item in ItemsSource)
|
||||
{
|
||||
_itemsStackLayout.Children.Add(GetItemView(item));
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
_itemsStackLayout.BackgroundColor = BackgroundColor;
|
||||
SelectedItem = null;
|
||||
}
|
||||
|
||||
protected virtual View GetItemView(object item)
|
||||
{
|
||||
var content = ItemTemplate.CreateContent();
|
||||
var view = content as View;
|
||||
|
||||
if (view == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
view.BindingContext = item;
|
||||
|
||||
var gesture = new TapGestureRecognizer
|
||||
{
|
||||
Command = _innerSelectedCommand,
|
||||
CommandParameter = view
|
||||
};
|
||||
|
||||
AddGesture(view, gesture);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
private void AddGesture(View view, TapGestureRecognizer gesture)
|
||||
{
|
||||
view.GestureRecognizers.Add(gesture);
|
||||
|
||||
var layout = view as Layout<View>;
|
||||
|
||||
if (layout == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var child in layout.Children)
|
||||
{
|
||||
AddGesture(child, gesture);
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var itemsView = (HorizontalList)bindable;
|
||||
|
||||
if (newValue == oldValue && newValue != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
itemsView.SelectedItemChanged?.Invoke(itemsView, EventArgs.Empty);
|
||||
|
||||
if (itemsView.SelectedCommand?.CanExecute(newValue) ?? false)
|
||||
{
|
||||
itemsView.SelectedCommand?.Execute(newValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Converters
|
||||
{
|
||||
public class InverseBoolConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
if (!(value is bool))
|
||||
{
|
||||
throw new InvalidOperationException("The target must be a boolean");
|
||||
}
|
||||
|
||||
return !(bool)value;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Converters
|
||||
{
|
||||
public class MovieImageConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
if (parameter != null && parameter.Equals("Backdrop"))
|
||||
return string.Format("{0}{1}", AppSettings.BackdropImageUrl, value);
|
||||
else
|
||||
return string.Format("{0}{1}", AppSettings.PosterImageUrl, value);
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Converters
|
||||
{
|
||||
public class ReleaseDateConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is DateTime)
|
||||
{
|
||||
return ((DateTime)value).Year;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
После Ширина: | Высота: | Размер: 416 B |
После Ширина: | Высота: | Размер: 606 B |
После Ширина: | Высота: | Размер: 672 B |
После Ширина: | Высота: | Размер: 632 B |
После Ширина: | Высота: | Размер: 746 B |
После Ширина: | Высота: | Размер: 833 B |
После Ширина: | Высота: | Размер: 288 B |
После Ширина: | Высота: | Размер: 461 B |
После Ширина: | Высота: | Размер: 216 B |
После Ширина: | Высота: | Размер: 652 B |
После Ширина: | Высота: | Размер: 780 B |
После Ширина: | Высота: | Размер: 729 B |
После Ширина: | Высота: | Размер: 553 B |
После Ширина: | Высота: | Размер: 612 B |
После Ширина: | Высота: | Размер: 901 B |
|
@ -0,0 +1,14 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models
|
||||
{
|
||||
[DataContract]
|
||||
public class Country
|
||||
{
|
||||
[DataMember(Name = "iso_3166_1")]
|
||||
public string Iso3166Code { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
|
||||
namespace Movies.Web.Models
|
||||
{
|
||||
public class ErrorViewModel
|
||||
{
|
||||
public string RequestId { get; set; }
|
||||
|
||||
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Genre
|
||||
{
|
||||
[DataContract]
|
||||
public class Genre
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; private set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; private set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models
|
||||
{
|
||||
[DataContract]
|
||||
public class Language
|
||||
{
|
||||
[DataMember(Name = "iso_639_1")]
|
||||
public string Iso639Code { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
using System;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Models
|
||||
{
|
||||
public enum MenuItemType
|
||||
{
|
||||
Discover,
|
||||
Movies,
|
||||
TVShows,
|
||||
Upcoming,
|
||||
Favourites,
|
||||
Settings
|
||||
}
|
||||
|
||||
public class MenuItem : BindableObject
|
||||
{
|
||||
private string _title;
|
||||
|
||||
public string Title
|
||||
{
|
||||
get
|
||||
{
|
||||
return _title;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_title = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private MenuItemType _menuItemType;
|
||||
|
||||
public MenuItemType MenuItemType
|
||||
{
|
||||
get
|
||||
{
|
||||
return _menuItemType;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_menuItemType = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private Type _viewModelType;
|
||||
|
||||
public Type ViewModelType
|
||||
{
|
||||
get
|
||||
{
|
||||
return _viewModelType;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_viewModelType = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private bool _isEnabled;
|
||||
|
||||
public bool IsEnabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isEnabled;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_isEnabled = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Movie
|
||||
{
|
||||
[DataContract]
|
||||
public class Movie
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "title")]
|
||||
public string Title { get; set; }
|
||||
|
||||
[DataMember(Name = "adult")]
|
||||
public bool IsAdultThemed { get; set; }
|
||||
|
||||
[DataMember(Name = "backdrop_path")]
|
||||
public string BackdropPath { get; set; }
|
||||
|
||||
[DataMember(Name = "budget")]
|
||||
public int Budget { get; set; }
|
||||
|
||||
[DataMember(Name = "genres")]
|
||||
public IReadOnlyList<Genre.Genre> Genres { get; set; }
|
||||
|
||||
[DataMember(Name = "homepage")]
|
||||
public string Homepage { get; set; }
|
||||
|
||||
[DataMember(Name = "imdb_id")]
|
||||
public string ImdbId { get; set; }
|
||||
|
||||
[DataMember(Name = "original_language")]
|
||||
public string OriginalLanguage { get; set; }
|
||||
|
||||
[DataMember(Name = "original_title")]
|
||||
public string OriginalTitle { get; set; }
|
||||
|
||||
[DataMember(Name = "overview")]
|
||||
public string Overview { get; set; }
|
||||
|
||||
[DataMember(Name = "popularity")]
|
||||
public double Popularity { get; set; }
|
||||
|
||||
[DataMember(Name = "poster_path")]
|
||||
public string PosterPath { get; set; }
|
||||
|
||||
[DataMember(Name = "production_countries")]
|
||||
public IReadOnlyList<Country> ProductionCountries { get; set; }
|
||||
|
||||
[DataMember(Name = "release_date")]
|
||||
public DateTime ReleaseDate { get; set; }
|
||||
|
||||
[DataMember(Name = "revenue")]
|
||||
public decimal Revenue { get; set; }
|
||||
|
||||
[DataMember(Name = "runtime")]
|
||||
public int Runtime { get; set; }
|
||||
|
||||
[DataMember(Name = "spoken_languages")]
|
||||
public IReadOnlyList<Language> SpokenLanguages { get; set; }
|
||||
|
||||
[DataMember(Name = "status")]
|
||||
public string Status { get; set; }
|
||||
|
||||
[DataMember(Name = "tagline")]
|
||||
public string Tagline { get; set; }
|
||||
|
||||
[DataMember(Name = "video")]
|
||||
public bool IsVideo { get; set; }
|
||||
|
||||
[DataMember(Name = "vote_average")]
|
||||
public double VoteAverage { get; set; }
|
||||
|
||||
[DataMember(Name = "vote_count")]
|
||||
public int VoteCount { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Movie
|
||||
{
|
||||
[DataContract]
|
||||
public class MovieCastMember
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int PersonId { get; set; }
|
||||
|
||||
[DataMember(Name = "cast_id")]
|
||||
public int CastId { get; set; }
|
||||
|
||||
[DataMember(Name = "credit_id")]
|
||||
public string CreditId { get; set; }
|
||||
|
||||
[DataMember(Name = "character")]
|
||||
public string Character { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DataMember(Name = "order")]
|
||||
public int Order { get; set; }
|
||||
|
||||
[DataMember(Name = "profile_path")]
|
||||
public string ProfilePath { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Movie
|
||||
{
|
||||
[DataContract]
|
||||
public class MovieCredit
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int MovieId { get; set; }
|
||||
|
||||
[DataMember(Name = "cast")]
|
||||
public IList<MovieCastMember> CastMembers { get; set; }
|
||||
|
||||
[DataMember(Name = "crew")]
|
||||
public IList<MovieCrewMember> CrewMembers { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Movie
|
||||
{
|
||||
[DataContract]
|
||||
public class MovieCrewMember
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int PersonId { get; set; }
|
||||
|
||||
[DataMember(Name = "credit_id")]
|
||||
public string CreditId { get; set; }
|
||||
|
||||
[DataMember(Name = "department")]
|
||||
public string Department { get; set; }
|
||||
|
||||
[DataMember(Name = "job")]
|
||||
public string Job { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DataMember(Name = "profile_path")]
|
||||
public string ProfilePath { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Movie
|
||||
{
|
||||
[DataContract]
|
||||
public class MovieVideo
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int MovieId { get; set; }
|
||||
|
||||
[DataMember(Name = "results")]
|
||||
public IList<MovieVideoItem> Videos { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.Movie
|
||||
{
|
||||
[DataContract]
|
||||
public class MovieVideoItem
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public string MovieVideoItemId { get; set; }
|
||||
|
||||
[DataMember(Name = "key")]
|
||||
public string Key { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DataMember(Name = "site")]
|
||||
public string Site { get; set; }
|
||||
|
||||
[DataMember(Name = "size")]
|
||||
public int Size { get; set; }
|
||||
|
||||
[DataMember(Name = "type")]
|
||||
public string Type { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
namespace Movies.Web.Models.People
|
||||
{
|
||||
public enum Gender
|
||||
{
|
||||
Unknown = 0,
|
||||
Female = 1,
|
||||
Male = 2
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.People
|
||||
{
|
||||
[DataContract]
|
||||
public class Person
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DataMember(Name = "also_known_as")]
|
||||
public IReadOnlyList<string> AlsoKnownAs { get; set; }
|
||||
|
||||
[DataMember(Name = "adult")]
|
||||
public bool IsAdultFilmStar { get; set; }
|
||||
|
||||
[DataMember(Name = "biography")]
|
||||
public string Biography { get; set; }
|
||||
|
||||
[DataMember(Name = "birthday")]
|
||||
public DateTime Birthday { get; set; }
|
||||
|
||||
[DataMember(Name = "deathday")]
|
||||
public DateTime? Deathday { get; set; }
|
||||
|
||||
[DataMember(Name = "gender")]
|
||||
public Gender Gender { get; set; }
|
||||
|
||||
[DataMember(Name = "homepage")]
|
||||
public string Homepage { get; set; }
|
||||
|
||||
[DataMember(Name = "imdb_id")]
|
||||
public string ImdbId { get; set; }
|
||||
|
||||
[DataMember(Name = "place_of_birth")]
|
||||
public string PlaceOfBirth { get; set; }
|
||||
|
||||
[DataMember(Name = "popularity")]
|
||||
public double Popularity { get; set; }
|
||||
|
||||
[DataMember(Name = "profile_path")]
|
||||
public string ProfilePath { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.People
|
||||
{
|
||||
[DataContract]
|
||||
public class PersonImage
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "profiles")]
|
||||
public List<Profile> profiles { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.People
|
||||
{
|
||||
[DataContract]
|
||||
public class Profile
|
||||
{
|
||||
[DataMember(Name = "width")]
|
||||
public int Width { get; set; }
|
||||
|
||||
[DataMember(Name = "height")]
|
||||
public int Height { get; set; }
|
||||
|
||||
[DataMember(Name = "vote_count")]
|
||||
public int VoteCount { get; set; }
|
||||
|
||||
[DataMember(Name = "vote_average")]
|
||||
public double VoteAverage { get; set; }
|
||||
|
||||
[DataMember(Name = "file_path")]
|
||||
public string FilePath { get; set; }
|
||||
|
||||
[DataMember(Name = "aspect_ratio")]
|
||||
public double AspectRatio { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
using Movies.Web.Models.People;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Movies.Web.Models
|
||||
{
|
||||
public class ProfileParameter
|
||||
{
|
||||
public Profile Current { get; set; }
|
||||
|
||||
public List<Profile> Images { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models
|
||||
{
|
||||
[DataContract]
|
||||
public class SearchResponse<T>
|
||||
{
|
||||
[DataMember(Name = "results")]
|
||||
public IReadOnlyList<T> Results { get; private set; }
|
||||
|
||||
[DataMember(Name = "page")]
|
||||
public int PageNumber { get; private set; }
|
||||
|
||||
[DataMember(Name = "total_pages")]
|
||||
public int TotalPages { get; private set; }
|
||||
|
||||
[DataMember(Name = "total_results")]
|
||||
public int TotalResults { get; private set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.TVShow
|
||||
{
|
||||
[DataContract]
|
||||
public class Network
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.TVShow
|
||||
{
|
||||
[DataContract]
|
||||
public class Season
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "air_date")]
|
||||
public DateTime AirDate { get; set; }
|
||||
|
||||
[DataMember(Name = "episode_count")]
|
||||
public int EpisodeCount { get; set; }
|
||||
|
||||
[DataMember(Name = "poster_path")]
|
||||
public string PosterPath { get; set; }
|
||||
|
||||
[DataMember(Name = "season_number")]
|
||||
public int SeasonNumber { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.TVShow
|
||||
{
|
||||
[DataContract]
|
||||
public class TVShow
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "backdrop_path")]
|
||||
public string BackdropPath { get; set; }
|
||||
|
||||
[DataMember(Name = "created_by")]
|
||||
public IReadOnlyList<TVShowCreator> CreatedBy { get; set; }
|
||||
|
||||
[DataMember(Name = "episode_run_time")]
|
||||
public IReadOnlyList<int> EpisodeRunTime { get; set; }
|
||||
|
||||
[DataMember(Name = "first_air_date")]
|
||||
public DateTime FirstAirDate { get; set; }
|
||||
|
||||
[DataMember(Name = "genres")]
|
||||
public IReadOnlyList<Genre.Genre> Genres { get; set; }
|
||||
|
||||
[DataMember(Name = "homepage")]
|
||||
public string Homepage { get; set; }
|
||||
|
||||
[DataMember(Name = "in_production")]
|
||||
public bool InProduction { get; set; }
|
||||
|
||||
[DataMember(Name = "languages")]
|
||||
public IReadOnlyList<string> Languages { get; set; }
|
||||
|
||||
[DataMember(Name = "last_air_date")]
|
||||
public DateTime LastAirDate { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DataMember(Name = "networks")]
|
||||
public IReadOnlyList<Network> Networks { get; set; }
|
||||
|
||||
[DataMember(Name = "number_of_episodes")]
|
||||
public int NumberOfEpisodes { get; set; }
|
||||
|
||||
[DataMember(Name = "number_of_seasons")]
|
||||
public int NumberOfSeasons { get; set; }
|
||||
|
||||
[DataMember(Name = "origin_country")]
|
||||
public IReadOnlyList<string> OriginCountry { get; set; }
|
||||
|
||||
[DataMember(Name = "original_language")]
|
||||
public string OriginalLanguage { get; set; }
|
||||
|
||||
[DataMember(Name = "original_name")]
|
||||
public string OriginalName { get; set; }
|
||||
|
||||
[DataMember(Name = "overview")]
|
||||
public string Overview { get; set; }
|
||||
|
||||
[DataMember(Name = "popularity")]
|
||||
public double Popularity { get; set; }
|
||||
|
||||
[DataMember(Name = "poster_path")]
|
||||
public string PosterPath { get; set; }
|
||||
|
||||
[DataMember(Name = "seasons")]
|
||||
public IReadOnlyList<Season> Seasons { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Movies.Web.Models.TVShow
|
||||
{
|
||||
[DataContract]
|
||||
public class TVShowCreator
|
||||
{
|
||||
[DataMember(Name = "id")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DataMember(Name = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DataMember(Name = "profile_path")]
|
||||
public string ProfilePath { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="Images\movies-back.png" />
|
||||
<None Remove="Images\movies-cake.png" />
|
||||
<None Remove="Images\movies-circle.png" />
|
||||
<None Remove="Images\movies-discover.png" />
|
||||
<None Remove="Images\movies-favourites.png" />
|
||||
<None Remove="Images\movies-icon.png" />
|
||||
<None Remove="Images\movies-menu.png" />
|
||||
<None Remove="Images\movies-movie.png" />
|
||||
<None Remove="Images\movies-opacity.png" />
|
||||
<None Remove="Images\movies-play.png" />
|
||||
<None Remove="Images\movies-search.png" />
|
||||
<None Remove="Images\movies-settings.png" />
|
||||
<None Remove="Images\movies-shows.png" />
|
||||
<None Remove="Images\movies-upcoming.png" />
|
||||
<None Remove="Images\movies-web.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac" Version="4.8.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
|
||||
<PackageReference Include="Xamarin.Forms" Version="2.5.1.527436" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Images\movies-back.png" />
|
||||
<EmbeddedResource Include="Images\movies-cake.png" />
|
||||
<EmbeddedResource Include="Images\movies-circle.png" />
|
||||
<EmbeddedResource Include="Images\movies-discover.png" />
|
||||
<EmbeddedResource Include="Images\movies-favourites.png" />
|
||||
<EmbeddedResource Include="Images\movies-icon.png" />
|
||||
<EmbeddedResource Include="Images\movies-menu.png" />
|
||||
<EmbeddedResource Include="Images\movies-movie.png" />
|
||||
<EmbeddedResource Include="Images\movies-opacity.png" />
|
||||
<EmbeddedResource Include="Images\movies-play.png" />
|
||||
<EmbeddedResource Include="Images\movies-search.png" />
|
||||
<EmbeddedResource Include="Images\movies-settings.png" />
|
||||
<EmbeddedResource Include="Images\movies-shows.png" />
|
||||
<EmbeddedResource Include="Images\movies-upcoming.png" />
|
||||
<EmbeddedResource Include="Images\movies-web.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Ooui">
|
||||
<HintPath>..\Dependencies\Ooui.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Ooui.AspNetCore">
|
||||
<HintPath>..\Dependencies\Ooui.AspNetCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Ooui.Forms">
|
||||
<HintPath>..\Dependencies\Ooui.Forms.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Pages\DetailView.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Pages\HomeView.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Pages\Templates\CastingItemTemplate.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Pages\Templates\HomeMainItemTemplate.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Pages\Templates\MovieItemTemplate.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Pages\Templates\ShowItemTemplate.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,267 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Movies.Web.Pages.DetailView"
|
||||
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web"
|
||||
xmlns:controls="clr-namespace:Movies.Web.Controls;assembly=Movies.Web"
|
||||
xmlns:templates="clr-namespace:Movies.Web.Pages.Templates;assembly=Movies.Web">
|
||||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- COLORS -->
|
||||
<Color x:Key="WhiteColor">#FFFFFF</Color>
|
||||
<Color x:Key="BlackColor">#000000</Color>
|
||||
<Color x:Key="AccentColor">#F5C210</Color>
|
||||
<Color x:Key="BackgroundColor">#1E2634</Color>
|
||||
<Color x:Key="DarkBackgroundColor">#151C25</Color>
|
||||
<Color x:Key="TitleColor">#5D6576</Color>
|
||||
|
||||
<!-- CONVERTERS -->
|
||||
<converters:InverseBoolConverter x:Key="InverseBoolConverter" />
|
||||
<converters:MovieImageConverter x:Key="MovieImageConverter" />
|
||||
<converters:ReleaseDateConverter x:Key="ReleaseDateConverter" />
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="TitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource TitleColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="14" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="MovieTitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="20" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
<Setter Property="Margin"
|
||||
Value="12, 0" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ReleaseDateStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="VerticalOptions"
|
||||
Value="End" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
<Setter Property="Margin"
|
||||
Value="12, 0" />
|
||||
</Style>
|
||||
|
||||
<Color x:Key="VoteCountColor">#939CAE</Color>
|
||||
|
||||
<Style x:Key="VoteCountStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource VoteCountColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="10" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="VoteAverageStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="36" />
|
||||
<Setter Property="Margin"
|
||||
Value="12, 0, 24, 0" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="StorylineTitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource TitleColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="14" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
<Setter Property="Margin"
|
||||
Value="12, 0" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="StorylineStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="BackgroundColor"
|
||||
Value="{StaticResource DarkBackgroundColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="12" />
|
||||
<Setter Property="Margin"
|
||||
Value="12, 0" />
|
||||
<Setter Property="LineBreakMode"
|
||||
Value="WordWrap" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="PlayButtonStyle"
|
||||
TargetType="Button">
|
||||
<Setter Property="BackgroundColor"
|
||||
Value="{DynamicResource AccentColor}" />
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource BlackColor}" />
|
||||
<Setter Property="HorizontalOptions"
|
||||
Value="Start" />
|
||||
<Setter Property="WidthRequest"
|
||||
Value="200" />
|
||||
<Setter Property="Margin"
|
||||
Value="12" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="HomepageButtonStyle"
|
||||
TargetType="Button"
|
||||
BasedOn="{StaticResource PlayButtonStyle}">
|
||||
<Setter Property="BackgroundColor"
|
||||
Value="{StaticResource BlackColor}" />
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
<ContentPage.Content>
|
||||
<Grid BackgroundColor="{StaticResource BackgroundColor}">
|
||||
<ScrollView IsVisible="{Binding IsBusy, Converter={StaticResource InverseBoolConverter}}"
|
||||
BackgroundColor="{StaticResource DarkBackgroundColor}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="300" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<!-- MOVIE PICTURE -->
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Image Grid.Row="0"
|
||||
Grid.RowSpan="4"
|
||||
Source="{Binding Movie.BackdropPath, Converter={StaticResource MovieImageConverter}, ConverterParameter=Backdrop}"
|
||||
Aspect="AspectFill" />
|
||||
<Image Grid.Row="0"
|
||||
Grid.RowSpan="4"
|
||||
Aspect="AspectFill"
|
||||
Source="Images/movies-opacity.png">
|
||||
</Image>
|
||||
<Grid Grid.Row="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="150" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition Width="100" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<!-- YEAR -->
|
||||
<Label Grid.Column="0"
|
||||
Text="{Binding Movie.ReleaseDate, Converter={StaticResource ReleaseDateConverter}}"
|
||||
Style="{StaticResource ReleaseDateStyle}" />
|
||||
<!-- VOTES -->
|
||||
<Grid Grid.Column="2"
|
||||
VerticalOptions="End">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="12" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid Grid.Row="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Grid.Column="0"
|
||||
Text="{Binding Movie.VoteCount}"
|
||||
Style="{StaticResource VoteCountStyle}" />
|
||||
<Label Grid.Column="1"
|
||||
Text="VOTES"
|
||||
Style="{StaticResource VoteCountStyle}" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
<!-- VOTE AVERAGE -->
|
||||
<Label Grid.Column="3"
|
||||
Text="{Binding Movie.VoteAverage}"
|
||||
Style="{StaticResource VoteAverageStyle}" />
|
||||
</Grid>
|
||||
<Grid Grid.Row="2">
|
||||
<Label Text="{Binding Movie.Title}"
|
||||
Style="{StaticResource MovieTitleStyle}" />
|
||||
</Grid>
|
||||
<Grid Grid.Row="3">
|
||||
</Grid>
|
||||
</Grid>
|
||||
<!-- MOVIE STORYLINE -->
|
||||
<Grid Grid.Row="1">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="STORYLINE"
|
||||
Style="{StaticResource StorylineTitleStyle}" />
|
||||
<Label Grid.Row="1"
|
||||
Text="{Binding Movie.Overview}"
|
||||
Style="{StaticResource StorylineStyle}" />
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Button Grid.Column="0"
|
||||
Style="{StaticResource PlayButtonStyle}"
|
||||
Text="PLAY TRAILER"
|
||||
Image="Images/movies-web.png"
|
||||
WidthRequest="200"
|
||||
Command="{Binding PlayCommand}">
|
||||
</Button>
|
||||
<Button Grid.Column="1"
|
||||
Style="{StaticResource HomepageButtonStyle}"
|
||||
Text="HOMEPAGE"
|
||||
Image="Images/movies-web.png"
|
||||
WidthRequest="200">
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<!-- ACTORS -->
|
||||
<Grid Grid.Row="2"
|
||||
BackgroundColor="{StaticResource DarkBackgroundColor}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="ACTORS"
|
||||
Style="{StaticResource StorylineTitleStyle}" />
|
||||
<controls:HorizontalList Grid.Row="1"
|
||||
ListOrientation="Horizontal"
|
||||
BackgroundColor="{StaticResource DarkBackgroundColor}"
|
||||
ItemsSource="{Binding Casting}"
|
||||
VerticalOptions="Start"
|
||||
HeightRequest="220"
|
||||
Margin="12, 0, 12, 24">
|
||||
<controls:HorizontalList.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<templates:CastingItemTemplate />
|
||||
</DataTemplate>
|
||||
</controls:HorizontalList.ItemTemplate>
|
||||
</controls:HorizontalList>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ScrollView>
|
||||
<ActivityIndicator IsVisible="{Binding IsBusy}"
|
||||
IsRunning="{Binding IsBusy}"
|
||||
Color="{StaticResource AccentColor}"
|
||||
BackgroundColor="{StaticResource BackgroundColor}"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center" />
|
||||
</Grid>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
|
@ -0,0 +1,14 @@
|
|||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Movies.Web.Pages
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class DetailView : ContentPage
|
||||
{
|
||||
public DetailView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Movies.Web.Pages.HomeView"
|
||||
xmlns:controls="clr-namespace:Movies.Web.Controls;assembly=Movies.Web"
|
||||
xmlns:templates="clr-namespace:Movies.Web.Pages.Templates;assembly=Movies.Web">
|
||||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- GENERAL COLORS -->
|
||||
<Color x:Key="WhiteColor">#FFFFFF</Color>
|
||||
<Color x:Key="BlackColor">#000000</Color>
|
||||
|
||||
<!-- THEME COLORS -->
|
||||
<Color x:Key="AccentColor">#F5C210</Color>
|
||||
<Color x:Key="BackgroundColor">#1E2634</Color>
|
||||
<Color x:Key="TitleColor">#5D6576</Color>
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="TitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource TitleColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="14" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
<ContentPage.Content>
|
||||
<Grid>
|
||||
<ScrollView BackgroundColor="{StaticResource BackgroundColor}">
|
||||
<Grid RowSpacing="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="300" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<!-- HIGHLIGHT -->
|
||||
<templates:HomeMainItemTemplate Grid.Row="0" />
|
||||
<StackLayout Grid.Row="1">
|
||||
<!-- TOP MOVIES -->
|
||||
<Grid Margin="12">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="36" />
|
||||
<RowDefinition Height="300" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="TOP MOVIES"
|
||||
Style="{StaticResource TitleStyle}" />
|
||||
<controls:HorizontalList Grid.Row="1"
|
||||
ListOrientation="Horizontal"
|
||||
BackgroundColor="{StaticResource BackgroundColor}"
|
||||
ItemsSource="{Binding TopRatedMovies}"
|
||||
SelectedCommand="{Binding MovieDetailCommand}">
|
||||
<controls:HorizontalList.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<templates:MovieItemTemplate />
|
||||
</DataTemplate>
|
||||
</controls:HorizontalList.ItemTemplate>
|
||||
</controls:HorizontalList>
|
||||
</Grid>
|
||||
<!-- POPULAR MOVIES -->
|
||||
<Grid Margin="12">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="36" />
|
||||
<RowDefinition Height="300" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="POPULAR MOVIES"
|
||||
Style="{StaticResource TitleStyle}" />
|
||||
<controls:HorizontalList Grid.Row="1"
|
||||
ListOrientation="Horizontal"
|
||||
BackgroundColor="{StaticResource BackgroundColor}"
|
||||
ItemsSource="{Binding PopularMovies}"
|
||||
SelectedCommand="{Binding MovieDetailCommand}">
|
||||
<controls:HorizontalList.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<templates:MovieItemTemplate />
|
||||
</DataTemplate>
|
||||
</controls:HorizontalList.ItemTemplate>
|
||||
</controls:HorizontalList>
|
||||
</Grid>
|
||||
<!-- TOP TVSHOWS -->
|
||||
<Grid Margin="12">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="36" />
|
||||
<RowDefinition Height="300" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="TOP TV SHOWS"
|
||||
Style="{StaticResource TitleStyle}" />
|
||||
<controls:HorizontalList Grid.Row="1"
|
||||
ListOrientation="Horizontal"
|
||||
BackgroundColor="{StaticResource BackgroundColor}"
|
||||
ItemsSource="{Binding TopRatedTvShows}">
|
||||
<controls:HorizontalList.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<templates:ShowItemTemplate />
|
||||
</DataTemplate>
|
||||
</controls:HorizontalList.ItemTemplate>
|
||||
</controls:HorizontalList>
|
||||
</Grid>
|
||||
<!-- POPULAR TVSHOWS -->
|
||||
<Grid Margin="12">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="36" />
|
||||
<RowDefinition Height="300" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="POPULAR TV SHOWS"
|
||||
Style="{StaticResource TitleStyle}" />
|
||||
<controls:HorizontalList Grid.Row="1"
|
||||
ListOrientation="Horizontal"
|
||||
BackgroundColor="{StaticResource BackgroundColor}"
|
||||
ItemsSource="{Binding PopularTvShows}">
|
||||
<controls:HorizontalList.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<templates:ShowItemTemplate />
|
||||
</DataTemplate>
|
||||
</controls:HorizontalList.ItemTemplate>
|
||||
</controls:HorizontalList>
|
||||
</Grid>
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
</ScrollView>
|
||||
<ActivityIndicator IsVisible="{Binding IsBusy}"
|
||||
IsRunning="{Binding IsBusy}"
|
||||
Color="{StaticResource AccentColor}"
|
||||
BackgroundColor="{StaticResource BackgroundColor}"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center" />
|
||||
</Grid>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
|
@ -0,0 +1,25 @@
|
|||
using Movies.Web.ViewModels;
|
||||
using Movies.Web.ViewModels.Base;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Movies.Web.Pages
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class HomeView : ContentPage
|
||||
{
|
||||
public HomeView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
ViewModelBase viewModel = Locator.Instance.Resolve<HomeViewModel>() as ViewModelBase;
|
||||
|
||||
BindingContext = viewModel;
|
||||
}
|
||||
|
||||
protected override async void OnAppearing()
|
||||
{
|
||||
await (BindingContext as ViewModelBase).InitializeAsync(null);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Movies.Web.Pages.Templates.CastingItemTemplate"
|
||||
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
|
||||
<ContentView.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- COLORS -->
|
||||
<Color x:Key="BackgroundColor">#1E2634</Color>
|
||||
|
||||
<!-- CONVERTERS -->
|
||||
<converters:MovieImageConverter x:Key="MovieImageConverter" />
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="CastingImageStyle"
|
||||
TargetType="Image">
|
||||
<Setter Property="Aspect"
|
||||
Value="AspectFit" />
|
||||
<Setter Property="HorizontalOptions"
|
||||
Value="Start" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="CastingNameStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="White" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
<Setter Property="VerticalOptions"
|
||||
Value="End" />
|
||||
<Setter Property="Margin"
|
||||
Value="6, 24" />
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentView.Resources>
|
||||
<ContentView.Content>
|
||||
<Grid BackgroundColor="{StaticResource BackgroundColor}"
|
||||
WidthRequest="175"
|
||||
MinimumHeightRequest="200"
|
||||
Margin="0, 0, 12, 0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Image Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Source="{Binding ProfilePath, Converter={StaticResource MovieImageConverter}}"
|
||||
Style="{StaticResource CastingImageStyle}">
|
||||
</Image>
|
||||
<Label Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Text="{Binding Name}"
|
||||
Style="{StaticResource CastingNameStyle}" />
|
||||
</Grid>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
|
@ -0,0 +1,14 @@
|
|||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Movies.Web.Pages.Templates
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class CastingItemTemplate : ContentView
|
||||
{
|
||||
public CastingItemTemplate ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Movies.Web.Pages.Templates.HomeMainItemTemplate"
|
||||
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
|
||||
<ContentView.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- COLORS -->
|
||||
<Color x:Key="WhiteColor">#FFFFFF</Color>
|
||||
<Color x:Key="BlackColor">#000000</Color>
|
||||
|
||||
<!-- CONVERTERS -->
|
||||
<converters:MovieImageConverter x:Key="MovieImageConverter" />
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="HighlightImageStyle"
|
||||
TargetType="Image">
|
||||
<Setter Property="Aspect"
|
||||
Value="AspectFill" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="HighlightGradientImageStyle"
|
||||
TargetType="Image">
|
||||
<Setter Property="VerticalOptions"
|
||||
Value="FillAndExpand" />
|
||||
<Setter Property="Aspect"
|
||||
Value="Fill" />
|
||||
<Setter Property="Opacity"
|
||||
Value=".75" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="HighlightTitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="20" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="HighlightDescriptionStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="FontSize"
|
||||
Value="14" />
|
||||
<Setter Property="VerticalOptions"
|
||||
Value="FillAndExpand" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="PlayButtonStyle"
|
||||
TargetType="Button">
|
||||
<Setter Property="BackgroundColor"
|
||||
Value="{DynamicResource AccentColor}" />
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentView.Resources>
|
||||
<ContentView.Content>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Image Grid.Row="0"
|
||||
Aspect="AspectFill"
|
||||
Source="{Binding Highlight.BackdropPath, Converter={StaticResource MovieImageConverter}, ConverterParameter=Backdrop}"
|
||||
Style="{StaticResource HighlightImageStyle}" />
|
||||
<Image Grid.Row="0"
|
||||
Source="Images/movies-opacity.png"
|
||||
Style="{StaticResource HighlightGradientImageStyle}">
|
||||
</Image>
|
||||
<Grid Grid.Row="0"
|
||||
RowSpacing="12"
|
||||
Margin="24"
|
||||
VerticalOptions="FillAndExpand">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="60" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="60*" />
|
||||
<ColumnDefinition Width="40*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
VerticalOptions="Start">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="60" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0"
|
||||
Text="{Binding Highlight.OriginalTitle}"
|
||||
Style="{StaticResource HighlightTitleStyle}" />
|
||||
</Grid>
|
||||
<Button Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
WidthRequest="200"
|
||||
VerticalOptions="End"
|
||||
HorizontalOptions="Start"
|
||||
Style="{StaticResource PlayButtonStyle}"
|
||||
Text="PLAY TRAILER"
|
||||
Image="Images/movies-play.png">
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
|
@ -0,0 +1,14 @@
|
|||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Movies.Web.Pages.Templates
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class HomeMainItemTemplate : ContentView
|
||||
{
|
||||
public HomeMainItemTemplate ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Movies.Web.Pages.Templates.MovieItemTemplate"
|
||||
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
|
||||
<ContentView.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- COLORS -->
|
||||
<Color x:Key="WhiteColor">#FFFFFF</Color>
|
||||
<Color x:Key="BackgroundColor">#1E2634</Color>
|
||||
|
||||
<!-- CONVERTERS -->
|
||||
<converters:MovieImageConverter x:Key="MovieImageConverter" />
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="MovieImageStyle"
|
||||
TargetType="Image">
|
||||
<Setter Property="Aspect"
|
||||
Value="AspectFit" />
|
||||
<Setter Property="HorizontalOptions"
|
||||
Value="Start" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="MovieTitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="LineBreakMode"
|
||||
Value="TailTruncation" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="MovieRatingStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="FontAttributes"
|
||||
Value="Bold" />
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentView.Resources>
|
||||
<ContentView.Content>
|
||||
<Grid BackgroundColor="{StaticResource BackgroundColor}"
|
||||
WidthRequest="200"
|
||||
Margin="0, 0, 12, 0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="12" />
|
||||
</Grid.RowDefinitions>
|
||||
<Image Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
WidthRequest="150"
|
||||
Source="{Binding PosterPath, Converter={StaticResource MovieImageConverter}}"
|
||||
Style="{StaticResource MovieImageStyle}">
|
||||
</Image>
|
||||
<Label Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
Text="{Binding OriginalTitle}"
|
||||
Style="{StaticResource MovieTitleStyle}" />
|
||||
<Grid Grid.Column="0"
|
||||
Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="24" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label Text="{Binding VoteAverage}"
|
||||
Style="{StaticResource MovieRatingStyle}" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
|
@ -0,0 +1,14 @@
|
|||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Movies.Web.Pages.Templates
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class MovieItemTemplate : ContentView
|
||||
{
|
||||
public MovieItemTemplate ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Movies.Web.Pages.Templates.ShowItemTemplate"
|
||||
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
|
||||
<ContentView.Resources>
|
||||
<ResourceDictionary>
|
||||
|
||||
<!-- COLORS -->
|
||||
<Color x:Key="WhiteColor">#FFFFFF</Color>
|
||||
<Color x:Key="BackgroundColor">#1E2634</Color>
|
||||
|
||||
<!-- CONVERTERS -->
|
||||
<converters:MovieImageConverter x:Key="MovieImageConverter" />
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="ShowImageStyle"
|
||||
TargetType="Image">
|
||||
<Setter Property="Aspect"
|
||||
Value="AspectFit" />
|
||||
<Setter Property="HorizontalOptions"
|
||||
Value="Start" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ShowTitleStyle"
|
||||
TargetType="Label">
|
||||
<Setter Property="TextColor"
|
||||
Value="{StaticResource WhiteColor}" />
|
||||
<Setter Property="LineBreakMode"
|
||||
Value="TailTruncation" />
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentView.Resources>
|
||||
<ContentView.Content>
|
||||
<Grid BackgroundColor="{StaticResource BackgroundColor}"
|
||||
WidthRequest="200"
|
||||
Margin="0, 0, 12, 0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="20" />
|
||||
<RowDefinition Height="12" />
|
||||
</Grid.RowDefinitions>
|
||||
<Image Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
WidthRequest="150"
|
||||
Source="{Binding PosterPath, Converter={StaticResource MovieImageConverter}}"
|
||||
Style="{StaticResource ShowImageStyle}">
|
||||
</Image>
|
||||
<Label Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
Text="{Binding Name}"
|
||||
Style="{StaticResource ShowTitleStyle}" />
|
||||
</Grid>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
|
@ -0,0 +1,14 @@
|
|||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Movies.Web.Pages.Templates
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class ShowItemTemplate : ContentView
|
||||
{
|
||||
public ShowItemTemplate ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
using Microsoft.AspNetCore;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
|
||||
namespace Movies.Web
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
BuildWebHost(args).Run();
|
||||
}
|
||||
|
||||
public static IWebHost BuildWebHost(string[] args) =>
|
||||
WebHost.CreateDefaultBuilder(args)
|
||||
.UseStartup<Startup>()
|
||||
.Build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:60838/",
|
||||
"sslPort": 0
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"Movies.Web": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"applicationUrl": "http://localhost:60839/"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
using Movies.Web.Models;
|
||||
using Movies.Web.Models.Movie;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.Movies
|
||||
{
|
||||
public interface IMoviesService
|
||||
{
|
||||
Task<Movie> FindByIdAsync(int movieId, string language = "en");
|
||||
|
||||
Task<Movie> GetLatestAsync(string language = "en");
|
||||
|
||||
Task<SearchResponse<Movie>> GetUpcomingAsync(int pageNumber = 1, string language = "en");
|
||||
|
||||
Task<SearchResponse<Movie>> GetTopRatedAsync(int pageNumber = 1, string language = "en");
|
||||
|
||||
Task<SearchResponse<Movie>> GetPopularAsync(int pageNumber = 1, string language = "en");
|
||||
|
||||
Task<MovieCredit> GetCreditsAsync(int movieId, string language = "en");
|
||||
|
||||
Task<MovieVideo> GetVideosAsync(int movieId, string language = "en");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
using Movies.Web.Models;
|
||||
using Movies.Web.Models.Movie;
|
||||
using Movies.Web.Services.Request;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.Movies
|
||||
{
|
||||
public class MoviesService : IMoviesService
|
||||
{
|
||||
private readonly IRequestService _requestProvider;
|
||||
|
||||
public MoviesService(IRequestService requestProvider)
|
||||
{
|
||||
_requestProvider = requestProvider;
|
||||
}
|
||||
|
||||
public async Task<Movie> FindByIdAsync(int movieId, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/{movieId}?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
Movie response = await _requestProvider.GetAsync<Movie>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<Movie> GetLatestAsync(string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/latest?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
Movie response = await _requestProvider.GetAsync<Movie>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<SearchResponse<Movie>> GetPopularAsync(int pageNumber = 1, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/popular?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
|
||||
|
||||
SearchResponse<Movie> response = await _requestProvider.GetAsync<SearchResponse<Movie>>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<SearchResponse<Movie>> GetTopRatedAsync(int pageNumber = 1, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/top_rated?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
|
||||
|
||||
SearchResponse<Movie> response = await _requestProvider.GetAsync<SearchResponse<Movie>>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<SearchResponse<Movie>> GetUpcomingAsync(int pageNumber = 1, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/upcoming?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
|
||||
|
||||
SearchResponse<Movie> response = await _requestProvider.GetAsync<SearchResponse<Movie>>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<MovieCredit> GetCreditsAsync(int movieId, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/{movieId}/credits?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
MovieCredit response = await _requestProvider.GetAsync<MovieCredit>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<MovieVideo> GetVideosAsync(int movieId, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}movie/{movieId}/videos?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
MovieVideo response = await _requestProvider.GetAsync<MovieVideo>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
using Movies.Web.ViewModels.Base;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.Navigation
|
||||
{
|
||||
public interface INavigationService
|
||||
{
|
||||
Task InitializeAsync();
|
||||
|
||||
Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase;
|
||||
|
||||
Task NavigateToAsync<TViewModel>(object parameter) where TViewModel : ViewModelBase;
|
||||
|
||||
Task NavigateToAsync(Type viewModelType);
|
||||
|
||||
Task NavigateToAsync(Type viewModelType, object parameter);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
using Movies.Web.Pages;
|
||||
using Movies.Web.ViewModels;
|
||||
using Movies.Web.ViewModels.Base;
|
||||
using Ooui;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.Services.Navigation
|
||||
{
|
||||
public class NavigationService : INavigationService
|
||||
{
|
||||
protected readonly Dictionary<Type, Type> _mappings;
|
||||
|
||||
protected Application CurrentApplication
|
||||
{
|
||||
get { return Application.Current; }
|
||||
}
|
||||
|
||||
public NavigationService()
|
||||
{
|
||||
_mappings = new Dictionary<Type, Type>();
|
||||
|
||||
CreatePageViewModelMappings();
|
||||
}
|
||||
|
||||
public Task InitializeAsync()
|
||||
{
|
||||
return NavigateToAsync<HomeViewModel>();
|
||||
}
|
||||
|
||||
public Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase
|
||||
{
|
||||
return InternalNavigateToAsync(typeof(TViewModel), null);
|
||||
}
|
||||
|
||||
public Task NavigateToAsync<TViewModel>(object parameter) where TViewModel : ViewModelBase
|
||||
{
|
||||
return InternalNavigateToAsync(typeof(TViewModel), parameter);
|
||||
}
|
||||
|
||||
public Task NavigateToAsync(Type viewModelType)
|
||||
{
|
||||
return InternalNavigateToAsync(viewModelType, null);
|
||||
}
|
||||
|
||||
public Task NavigateToAsync(Type viewModelType, object parameter)
|
||||
{
|
||||
return InternalNavigateToAsync(viewModelType, parameter);
|
||||
}
|
||||
|
||||
protected virtual async Task InternalNavigateToAsync(Type viewModelType, object parameter)
|
||||
{
|
||||
Page page = CreateAndBindPage(viewModelType, parameter);
|
||||
await CurrentApplication.MainPage.Navigation.PushAsync(page);
|
||||
await (page.BindingContext as ViewModelBase).InitializeAsync(parameter);
|
||||
}
|
||||
|
||||
protected Type GetPageTypeForViewModel(Type viewModelType)
|
||||
{
|
||||
if (!_mappings.ContainsKey(viewModelType))
|
||||
{
|
||||
throw new KeyNotFoundException($"No map for ${viewModelType} was found on navigation mappings");
|
||||
}
|
||||
|
||||
return _mappings[viewModelType];
|
||||
}
|
||||
|
||||
protected Page CreateAndBindPage(Type viewModelType, object parameter)
|
||||
{
|
||||
Type pageType = GetPageTypeForViewModel(viewModelType);
|
||||
|
||||
if (pageType == null)
|
||||
{
|
||||
throw new Exception($"Mapping type for {viewModelType} is not a page");
|
||||
}
|
||||
|
||||
Page page = Activator.CreateInstance(pageType) as Page;
|
||||
ViewModelBase viewModel = Locator.Instance.Resolve(viewModelType) as ViewModelBase;
|
||||
page.BindingContext = viewModel;
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
private void CreatePageViewModelMappings()
|
||||
{
|
||||
_mappings.Add(typeof(DetailViewModel), typeof(DetailView));
|
||||
_mappings.Add(typeof(HomeViewModel), typeof(HomeView));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
using Movies.Web.Models;
|
||||
using Movies.Web.Models.People;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.People
|
||||
{
|
||||
public interface IPeopleService
|
||||
{
|
||||
Task<Person> FindByIdAsync(int personId, string language = "en");
|
||||
|
||||
Task<SearchResponse<Person>> SearchByNameAsync(string query, int pageNumber = 1, string language = "en");
|
||||
|
||||
Task<PersonImage> GetImagesAsync(int personId, string language = "en");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
using System.Threading.Tasks;
|
||||
using Movies.Web.Models;
|
||||
using Movies.Web.Models.People;
|
||||
using Movies.Web.Services.Request;
|
||||
|
||||
namespace Movies.Web.Services.People
|
||||
{
|
||||
public class PeopleService : IPeopleService
|
||||
{
|
||||
private readonly IRequestService _requestProvider;
|
||||
|
||||
public PeopleService(IRequestService requestProvider)
|
||||
{
|
||||
_requestProvider = requestProvider;
|
||||
}
|
||||
|
||||
public async Task<Person> FindByIdAsync(int personId, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}person/{personId}?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
Person response = await _requestProvider.GetAsync<Person>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<SearchResponse<Person>> SearchByNameAsync(string query, int pageNumber = 1, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}search/person?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
|
||||
|
||||
SearchResponse<Person> response = await _requestProvider.GetAsync<SearchResponse<Person>>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<PersonImage> GetImagesAsync(int personId, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}person/{personId}/images?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
PersonImage response = await _requestProvider.GetAsync<PersonImage>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.Request
|
||||
{
|
||||
public interface IRequestService
|
||||
{
|
||||
Task<TResult> GetAsync<TResult>(string uri);
|
||||
|
||||
Task<TResult> PostAsync<TResult>(string uri, TResult data);
|
||||
|
||||
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data);
|
||||
|
||||
Task<TResult> PutAsync<TResult>(string uri, TResult data);
|
||||
|
||||
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.Request
|
||||
{
|
||||
public class RequestService : IRequestService
|
||||
{
|
||||
private readonly JsonSerializerSettings _serializerSettings;
|
||||
|
||||
public RequestService()
|
||||
{
|
||||
_serializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
ContractResolver = new CamelCasePropertyNamesContractResolver(),
|
||||
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
};
|
||||
|
||||
_serializerSettings.Converters.Add(new StringEnumConverter());
|
||||
}
|
||||
|
||||
public async Task<TResult> GetAsync<TResult>(string uri)
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
HttpResponseMessage response = await httpClient.GetAsync(uri);
|
||||
|
||||
await HandleResponse(response);
|
||||
|
||||
string serialized = await response.Content.ReadAsStringAsync();
|
||||
TResult result = await Task.Run(() => JsonConvert.DeserializeObject<TResult>(serialized, _serializerSettings));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public Task<TResult> PostAsync<TResult>(string uri, TResult data)
|
||||
{
|
||||
return PostAsync<TResult, TResult>(uri, data);
|
||||
}
|
||||
|
||||
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data)
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
|
||||
HttpResponseMessage response = await httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
|
||||
|
||||
await HandleResponse(response);
|
||||
|
||||
string responseData = await response.Content.ReadAsStringAsync();
|
||||
|
||||
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
|
||||
}
|
||||
|
||||
public Task<TResult> PutAsync<TResult>(string uri, TResult data)
|
||||
{
|
||||
return PutAsync<TResult, TResult>(uri, data);
|
||||
}
|
||||
|
||||
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data)
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
|
||||
HttpResponseMessage response = await httpClient.PutAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
|
||||
|
||||
await HandleResponse(response);
|
||||
|
||||
string responseData = await response.Content.ReadAsStringAsync();
|
||||
|
||||
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
|
||||
}
|
||||
|
||||
private HttpClient CreateHttpClient()
|
||||
{
|
||||
var httpClient = new HttpClient();
|
||||
|
||||
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
private async Task HandleResponse(HttpResponseMessage response)
|
||||
{
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
if (response.StatusCode == HttpStatusCode.Forbidden || response.StatusCode == HttpStatusCode.Unauthorized)
|
||||
{
|
||||
throw new Exception(content);
|
||||
}
|
||||
|
||||
throw new HttpRequestException(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using Movies.Web.Models;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Movies.Web.Services.TVShow
|
||||
{
|
||||
public interface ITVShowService
|
||||
{
|
||||
Task<Models.TVShow.TVShow> FindByIdAsync(int tvShowId, string language = "en");
|
||||
|
||||
Task<Models.TVShow.TVShow> GetLatestAsync(string language = "en");
|
||||
|
||||
Task<SearchResponse<Models.TVShow.TVShow>> GetTopRatedAsync(int pageNumber = 1, string language = "en");
|
||||
|
||||
Task<SearchResponse<Models.TVShow.TVShow>> GetPopularAsync(int pageNumber = 1, string language = "en");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
using System.Threading.Tasks;
|
||||
using Movies.Web.Models;
|
||||
using Movies.Web.Services.Request;
|
||||
|
||||
namespace Movies.Web.Services.TVShow
|
||||
{
|
||||
public class TVShowService : ITVShowService
|
||||
{
|
||||
private readonly IRequestService _requestProvider;
|
||||
|
||||
public TVShowService(IRequestService requestProvider)
|
||||
{
|
||||
_requestProvider = requestProvider;
|
||||
}
|
||||
|
||||
public async Task<Models.TVShow.TVShow> FindByIdAsync(int tvShowId, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}tv/{tvShowId}?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
Models.TVShow.TVShow response = await _requestProvider.GetAsync<Models.TVShow.TVShow>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<Models.TVShow.TVShow> GetLatestAsync(string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}tv/latest?api_key={AppSettings.ApiKey}&language={language}";
|
||||
|
||||
Models.TVShow.TVShow response = await _requestProvider.GetAsync<Models.TVShow.TVShow>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<SearchResponse<Models.TVShow.TVShow>> GetPopularAsync(int pageNumber = 1, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}tv/popular?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
|
||||
|
||||
SearchResponse<Models.TVShow.TVShow> response = await _requestProvider.GetAsync<SearchResponse<Models.TVShow.TVShow>>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<SearchResponse<Models.TVShow.TVShow>> GetTopRatedAsync(int pageNumber = 1, string language = "en")
|
||||
{
|
||||
string uri = $"{AppSettings.ApiUrl}tv/top_rated?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
|
||||
|
||||
SearchResponse<Models.TVShow.TVShow> response = await _requestProvider.GetAsync<SearchResponse<Models.TVShow.TVShow>>(uri);
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Movies.Web
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
public Startup(IConfiguration configuration)
|
||||
{
|
||||
Configuration = configuration;
|
||||
}
|
||||
|
||||
public IConfiguration Configuration { get; }
|
||||
|
||||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddMvc();
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||
{
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
app.UseBrowserLink();
|
||||
}
|
||||
else
|
||||
{
|
||||
app.UseExceptionHandler("/Home/Error");
|
||||
}
|
||||
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseOoui();
|
||||
|
||||
Xamarin.Forms.Forms.Init();
|
||||
|
||||
app.UseMvc(routes =>
|
||||
{
|
||||
routes.MapRoute(
|
||||
name: "default",
|
||||
template: "{controller=Home}/{action=Index}/{id?}");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
using System;
|
||||
using Movies.Web.Services.Movies;
|
||||
using Movies.Web.Services.People;
|
||||
using Movies.Web.Services.Request;
|
||||
using Movies.Web.Services.TVShow;
|
||||
using Autofac;
|
||||
using Movies.Web.Services.Navigation;
|
||||
|
||||
namespace Movies.Web.ViewModels.Base
|
||||
{
|
||||
public class Locator
|
||||
{
|
||||
private static IContainer _container;
|
||||
|
||||
private static readonly Locator _instance = new Locator();
|
||||
|
||||
public static Locator Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
protected Locator()
|
||||
{
|
||||
var builder = new ContainerBuilder();
|
||||
|
||||
builder.RegisterType<NavigationService>().As<INavigationService>().SingleInstance();
|
||||
builder.RegisterType<RequestService>().As<IRequestService>();
|
||||
builder.RegisterType<MoviesService>().As<IMoviesService>();
|
||||
builder.RegisterType<PeopleService>().As<IPeopleService>();
|
||||
builder.RegisterType<TVShowService>().As<ITVShowService>();
|
||||
|
||||
builder.RegisterType<DetailViewModel>();
|
||||
builder.RegisterType<HomeViewModel>();
|
||||
|
||||
if (_container != null)
|
||||
{
|
||||
_container.Dispose();
|
||||
}
|
||||
|
||||
_container = builder.Build();
|
||||
}
|
||||
|
||||
public T Resolve<T>()
|
||||
{
|
||||
return _container.Resolve<T>();
|
||||
}
|
||||
|
||||
public object Resolve(Type type)
|
||||
{
|
||||
return _container.Resolve(type);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.ViewModels.Base
|
||||
{
|
||||
public class ViewModelBase : BindableObject
|
||||
{
|
||||
private bool _isBusy;
|
||||
|
||||
public bool IsBusy
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isBusy;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_isBusy = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public virtual Task InitializeAsync(object navigationData)
|
||||
{
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
using Movies.Web.Models.Movie;
|
||||
using Movies.Web.Services.Movies;
|
||||
using Movies.Web.Services.Navigation;
|
||||
using Movies.Web.ViewModels.Base;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.ViewModels
|
||||
{
|
||||
public class DetailViewModel : ViewModelBase
|
||||
{
|
||||
private Movie _movie;
|
||||
private ObservableCollection<MovieCastMember> _casting;
|
||||
private string _video;
|
||||
|
||||
private INavigationService _navigationService;
|
||||
private IMoviesService _moviesService;
|
||||
|
||||
public DetailViewModel(
|
||||
INavigationService navigationService,
|
||||
IMoviesService moviesService)
|
||||
{
|
||||
_navigationService = navigationService;
|
||||
_moviesService = moviesService;
|
||||
}
|
||||
|
||||
public Movie Movie
|
||||
{
|
||||
get { return _movie; }
|
||||
set
|
||||
{
|
||||
_movie = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<MovieCastMember> Casting
|
||||
{
|
||||
get { return _casting; }
|
||||
set
|
||||
{
|
||||
_casting = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public string Video
|
||||
{
|
||||
get { return _video; }
|
||||
set
|
||||
{
|
||||
_video = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand PlayCommand => new Command(Play);
|
||||
|
||||
public override async Task InitializeAsync(object navigationData)
|
||||
{
|
||||
if (navigationData is Movie)
|
||||
{
|
||||
IsBusy = true;
|
||||
|
||||
var movie = (Movie)navigationData;
|
||||
|
||||
try
|
||||
{
|
||||
Movie = await _moviesService.FindByIdAsync(movie.Id);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Movie = movie;
|
||||
}
|
||||
|
||||
var credits = await _moviesService.GetCreditsAsync(movie.Id);
|
||||
Casting = new ObservableCollection<MovieCastMember>(credits.CastMembers.Take(10));
|
||||
var videos = await _moviesService.GetVideosAsync(movie.Id);
|
||||
|
||||
if (videos.Videos.Any())
|
||||
{
|
||||
var video = videos.Videos.First();
|
||||
Video = string.Format("{0}{1}", AppSettings.YouTubeUrl, video.Key);
|
||||
}
|
||||
|
||||
IsBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void Play()
|
||||
{
|
||||
if (string.IsNullOrEmpty(Video))
|
||||
return;
|
||||
|
||||
Device.OpenUri(new Uri(Video));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
using Movies.Web.Models.Movie;
|
||||
using Movies.Web.Models.TVShow;
|
||||
using Movies.Web.Services.Movies;
|
||||
using Movies.Web.Services.Navigation;
|
||||
using Movies.Web.Services.TVShow;
|
||||
using Movies.Web.ViewModels.Base;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Movies.Web.ViewModels
|
||||
{
|
||||
class HomeViewModel : ViewModelBase
|
||||
{
|
||||
private Movie _highlight;
|
||||
private ObservableCollection<Movie> _topRatedMovies;
|
||||
private ObservableCollection<Movie> _popularMovies;
|
||||
private ObservableCollection<TVShow> _topRatedTvShows;
|
||||
private ObservableCollection<TVShow> _popularTvShows;
|
||||
|
||||
private IMoviesService _moviesService;
|
||||
private ITVShowService _tvShowService;
|
||||
private INavigationService _navigationService;
|
||||
|
||||
public HomeViewModel(
|
||||
IMoviesService moviesService,
|
||||
ITVShowService tvShowService,
|
||||
INavigationService navigationService)
|
||||
{
|
||||
_moviesService = moviesService;
|
||||
_tvShowService = tvShowService;
|
||||
_navigationService = navigationService;
|
||||
|
||||
TopRatedMovies = new ObservableCollection<Movie>();
|
||||
}
|
||||
|
||||
public Movie Highlight
|
||||
{
|
||||
get { return _highlight; }
|
||||
set
|
||||
{
|
||||
_highlight = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<Movie> TopRatedMovies
|
||||
{
|
||||
get { return _topRatedMovies; }
|
||||
set
|
||||
{
|
||||
_topRatedMovies = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<Movie> PopularMovies
|
||||
{
|
||||
get { return _popularMovies; }
|
||||
set
|
||||
{
|
||||
_popularMovies = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<TVShow> TopRatedTvShows
|
||||
{
|
||||
get { return _topRatedTvShows; }
|
||||
set
|
||||
{
|
||||
_topRatedTvShows = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<TVShow> PopularTvShows
|
||||
{
|
||||
get { return _popularTvShows; }
|
||||
set
|
||||
{
|
||||
_popularTvShows = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand MovieDetailCommand => new Command<Movie>(MovieDetailAsync);
|
||||
|
||||
public override async Task InitializeAsync(object navigationData)
|
||||
{
|
||||
IsBusy = true;
|
||||
|
||||
await LoadTopRatedMoviesAync();
|
||||
await LoadPopularMoviesAync();
|
||||
await LoadTopRatedTvShowsAync();
|
||||
await LoadPopularTvShowsAync();
|
||||
|
||||
IsBusy = false;
|
||||
}
|
||||
|
||||
private async Task LoadTopRatedMoviesAync()
|
||||
{
|
||||
var result = await _moviesService.GetTopRatedAsync();
|
||||
|
||||
TopRatedMovies = new ObservableCollection<Movie>(result.Results.Take(10));
|
||||
}
|
||||
|
||||
private async Task LoadPopularMoviesAync()
|
||||
{
|
||||
var result = await _moviesService.GetPopularAsync();
|
||||
|
||||
PopularMovies = new ObservableCollection<Movie>(result.Results.Take(10));
|
||||
Highlight = result.Results.First();
|
||||
}
|
||||
|
||||
private async Task LoadTopRatedTvShowsAync()
|
||||
{
|
||||
var result = await _tvShowService.GetTopRatedAsync();
|
||||
|
||||
TopRatedTvShows = new ObservableCollection<TVShow>(result.Results.Take(10));
|
||||
}
|
||||
|
||||
private async Task LoadPopularTvShowsAync()
|
||||
{
|
||||
var result = await _tvShowService.GetPopularAsync();
|
||||
|
||||
PopularTvShows = new ObservableCollection<TVShow>(result.Results.Take(10));
|
||||
}
|
||||
|
||||
private async void MovieDetailAsync(object obj)
|
||||
{
|
||||
if (obj is Movie movie)
|
||||
{
|
||||
await _navigationService.NavigateToAsync<DetailViewModel>(movie);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
@{
|
||||
ViewData["Title"] = "About";
|
||||
}
|
||||
<h2>@ViewData["Title"]</h2>
|
||||
<h3>@ViewData["Message"]</h3>
|
||||
|
||||
<p>Use this area to provide additional information.</p>
|
|
@ -0,0 +1,17 @@
|
|||
@{
|
||||
ViewData["Title"] = "Contact";
|
||||
}
|
||||
<h2>@ViewData["Title"]</h2>
|
||||
<h3>@ViewData["Message"]</h3>
|
||||
|
||||
<address>
|
||||
One Microsoft Way<br />
|
||||
Redmond, WA 98052-6399<br />
|
||||
<abbr title="Phone">P:</abbr>
|
||||
425.555.0100
|
||||
</address>
|
||||
|
||||
<address>
|
||||
<strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br />
|
||||
<strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
|
||||
</address>
|
|
@ -0,0 +1,106 @@
|
|||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
}
|
||||
|
||||
<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="6000">
|
||||
<ol class="carousel-indicators">
|
||||
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
|
||||
<li data-target="#myCarousel" data-slide-to="1"></li>
|
||||
<li data-target="#myCarousel" data-slide-to="2"></li>
|
||||
<li data-target="#myCarousel" data-slide-to="3"></li>
|
||||
</ol>
|
||||
<div class="carousel-inner" role="listbox">
|
||||
<div class="item active">
|
||||
<img src="~/images/banner1.svg" alt="ASP.NET" class="img-responsive" />
|
||||
<div class="carousel-caption" role="option">
|
||||
<p>
|
||||
Learn how to build ASP.NET apps that can run anywhere.
|
||||
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525028&clcid=0x409">
|
||||
Learn More
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="~/images/banner2.svg" alt="Visual Studio" class="img-responsive" />
|
||||
<div class="carousel-caption" role="option">
|
||||
<p>
|
||||
There are powerful new features in Visual Studio for building modern web apps.
|
||||
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525030&clcid=0x409">
|
||||
Learn More
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="~/images/banner3.svg" alt="Package Management" class="img-responsive" />
|
||||
<div class="carousel-caption" role="option">
|
||||
<p>
|
||||
Bring in libraries from NuGet and npm, and automate tasks using Grunt or Gulp.
|
||||
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525029&clcid=0x409">
|
||||
Learn More
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="~/images/banner4.svg" alt="Microsoft Azure" class="img-responsive" />
|
||||
<div class="carousel-caption" role="option">
|
||||
<p>
|
||||
Learn how Microsoft's Azure cloud platform allows you to build, deploy, and scale web apps.
|
||||
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525027&clcid=0x409">
|
||||
Learn More
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
|
||||
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
|
||||
<span class="sr-only">Previous</span>
|
||||
</a>
|
||||
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
|
||||
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
|
||||
<span class="sr-only">Next</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<h2>Application uses</h2>
|
||||
<ul>
|
||||
<li>Sample pages using ASP.NET Core MVC</li>
|
||||
<li>Theming using <a href="https://go.microsoft.com/fwlink/?LinkID=398939">Bootstrap</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<h2>How to</h2>
|
||||
<ul>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=398600">Add a Controller and View</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699315">Manage User Secrets using Secret Manager.</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699316">Use logging to log a message.</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699317">Add packages using NuGet.</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699319">Target development, staging or production environment.</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<h2>Overview</h2>
|
||||
<ul>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=518008">Conceptual overview of what is ASP.NET Core</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699320">Fundamentals of ASP.NET Core such as Startup and middleware.</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=398602">Working with Data</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkId=398603">Security</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699321">Client side development</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699322">Develop on different platforms</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699323">Read more on the documentation site</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<h2>Run & Deploy</h2>
|
||||
<ul>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=517851">Run your app</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=517853">Run tools such as EF migrations and more</a></li>
|
||||
<li><a href="https://go.microsoft.com/fwlink/?LinkID=398609">Publish to Microsoft Azure Web Apps</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,22 @@
|
|||
@model ErrorViewModel
|
||||
@{
|
||||
ViewData["Title"] = "Error";
|
||||
}
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (Model.ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
|
||||
</p>
|
|
@ -0,0 +1,71 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>@ViewData["Title"] - Movies.Web</title>
|
||||
|
||||
<environment include="Development">
|
||||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
|
||||
<link rel="stylesheet" href="~/css/site.css" />
|
||||
</environment>
|
||||
<environment exclude="Development">
|
||||
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
|
||||
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
|
||||
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
|
||||
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
|
||||
</environment>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Movies.Web</a>
|
||||
</div>
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container body-content">
|
||||
@RenderBody()
|
||||
<hr />
|
||||
<footer>
|
||||
<p>© 2018 - Movies.Web</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<environment include="Development">
|
||||
<script src="~/lib/jquery/dist/jquery.js"></script>
|
||||
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
|
||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||
</environment>
|
||||
<environment exclude="Development">
|
||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
|
||||
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
|
||||
asp-fallback-test="window.jQuery"
|
||||
crossorigin="anonymous"
|
||||
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
|
||||
</script>
|
||||
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
|
||||
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
|
||||
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
|
||||
crossorigin="anonymous"
|
||||
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
|
||||
</script>
|
||||
<script src="~/js/site.min.js" asp-append-version="true"></script>
|
||||
</environment>
|
||||
|
||||
@RenderSection("Scripts", required: false)
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,18 @@
|
|||
<environment include="Development">
|
||||
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
|
||||
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
|
||||
</environment>
|
||||
<environment exclude="Development">
|
||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"
|
||||
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
|
||||
asp-fallback-test="window.jQuery && window.jQuery.validator"
|
||||
crossorigin="anonymous"
|
||||
integrity="sha384-Fnqn3nxp3506LP/7Y3j/25BlWeA3PXTyT1l78LjECcPaKCV12TsZP7yyMxOe/G/k">
|
||||
</script>
|
||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"
|
||||
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
|
||||
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
|
||||
crossorigin="anonymous"
|
||||
integrity="sha384-JrXK+k53HACyavUKOsL+NkmSesD2P+73eDMrbTtTk0h4RmOF8hF8apPlkp26JlyH">
|
||||
</script>
|
||||
</environment>
|
|
@ -0,0 +1,3 @@
|
|||
@using Movies.Web
|
||||
@using Movies.Web.Models
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
|
@ -0,0 +1,3 @@
|
|||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"Logging": {
|
||||
"IncludeScopes": false,
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"System": "Information",
|
||||
"Microsoft": "Information"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"Logging": {
|
||||
"IncludeScopes": false,
|
||||
"LogLevel": {
|
||||
"Default": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
// Configure bundling and minification for the project.
|
||||
// More info at https://go.microsoft.com/fwlink/?LinkId=808241
|
||||
[
|
||||
{
|
||||
"outputFileName": "wwwroot/css/site.min.css",
|
||||
// An array of relative input file paths. Globbing patterns supported
|
||||
"inputFiles": [
|
||||
"wwwroot/css/site.css"
|
||||
]
|
||||
},
|
||||
{
|
||||
"outputFileName": "wwwroot/js/site.min.js",
|
||||
"inputFiles": [
|
||||
"wwwroot/js/site.js"
|
||||
],
|
||||
// Optionally specify minification options
|
||||
"minify": {
|
||||
"enabled": true,
|
||||
"renameLocals": true
|
||||
},
|
||||
// Optionally generate .map file
|
||||
"sourceMap": false
|
||||
}
|
||||
]
|
|
@ -0,0 +1,35 @@
|
|||
body {
|
||||
padding-top: 50px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
/* Wrapping element */
|
||||
/* Set some basic padding to keep content from hitting the edges */
|
||||
.body-content {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/* Carousel */
|
||||
.carousel-caption p {
|
||||
font-size: 20px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* Make .svg files in the carousel display properly in older browsers */
|
||||
.carousel-inner .item img[src$=".svg"] {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* QR code generator */
|
||||
#qrCode {
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
/* Hide/rearrange for smaller screens */
|
||||
@media screen and (max-width: 767px) {
|
||||
/* Hide captions */
|
||||
.carousel-caption {
|
||||
display: none;
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}}
|
После Ширина: | Высота: | Размер: 31 KiB |
После Ширина: | Высота: | Размер: 9.5 KiB |
После Ширина: | Высота: | Размер: 8.2 KiB |
После Ширина: | Высота: | Размер: 11 KiB |
После Ширина: | Высота: | Размер: 12 KiB |
|
@ -0,0 +1 @@
|
|||
// Write your JavaScript code.
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"name": "bootstrap",
|
||||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
||||
"keywords": [
|
||||
"css",
|
||||
"js",
|
||||
"less",
|
||||
"mobile-first",
|
||||
"responsive",
|
||||
"front-end",
|
||||
"framework",
|
||||
"web"
|
||||
],
|
||||
"homepage": "http://getbootstrap.com",
|
||||
"license": "MIT",
|
||||
"moduleType": "globals",
|
||||
"main": [
|
||||
"less/bootstrap.less",
|
||||
"dist/js/bootstrap.js"
|
||||
],
|
||||
"ignore": [
|
||||
"/.*",
|
||||
"_config.yml",
|
||||
"CNAME",
|
||||
"composer.json",
|
||||
"CONTRIBUTING.md",
|
||||
"docs",
|
||||
"js/tests",
|
||||
"test-infra"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": "1.9.1 - 3"
|
||||
},
|
||||
"version": "3.3.7",
|
||||
"_release": "3.3.7",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v3.3.7",
|
||||
"commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
|
||||
},
|
||||
"_source": "https://github.com/twbs/bootstrap.git",
|
||||
"_target": "v3.3.7",
|
||||
"_originalSource": "bootstrap",
|
||||
"_direct": true
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011-2016 Twitter, Inc.
|
||||
|
||||
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:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|