Merge pull request #217 from NativeScript/feature/telerik-next-development

Feature/telerik next development
This commit is contained in:
Alexander Vakrilov
2015-03-24 11:53:03 +02:00
11 changed files with 725 additions and 466 deletions

View File

@@ -77,6 +77,8 @@
</TypeScriptCompile>
<TypeScriptCompile Include="apps\TelerikNEXT\app-view-model.ts" />
<TypeScriptCompile Include="apps\TelerikNEXT\app.ts" />
<TypeScriptCompile Include="apps\TelerikNEXT\everlive-upload.ts" />
<TypeScriptCompile Include="apps\TelerikNEXT\session-page.ts" />
<TypeScriptCompile Include="apps\TelerikNEXT\main-page.ts" />
<TypeScriptCompile Include="apps\template-blank\app.ts" />
<TypeScriptCompile Include="apps\template-blank\main-page.ts">
@@ -541,6 +543,8 @@
<SubType>Designer</SubType>
</Content>
<Content Include="apps\gallery-app\layouts\dock-layout.xml" />
<Content Include="apps\TelerikNEXT\lib\everlive.js" />
<Content Include="apps\TelerikNEXT\session-page.xml" />
<Content Include="apps\template-master-detail\details-view.xml" />
<Content Include="apps\template-master-detail\main-page.minWH600.xml" />
<Content Include="apps\TelerikNEXT\images\background.jpg" />
@@ -664,7 +668,7 @@
</TypeScriptCompile>
<Content Include="apps\TelerikNEXT\images\addfav.png" />
<Content Include="apps\TelerikNEXT\images\fav.png" />
<Content Include="apps\TelerikNEXT\main-page.css" />
<Content Include="apps\TelerikNEXT\app.css" />
<Content Include="apps\TelerikNEXT\main-page.xml" />
<Content Include="apps\template-blank\package.json" />
<TypeScriptCompile Include="apps\tests\camera-tests.ts" />
@@ -1508,7 +1512,7 @@
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
<UserProperties ui_2scroll-view_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2editable-text-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2absolute-layout-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2gallery-app_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2content-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2web-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2linear-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2absolute-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2dock-layout_2package_1json__JSONSchema="" ui_2layouts_2grid-layout_2package_1json__JSONSchema="" ui_2layouts_2wrap-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" />
<UserProperties ui_2layouts_2wrap-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2grid-layout_2package_1json__JSONSchema="" ui_2layouts_2dock-layout_2package_1json__JSONSchema="" ui_2layouts_2absolute-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2linear-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2web-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2content-view_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2gallery-app_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2absolute-layout-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2editable-text-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2scroll-view_2package_1json__JSONSchema="http://json.schemastore.org/package" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -1,14 +1,103 @@
import observable = require("data/observable");
import dialogs = require("ui/dialogs");
import localSettings = require("local-settings");
import button = require("ui/button");
var everlive = require("./lib/everlive");
interface ConferenceDay {
date: Date;
title: string;
}
interface Speaker {
//Id: string;
name: string;
title: string;
company: string;
picture: string;
}
interface Session {
Id: string;
title: string;
start: Date;
end: Date;
room: string;
speakers: Array<Speaker>;
}
var conferenceDays: Array<ConferenceDay> = [
{ title: "WORKSHOPS", date: new Date(2015, 5, 3) },
{ title: "CONFERENCE DAY 1", date: new Date(2015, 5, 4) },
{ title: "CONFERENCE DAY 2", date: new Date(2015, 5, 5) }
];
var sessions: Array<SessionModel> = new Array<SessionModel>();
var FAVOURITES = "FAVOURITES";
var favourites: Array<string>;
try {
favourites = <Array<string>>JSON.parse(localSettings.getString(FAVOURITES, "[]"));
}
catch (error) {
console.log("Error while retrieveing favourites: " + error);
favourites = new Array<string>();
updateFavourites()
}
function addToFavourites(session: SessionModel) {
if (favourites.indexOf(session.Id) < 0) {
favourites.push(session.Id);
updateFavourites();
}
}
function removeFromFavourites(session: SessionModel) {
var index = favourites.indexOf(session.Id);
if (index >= 0) {
favourites.splice(index, 1);
updateFavourites();
}
}
function updateFavourites() {
var newValue = JSON.stringify(favourites);
localSettings.setString(FAVOURITES, newValue);
}
var el = new everlive("mzacGkKPFlZUfbMq");
var expandExp = {
"speakers": true
};
el.data('NextSessions').expand(expandExp).get().then(
function (data) {
//console.log("Sessions are[" + data.result[1].Data + "]")
var sessionsFromEvelive: Array<Session> = <Array<Session>> data.result;
for (var i = 0; i < sessionsFromEvelive.length; i++) {
var newSession = new SessionModel(sessionsFromEvelive[i]);
if (favourites.indexOf(newSession.Id) >= 0) {
newSession.favorite = true;
}
sessions.push(newSession);
}
appModel.onDataLoaded();
}, function (error) {
dialogs.alert("Could not load sessions. Error: " + error);
}
);
export class AppViewModel extends observable.Observable {
public selectedViewIndex: number;
private _selectedIndex;
constructor() {
super();
this.selectedIndex = 0;
this.selectedViewIndex = 1;
this.set("isLoading", true);
}
private _sessions: Array<SessionModel>;
@@ -16,8 +105,8 @@ export class AppViewModel extends observable.Observable {
return this._sessions;
}
get speakers(): Array<Speakers> {
return speakers;
get favorites(): Array<SessionModel> {
return this.sessions.filter(i=> { return i.favorite });
}
private _search = "";
@@ -33,7 +122,6 @@ export class AppViewModel extends observable.Observable {
}
}
private _selectedIndex;
get selectedIndex(): number {
return this._selectedIndex;
}
@@ -42,6 +130,8 @@ export class AppViewModel extends observable.Observable {
this._selectedIndex = value;
this.notify({ object: this, eventName: observable.knownEvents.propertyChange, propertyName: "selectedIndex", value: value });
this.set("dayHeader", conferenceDays[value].title);
if (this.search !== "") {
this.search = "";
} else {
@@ -52,7 +142,7 @@ export class AppViewModel extends observable.Observable {
private filter() {
this._sessions = sessions.filter(s=> {
return s.start.getDay() === dates[this.selectedIndex].getDay()
return s.start.getDate() === conferenceDays[this.selectedIndex].date.getDate()
&& s.title.toLocaleLowerCase().indexOf(this.search.toLocaleLowerCase()) >= 0;
});
@@ -63,6 +153,11 @@ export class AppViewModel extends observable.Observable {
this.notify({ object: this, eventName: observable.knownEvents.propertyChange, propertyName: "sessions", value: this._sessions });
}
public onDataLoaded() {
this.set("isLoading", false);
this.filter();
}
public selectView(args: observable.EventData) {
var btn = <button.Button>args.object;
@@ -80,24 +175,33 @@ export class AppViewModel extends observable.Observable {
}
}
export var appModel = new AppViewModel();
export class SessionModel extends observable.Observable implements Session {
constructor(source?: Session) {
super();
if (source) {
this._id = source.Id;
this._title = source.title;
this._room = source.room;
this._start = source.start;
this._end = source.end;
this._speakers = source.speakers;
}
}
private _id: string;
private _speakers: Array<Speaker>;
private _title: string;
private _start: Date;
private _end: Date;
private _room: string;
private _favorite: boolean;
get Id(): string {
return this._id;
}
get title(): string {
return this._title;
}
@@ -114,12 +218,18 @@ export class SessionModel extends observable.Observable implements Session {
return this._end;
}
get speakers(): Array<Speaker> {
return this._speakers;
}
get range(): string {
var startMinutes = this.start.getMinutes() + "";
var endMinutes = this.end.getMinutes() + "";
var startAM = this.start.getHours() < 12 ? "am" : "pm";
var endAM = this.end.getHours() < 12 ? "am" : "pm";
return this.start.getHours() + ':' + (startMinutes.length === 1 ? '0' + startMinutes : startMinutes) +
' - ' + this.end.getHours() + ':' + (endMinutes.length === 1 ? '0' + endMinutes : endMinutes);
return this.start.getHours() + ':' + (startMinutes.length === 1 ? '0' + startMinutes : startMinutes) + startAM +
' - ' + this.end.getHours() + ':' + (endMinutes.length === 1 ? '0' + endMinutes : endMinutes) + endAM;
}
get canBeFavorited(): boolean {
@@ -135,414 +245,14 @@ export class SessionModel extends observable.Observable implements Session {
this.notify({ object: this, eventName: observable.knownEvents.propertyChange, propertyName: "favorite", value: this._favorite });
}
}
public toggleFavorite() {
this.favorite = !this.favorite;
if (this.favorite) {
addToFavourites(this);
}
else {
removeFromFavourites(this);
}
}
}
var sessions: Array<SessionModel> = [
new SessionModel({
title: "Registration",
start: new Date(2015, 5, 3, 8, 30),
end: new Date(2015, 5, 3, 9, 30),
room: ""
}),
new SessionModel({
title: "NativeScript Deep Dive",
start: new Date(2015, 5, 3, 9, 30),
end: new Date(2015, 5, 3, 12, 30),
room: "Workshop Room 1"
}),
new SessionModel({
title: "Smart Design for Smartphones",
start: new Date(2015, 5, 3, 9, 30),
end: new Date(2015, 5, 3, 12, 30),
room: "Workshop Room 2"
}),
new SessionModel({
title: "Modern .NET Apps!",
start: new Date(2015, 5, 3, 9, 30),
end: new Date(2015, 5, 3, 12, 30),
room: "Workshop Room 3"
}),
new SessionModel({
title: "Telerik Sitefinity as a Data Integration Platform",
start: new Date(2015, 5, 3, 9, 30),
end: new Date(2015, 5, 3, 12, 30),
room: "Workshop Room 4"
}),
new SessionModel({
title: "Lunch",
start: new Date(2015, 5, 3, 9, 30),
end: new Date(2015, 5, 3, 12, 30),
room: ""
}),
new SessionModel({
title: "NativeScript Deep Dive",
start: new Date(2015, 5, 3, 1, 30),
end: new Date(2015, 5, 3, 4, 30),
room: "Workshop Room 1"
}),
new SessionModel({
title: "Smart Design for Smartphones",
start: new Date(2015, 5, 3, 1, 30),
end: new Date(2015, 5, 3, 4, 30),
room: "Workshop Room 2"
}),
new SessionModel({
title: "Responsive Apps with Telerik DevCraft",
start: new Date(2015, 5, 3, 1, 30),
end: new Date(2015, 5, 3, 4, 30),
room: "Workshop Room 3"
}),
new SessionModel({
title: "ASP .NET MVC Development in Telerik Sitefinity",
start: new Date(2015, 5, 3, 1, 30),
end: new Date(2015, 5, 3, 4, 30),
room: "Workshop Room 4"
}), new SessionModel({
title: "Registration",
start: new Date(2015, 5, 4, 7, 30),
end: new Date(2015, 5, 4, 9, 0),
room: ""
}), new SessionModel({
title: "Telerik Keynote",
start: new Date(2015, 5, 4, 9, 0),
end: new Date(2015, 5, 4, 10, 30),
room: "General Session"
}), new SessionModel({
title: "A Lap Around NativeScript",
start: new Date(2015, 5, 4, 10, 45),
end: new Date(2015, 5, 4, 11, 30),
room: "Conference Room 1"
}), new SessionModel({
title: "Kendo UI Building Blocks",
start: new Date(2015, 5, 4, 10, 45),
end: new Date(2015, 5, 4, 11, 30),
room: "Conference Room 2"
}), new SessionModel({
title: "CRUD with ASP.NET MVC, Web API, EF and Kendo UI",
start: new Date(2015, 5, 4, 10, 45),
end: new Date(2015, 5, 4, 11, 30),
room: "Conference Room 3"
}), new SessionModel({
title: "Best Practices for Understanding and Implementing Website Project Requirements",
start: new Date(2015, 5, 4, 10, 45),
end: new Date(2015, 5, 4, 11, 30),
room: "Conference Room 4"
}), new SessionModel({
title: "Getting Started with ScreenBuilder",
start: new Date(2015, 5, 4, 11, 45),
end: new Date(2015, 5, 4, 12, 30),
room: "Conference Room 1"
}), new SessionModel({
title: "Getting Started with AngularJS",
start: new Date(2015, 5, 4, 11, 45),
end: new Date(2015, 5, 4, 12, 30),
room: "Conference Room 2"
}), new SessionModel({
title: "Zero to Hipster with the M.I.K.E. Stack",
start: new Date(2015, 5, 4, 11, 45),
end: new Date(2015, 5, 4, 12, 30),
room: "Conference Room 3"
}), new SessionModel({
title: "Content Meets Commerce, Email and Analytics to Build the New Data-Driven Marketing Machine",
start: new Date(2015, 5, 4, 11, 45),
end: new Date(2015, 5, 4, 12, 30),
room: "Conference Room 4"
}), new SessionModel({
title: "Lunch",
start: new Date(2015, 5, 4, 12, 30),
end: new Date(2015, 5, 4, 1, 30),
room: ""
}), new SessionModel({
title: "Hybrid vs Native vs Web: Which is Right for Me?",
start: new Date(2015, 5, 4, 1, 30),
end: new Date(2015, 5, 4, 2, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "AngularJS Directives For Kendo UI",
start: new Date(2015, 5, 4, 1, 30),
end: new Date(2015, 5, 4, 2, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "Using Kendo UI in SharePoint/Office 365",
start: new Date(2015, 5, 4, 1, 30),
end: new Date(2015, 5, 4, 2, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Develop the Next Generation of Content-Driven Mobile Apps",
start: new Date(2015, 5, 4, 1, 30),
end: new Date(2015, 5, 4, 2, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "PM Break",
start: new Date(2015, 5, 4, 2, 15),
end: new Date(2015, 5, 4, 2, 30),
room: ""
}), new SessionModel({
title: "AppBuilder in 45 Minutes",
start: new Date(2015, 5, 4, 2, 30),
end: new Date(2015, 5, 4, 3, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "Mastering JavaScript",
start: new Date(2015, 5, 4, 2, 30),
end: new Date(2015, 5, 4, 3, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "Building Mobile Apps with Visual Studio",
start: new Date(2015, 5, 4, 2, 30),
end: new Date(2015, 5, 4, 3, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Building a CRM Portal in 60 Minutes",
start: new Date(2015, 5, 4, 2, 30),
end: new Date(2015, 5, 4, 3, 15),
room: "Conference Room 4"
}), new SessionModel({
title: "NativeScript Extensibility",
start: new Date(2015, 5, 4, 3, 30),
end: new Date(2015, 5, 4, 4, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "There's a Cordova Plugin for that!",
start: new Date(2015, 5, 4, 3, 30),
end: new Date(2015, 5, 4, 4, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "AngularJS and Kendo UI",
start: new Date(2015, 5, 4, 3, 30),
end: new Date(2015, 5, 4, 4, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Continuous Delivery and Telerik Sitefinity",
start: new Date(2015, 5, 4, 3, 30),
end: new Date(2015, 5, 4, 4, 15),
room: "Conference Room 4"
}), new SessionModel({
title: "Telerik Leadership Panel - Q&A",
start: new Date(2015, 5, 4, 4, 30),
end: new Date(2015, 5, 4, 5, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "Accelerate your Agile Adoption",
start: new Date(2015, 5, 4, 4, 30),
end: new Date(2015, 5, 4, 5, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "No Kidding, Real World Tester/Developer Collaboration",
start: new Date(2015, 5, 4, 4, 30),
end: new Date(2015, 5, 4, 5, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Sitefinity",
start: new Date(2015, 5, 4, 4, 30),
end: new Date(2015, 5, 4, 5, 15),
room: "Conference Room 4"
}), new SessionModel({
title: "Attendee Appreciation Party",
start: new Date(2015, 5, 4, 7, 0),
end: new Date(2015, 5, 4, 10, 30),
room: ""
}), new SessionModel({
title: "Registration",
start: new Date(2015, 5, 5, 8, 0),
end: new Date(2015, 5, 5, 9, 0),
room: ""
}), new SessionModel({
title: "Sitefinity Keynote",
start: new Date(2015, 5, 5, 9, 0),
end: new Date(2015, 5, 5, 10, 30),
room: "General Session"
}), new SessionModel({
title: "Introduction to Mobile Testing and Device Cloud",
start: new Date(2015, 5, 5, 10, 45),
end: new Date(2015, 5, 5, 11, 30),
room: "Conference Room 1"
}), new SessionModel({
title: "Data is Beautiful with Kendo UI DataViz",
start: new Date(2015, 5, 5, 10, 45),
end: new Date(2015, 5, 5, 11, 30),
room: "Conference Room 2"
}), new SessionModel({
title: "Mastering How to Visualize Data in ASP.NET MVC",
start: new Date(2015, 5, 5, 10, 45),
end: new Date(2015, 5, 5, 11, 30),
room: "Conference Room 3"
}), new SessionModel({
title: "Using Sitefinity to Power Web 3.0 Experiences",
start: new Date(2015, 5, 5, 10, 45),
end: new Date(2015, 5, 5, 11, 30),
room: "Conference Room 4"
}), new SessionModel({
title: "Building Offline-Ready Mobile Apps",
start: new Date(2015, 5, 5, 11, 45),
end: new Date(2015, 5, 5, 12, 30),
room: "Conference Room 1"
}), new SessionModel({
title: "Kendo UI Mobile: What It Can And Can't Do For You",
start: new Date(2015, 5, 5, 11, 45),
end: new Date(2015, 5, 5, 12, 30),
room: "Conference Room 2"
}), new SessionModel({
title: "ASP.NET with Telerik UI!",
start: new Date(2015, 5, 5, 11, 45),
end: new Date(2015, 5, 5, 12, 30),
room: "Conference Room 3"
}), new SessionModel({
title: "Cross-Channel Data Integration with Digital Experience Cloud",
start: new Date(2015, 5, 5, 11, 45),
end: new Date(2015, 5, 5, 12, 30),
room: "Conference Room 4"
}), new SessionModel({
title: "Lunch",
start: new Date(2015, 5, 5, 12, 30),
end: new Date(2015, 5, 5, 1, 30),
room: ""
}), new SessionModel({
title: "Performance Tuning Your Mobile Web Apps",
start: new Date(2015, 5, 5, 1, 30),
end: new Date(2015, 5, 5, 2, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "Improving Applications with Telerik Analytics",
start: new Date(2015, 5, 5, 1, 30),
end: new Date(2015, 5, 5, 2, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "Reporting vs Dashboards vs UI Data Apps",
start: new Date(2015, 5, 5, 1, 30),
end: new Date(2015, 5, 5, 2, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Modern MVC and Front-End Development with Telerik Sitefinity",
start: new Date(2015, 5, 5, 1, 30),
end: new Date(2015, 5, 5, 2, 15),
room: "Conference Room 4"
}), new SessionModel({
title: "PM Break",
start: new Date(2015, 5, 5, 2, 15),
end: new Date(2015, 5, 5, 2, 30),
room: ""
}), new SessionModel({
title: "Telerik Native Mobile UI for iOS and Android",
start: new Date(2015, 5, 5, 2, 30),
end: new Date(2015, 5, 5, 3, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "IoT and the Telerik Platform",
start: new Date(2015, 5, 5, 2, 30),
end: new Date(2015, 5, 5, 3, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "Debugging with Fiddler",
start: new Date(2015, 5, 5, 2, 30),
end: new Date(2015, 5, 5, 3, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Anticipating & Planning of Peak Online Traffic for Professional Football's Biggest Games",
start: new Date(2015, 5, 5, 2, 30),
end: new Date(2015, 5, 5, 3, 15),
room: "Conference Room 4"
}), new SessionModel({
title: "Building a Mobile App API using MongoDB and Node.js",
start: new Date(2015, 5, 5, 3, 30),
end: new Date(2015, 5, 5, 4, 15),
room: "Conference Room 1"
}), new SessionModel({
title: "Advanced Kendo UI",
start: new Date(2015, 5, 5, 3, 30),
end: new Date(2015, 5, 5, 4, 15),
room: "Conference Room 2"
}), new SessionModel({
title: "Building Touch Apps with UI for WPF",
start: new Date(2015, 5, 5, 3, 30),
end: new Date(2015, 5, 5, 4, 15),
room: "Conference Room 3"
}), new SessionModel({
title: "Making the Most Out of Sitefinity Personalization",
start: new Date(2015, 5, 5, 3, 30),
end: new Date(2015, 5, 5, 4, 15),
room: "Conference Room 4"
}), new SessionModel({
title: "Closing Keynote",
start: new Date(2015, 5, 5, 4, 30),
end: new Date(2015, 5, 5, 5, 15),
room: "General Session"
})];
var dates: Array<Date> = [new Date(2015, 5, 3), new Date(2015, 5, 4), new Date(2015, 5, 5)];
interface Session {
title: string;
start: Date;
end: Date;
room: string;
}
interface Speakers {
name: string;
title: string;
company: string;
picture: string;
}
var speakers: Array<Speakers> = [
{
name: "Todd Anglin",
title: "Vice President of Product Strategy",
company: "Telerik",
picture: "~/app/images/todd.png"
},
{
name: "Aaron Mahimainathan",
title: "Senior Vice President, Platform & Tools",
company: "Telerik",
picture: "~/app/images/aaron.png"
},
{
name: "Burke Holland",
title: "Director of Developer Relations",
company: "Telerik",
picture: "~/app/images/burke.png"
},
{
name: "Brian Rinaldi",
title: "Developer Content Manager",
company: "Telerik",
picture: "~/app/images/brian.png"
},
{
name: "TJ VanToll",
title: "Senior Developer Advocate",
company: "Telerik",
picture: "~/app/images/tj.png"
},
{
name: "Jen Looper",
title: "Developer Advocate",
company: "Telerik",
picture: "~/app/images/jen.png"
},
{
name: "Brandon Satrom",
title: "Director of Product Management",
company: "Telerik",
picture: "~/app/images/brandon.png"
},
{
name: "Michael Crump",
title: "Senior Developer Advocate",
company: "Telerik",
picture: "~/app/images/michael.png"
},
{
name: "Sam Basu",
title: "Developer Advocate",
company: "Telerik",
picture: "~/app/images/sam.png"
},
{
name: "Svetla Yankova",
title: "Product Marketing Manager",
company: "Telerik",
picture: "~/app/images/svetla.png"
}];

53
apps/TelerikNEXT/app.css Normal file
View File

@@ -0,0 +1,53 @@
Page{
background-color: white;
}
Label, Button, Image {
margin: 0 5;
}
.page-title {
font-size: 18;
color: #fac950;
}
.favourite-image{
width: 32;
height: 32;
vertical-align: center;
margin: 20;
}
.info {
color: #555555;
}
.info-bigger {
color: #555555;
font-size: 18;
}
.info-orange {
font-size: 16;
color: #A17201;
}
.break-row {
padding: 5;
background-color: #FFFBF0;
}
.list-view-row {
padding: 5;
}
.section-header {
color: #A17201;
margin: 5 5 0 5;
}
.horizontal-line {
height: 1;
background-color: #FAC950;
margin: 5 5 0 5;
}

View File

@@ -3,5 +3,8 @@
// Set the start module for the application
application.mainModule = "app/main-page";
// TODO: This is only neede because of the deply script.
application.cssFile = "app/TelerikNEXT/app.css";
// Start the application
application.start();

View File

@@ -0,0 +1,413 @@
var everlive = require("./lib/everlive");
var el = new everlive("mzacGkKPFlZUfbMq");
var i = 0;
// UPLOAD Sessions
var sessionsStatic = [
{
title: "Registration",
start: new Date(2015, 4, 3, 8, 30),
end: new Date(2015, 4, 3, 9, 30),
room: ""
}, {
title: "NativeScript Deep Dive",
start: new Date(2015, 4, 3, 9, 30),
end: new Date(2015, 4, 3, 12, 30),
room: "Workshop Room 1"
}, {
title: "Smart Design for Smartphones",
start: new Date(2015, 4, 3, 9, 30),
end: new Date(2015, 4, 3, 12, 30),
room: "Workshop Room 2"
}
, {
title: "Modern .NET Apps!",
start: new Date(2015, 4, 3, 9, 30),
end: new Date(2015, 4, 3, 12, 30),
room: "Workshop Room 3"
}, {
title: "Telerik Sitefinity as a Data Integration Platform",
start: new Date(2015, 4, 3, 9, 30),
end: new Date(2015, 4, 3, 12, 30),
room: "Workshop Room 4"
}, {
title: "Lunch",
start: new Date(2015, 4, 3, 9, 30),
end: new Date(2015, 4, 3, 12, 30),
room: ""
}, {
title: "NativeScript Deep Dive",
start: new Date(2015, 4, 3, 13, 30),
end: new Date(2015, 4, 3, 16, 30),
room: "Workshop Room 1"
}, {
title: "Smart Design for Smartphones",
start: new Date(2015, 4, 3, 13, 30),
end: new Date(2015, 4, 3, 16, 30),
room: "Workshop Room 2"
}, {
title: "Responsive Apps with Telerik DevCraft",
start: new Date(2015, 4, 3, 13, 30),
end: new Date(2015, 4, 3, 16, 30),
room: "Workshop Room 3"
}, {
title: "ASP .NET MVC Development in Telerik Sitefinity",
start: new Date(2015, 4, 3, 13, 30),
end: new Date(2015, 4, 3, 16, 30),
room: "Workshop Room 4"
}, {
title: "Registration",
start: new Date(2015, 4, 4, 7, 30),
end: new Date(2015, 4, 4, 9, 0),
room: ""
}, {
title: "Telerik Keynote",
start: new Date(2015, 4, 4, 9, 0),
end: new Date(2015, 4, 4, 10, 30),
room: "General Session"
}, {
title: "A Lap Around NativeScript",
start: new Date(2015, 4, 4, 10, 45),
end: new Date(2015, 4, 4, 11, 30),
room: "Conference Room 1"
}, {
title: "Kendo UI Building Blocks",
start: new Date(2015, 4, 4, 10, 45),
end: new Date(2015, 4, 4, 11, 30),
room: "Conference Room 2"
}, {
title: "CRUD with ASP.NET MVC, Web API, EF and Kendo UI",
start: new Date(2015, 4, 4, 10, 45),
end: new Date(2015, 4, 4, 11, 30),
room: "Conference Room 3"
}, {
title: "Best Practices for Understanding and Implementing Website Project Requirements",
start: new Date(2015, 4, 4, 10, 45),
end: new Date(2015, 4, 4, 11, 30),
room: "Conference Room 4"
}, {
title: "Getting Started with ScreenBuilder",
start: new Date(2015, 4, 4, 11, 45),
end: new Date(2015, 4, 4, 12, 30),
room: "Conference Room 1"
}, {
title: "Getting Started with AngularJS",
start: new Date(2015, 4, 4, 11, 45),
end: new Date(2015, 4, 4, 12, 30),
room: "Conference Room 2"
}, {
title: "Zero to Hipster with the M.I.K.E. Stack",
start: new Date(2015, 4, 4, 11, 45),
end: new Date(2015, 4, 4, 12, 30),
room: "Conference Room 3"
}, {
title: "Content Meets Commerce, Email and Analytics to Build the New Data-Driven Marketing Machine",
start: new Date(2015, 4, 4, 11, 45),
end: new Date(2015, 4, 4, 12, 30),
room: "Conference Room 4"
}, {
title: "Lunch",
start: new Date(2015, 4, 4, 12, 30),
end: new Date(2015, 4, 4, 13, 30),
room: ""
}, {
title: "Hybrid vs Native vs Web: Which is Right for Me?",
start: new Date(2015, 4, 4, 13, 30),
end: new Date(2015, 4, 4, 14, 15),
room: "Conference Room 1"
}, {
title: "AngularJS Directives For Kendo UI",
start: new Date(2015, 4, 4, 13, 30),
end: new Date(2015, 4, 4, 14, 15),
room: "Conference Room 2"
}, {
title: "Using Kendo UI in SharePoint/Office 365",
start: new Date(2015, 4, 4, 13, 30),
end: new Date(2015, 4, 4, 14, 15),
room: "Conference Room 3"
}, {
title: "Develop the Next Generation of Content-Driven Mobile Apps",
start: new Date(2015, 4, 4, 13, 30),
end: new Date(2015, 4, 4, 14, 15),
room: "Conference Room 3"
}, {
title: "PM Break",
start: new Date(2015, 4, 4, 14, 15),
end: new Date(2015, 4, 4, 14, 30),
room: ""
}, {
title: "AppBuilder in 45 Minutes",
start: new Date(2015, 4, 4, 14, 30),
end: new Date(2015, 4, 16, 15, 15),
room: "Conference Room 1"
}, {
title: "Mastering JavaScript",
start: new Date(2015, 4, 4, 14, 30),
end: new Date(2015, 4, 16, 15, 15),
room: "Conference Room 2"
}, {
title: "Building Mobile Apps with Visual Studio",
start: new Date(2015, 4, 4, 14, 30),
end: new Date(2015, 4, 16, 15, 15),
room: "Conference Room 3"
}, {
title: "Building a CRM Portal in 60 Minutes",
start: new Date(2015, 4, 4, 14, 30),
end: new Date(2015, 4, 16, 15, 15),
room: "Conference Room 4"
}, {
title: "NativeScript Extensibility",
start: new Date(2015, 4, 4, 15, 30),
end: new Date(2015, 4, 4, 16, 15),
room: "Conference Room 1"
}, {
title: "There's a Cordova Plugin for that!",
start: new Date(2015, 4, 4, 15, 30),
end: new Date(2015, 4, 4, 16, 15),
room: "Conference Room 2"
}, {
title: "AngularJS and Kendo UI",
start: new Date(2015, 4, 4, 15, 30),
end: new Date(2015, 4, 4, 16, 15),
room: "Conference Room 3"
}, {
title: "Continuous Delivery and Telerik Sitefinity",
start: new Date(2015, 4, 4, 15, 30),
end: new Date(2015, 4, 4, 16, 15),
room: "Conference Room 4"
}, {
title: "Telerik Leadership Panel - Q&A",
start: new Date(2015, 4, 4, 16, 30),
end: new Date(2015, 4, 4, 17, 15),
room: "Conference Room 1"
}, {
title: "Accelerate your Agile Adoption",
start: new Date(2015, 4, 4, 16, 30),
end: new Date(2015, 4, 4, 17, 15),
room: "Conference Room 2"
}, {
title: "No Kidding, Real World Tester/Developer Collaboration",
start: new Date(2015, 4, 4, 16, 30),
end: new Date(2015, 4, 4, 17, 15),
room: "Conference Room 3"
}, {
title: "Sitefinity",
start: new Date(2015, 4, 4, 16, 30),
end: new Date(2015, 4, 4, 17, 15),
room: "Conference Room 4"
}, {
title: "Attendee Appreciation Party",
start: new Date(2015, 4, 4, 19, 0),
end: new Date(2015, 4, 4, 22, 30),
room: ""
}, {
title: "Registration",
start: new Date(2015, 4, 5, 8, 0),
end: new Date(2015, 4, 5, 9, 0),
room: ""
}, {
title: "Sitefinity Keynote",
start: new Date(2015, 4, 5, 9, 0),
end: new Date(2015, 4, 5, 10, 30),
room: "General Session"
}, {
title: "Introduction to Mobile Testing and Device Cloud",
start: new Date(2015, 4, 5, 10, 45),
end: new Date(2015, 4, 5, 11, 30),
room: "Conference Room 1"
}, {
title: "Data is Beautiful with Kendo UI DataViz",
start: new Date(2015, 4, 5, 10, 45),
end: new Date(2015, 4, 5, 11, 30),
room: "Conference Room 2"
}, {
title: "Mastering How to Visualize Data in ASP.NET MVC",
start: new Date(2015, 4, 5, 10, 45),
end: new Date(2015, 4, 5, 11, 30),
room: "Conference Room 3"
}, {
title: "Using Sitefinity to Power Web 3.0 Experiences",
start: new Date(2015, 4, 5, 10, 45),
end: new Date(2015, 4, 5, 11, 30),
room: "Conference Room 4"
}, {
title: "Building Offline-Ready Mobile Apps",
start: new Date(2015, 4, 5, 11, 45),
end: new Date(2015, 4, 5, 12, 30),
room: "Conference Room 1"
}, {
title: "Kendo UI Mobile: What It Can And Can't Do For You",
start: new Date(2015, 4, 5, 11, 45),
end: new Date(2015, 4, 5, 12, 30),
room: "Conference Room 2"
}, {
title: "ASP.NET with Telerik UI!",
start: new Date(2015, 4, 5, 11, 45),
end: new Date(2015, 4, 5, 12, 30),
room: "Conference Room 3"
}, {
title: "Cross-Channel Data Integration with Digital Experience Cloud",
start: new Date(2015, 4, 5, 11, 45),
end: new Date(2015, 4, 5, 12, 30),
room: "Conference Room 4"
}, {
title: "Lunch",
start: new Date(2015, 4, 5, 12, 30),
end: new Date(2015, 4, 5, 13, 30),
room: ""
}, {
title: "Performance Tuning Your Mobile Web Apps",
start: new Date(2015, 4, 5, 13, 30),
end: new Date(2015, 4, 5, 14, 15),
room: "Conference Room 1"
}, {
title: "Improving Applications with Telerik Analytics",
start: new Date(2015, 4, 5, 13, 30),
end: new Date(2015, 4, 5, 14, 15),
room: "Conference Room 2"
}, {
title: "Reporting vs Dashboards vs UI Data Apps",
start: new Date(2015, 4, 5, 13, 30),
end: new Date(2015, 4, 5, 14, 15),
room: "Conference Room 3"
}, {
title: "Modern MVC and Front-End Development with Telerik Sitefinity",
start: new Date(2015, 4, 5, 13, 30),
end: new Date(2015, 4, 5, 14, 15),
room: "Conference Room 4"
}, {
title: "PM Break",
start: new Date(2015, 4, 5, 14, 15),
end: new Date(2015, 4, 5, 14, 30),
room: ""
}, {
title: "Telerik Native Mobile UI for iOS and Android",
start: new Date(2015, 4, 5, 14, 30),
end: new Date(2015, 4, 17, 15, 15),
room: "Conference Room 1"
}, {
title: "IoT and the Telerik Platform",
start: new Date(2015, 4, 5, 14, 30),
end: new Date(2015, 4, 17, 15, 15),
room: "Conference Room 2"
}, {
title: "Debugging with Fiddler",
start: new Date(2015, 4, 5, 14, 30),
end: new Date(2015, 4, 17, 15, 15),
room: "Conference Room 3"
}, {
title: "Anticipating & Planning of Peak Online Traffic for Professional Football's Biggest Games",
start: new Date(2015, 4, 5, 14, 30),
end: new Date(2015, 4, 17, 15, 15),
room: "Conference Room 4"
}, {
title: "Building a Mobile App API using MongoDB and Node.js",
start: new Date(2015, 4, 5, 15, 30),
end: new Date(2015, 4, 5, 16, 15),
room: "Conference Room 1"
}, {
title: "Advanced Kendo UI",
start: new Date(2015, 4, 5, 15, 30),
end: new Date(2015, 4, 5, 16, 15),
room: "Conference Room 2"
}, {
title: "Building Touch Apps with UI for WPF",
start: new Date(2015, 4, 5, 15, 30),
end: new Date(2015, 4, 5, 16, 15),
room: "Conference Room 3"
}, {
title: "Making the Most Out of Sitefinity Personalization",
start: new Date(2015, 4, 5, 15, 30),
end: new Date(2015, 4, 5, 16, 15),
room: "Conference Room 4"
}, {
title: "Closing Keynote",
start: new Date(2015, 4, 5, 16, 30),
end: new Date(2015, 4, 5, 17, 15),
room: "General Session"
}];
var dataSessions = el.data('NextSessions');
for (i = 0; i < sessionsStatic.length; i++) {
dataSessions.create(sessionsStatic[i],
function (data) {
console.log("session added: " + JSON.stringify(data));
},
function (error) {
console.log("error: " + error);
});
}
// UPLOAD SPEAKERS
var speakersStatic = [
{
name: "Todd Anglin",
title: "Vice President of Product Strategy",
company: "Telerik",
picture: "todd.png"
},
{
name: "Aaron Mahimainathan",
title: "Senior Vice President, Platform & Tools",
company: "Telerik",
picture: "aaron.png"
},
{
name: "Burke Holland",
title: "Director of Developer Relations",
company: "Telerik",
picture: "burke.png"
},
{
name: "Brian Rinaldi",
title: "Developer Content Manager",
company: "Telerik",
picture: "brian.png"
},
{
name: "TJ VanToll",
title: "Senior Developer Advocate",
company: "Telerik",
picture: "tj.png"
},
{
name: "Jen Looper",
title: "Developer Advocate",
company: "Telerik",
picture: "jen.png"
},
{
name: "Brandon Satrom",
title: "Director of Product Management",
company: "Telerik",
picture: "brandon.png"
},
{
name: "Michael Crump",
title: "Senior Developer Advocate",
company: "Telerik",
picture: "michael.png"
},
{
name: "Sam Basu",
title: "Developer Advocate",
company: "Telerik",
picture: "sam.png"
},
{
name: "Svetla Yankova",
title: "Product Marketing Manager",
company: "Telerik",
picture: "svetla.png"
}];
var data = el.data('NextSpeakers');
for (i = 0; i < speakersStatic.length; i++) {
data.create(speakersStatic[i],
function (data) {
console.log("speaker added: " + JSON.stringify(data));
},
function (error) {
console.log("error: " + error);
});
}

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -1,23 +0,0 @@
Label, Button, Image {
margin: 5;
}
.speakerPicture {
width: 100;
height: 100;
}
.speakerTitle, .speakerCompany {
font-size: 18;
color: #07ab9e;
}
.speakerName {
font-size: 22;
color: black;
}
.title {
font-size: 22;
color: black;
}

View File

@@ -1,16 +1,24 @@
import observable = require("data/observable");
import pages = require("ui/page");
import gestures = require("ui/gestures");
import listView = require("ui/list-view");
import frame = require("ui/frame");
import appViewModel = require("./app-view-model");
export function pageLoaded(args: observable.EventData) {
var page = <pages.Page>args.object;
page.bindingContext = new appViewModel.AppViewModel();
page.bindingContext = appViewModel.appModel;
}
export function selectSession(args: listView.ItemEventData) {
frame.topmost().navigate({
moduleName: "app/session-page",
context: args.view.bindingContext
});
}
export function toggleFavorite(args: gestures.GestureEventData) {
var item = <appViewModel.SessionModel>args.view.bindingContext;
item.favorite = !item.favorite;
item.toggleFavorite();
}

View File

@@ -38,11 +38,11 @@
</SegmentedBar.items>
</SegmentedBar>
<Label style="horizontal-align: center;margin: 15;">
<Label cssClass="page-title" horizontalAlignment="center" margin="15">
<Label.formattedText>
<FormattedString fontSize="18" foregroundColor="#fac950">
<FormattedString>
<FormattedString.spans>
<Span text="WORKSHOPS" fontAttributes="Bold" />
<Span text="{{ dayHeader }}" fontAttributes="Bold" />
</FormattedString.spans>
</FormattedString>
</Label.formattedText>
@@ -51,38 +51,29 @@
<SearchBar text="{{ search }}" hint="Search" style="background-color: #fac950; color: #fac950;" textFieldBackgroundColor="white" row="1" />
<ListView items="{{ sessions }}" row="2" separatorColor="#fac950">
<ListView items="{{ sessions }}" row="2" separatorColor="#fac950" itemTap="selectSession">
<ListView.itemTemplate>
<GridLayout columns="auto, *" backgroundColor="{{ canBeFavorited ? 'white' : '#fffbf0' }}">
<GridLayout columns="auto, *" cssClass="{{ canBeFavorited ? 'list-view-row' : 'break-row' }}">
<Image src="{{ favorite ? '~/app/images/fav.png' : '~/app/images/addfav.png' }}" visibility="{{ canBeFavorited ? 'visible' : 'collapsed' }}"
tap="toggleFavorite" width="32" height="32" vertical-align="center" margin="20" />
<Image src="{{ favorite ? '~/app/images/fav.png' : '~/app/images/addfav.png' }}"
visibility="{{ canBeFavorited ? 'visible' : 'collapsed' }}"
tap="toggleFavorite" cssClass="favourite-image" />
<StackLayout col="1">
<Label>
<Label cssClass="info-orange">
<Label.formattedText>
<FormattedString fontSize="18" foregroundColor="#a17201">
<FormattedString>
<FormattedString.spans>
<Span text="Time:" />
<Span text="{{ range }}" fontAttributes="Bold" />
</FormattedString.spans>
</FormattedString>
</Label.formattedText>
</Label>
<Label text="{{ title }}" textWrap="true" cssClass="title" />
<Label text="{{ title }}" textWrap="true" cssClass="info-bigger"/>
<Label visibility="{{ room ? 'visible' : 'collapsed' }}">
<Label.formattedText>
<FormattedString fontSize="12" foregroundColor="#a17201">
<FormattedString.spans>
<Span text="Room: " />
<Span text="{{ room }}" fontAttributes="Bold" />
</FormattedString.spans>
</FormattedString>
</Label.formattedText>
</Label>
<Label visibility="{{ room ? 'visible' : 'collapsed' }}" text="{{ room }}" cssClass="info-orange" />
</StackLayout>
@@ -90,6 +81,8 @@
</ListView.itemTemplate>
</ListView>
<ActivityIndicator busy="{{ isLoading }}" row="2" horizontalAlignment="center" verticalAlignment="center" />
</GridLayout>
<Border style="background-color: #053140;" visibility="{{ selectedViewIndex === 2 ? 'visible' : 'collapsed' }}">

View File

@@ -0,0 +1,15 @@
import observable = require("data/observable");
import pages = require("ui/page");
import gestures = require("ui/gestures");
import appViewModel = require("./app-view-model");
export function pageNavigatedTo(args: observable.EventData) {
var page = <pages.Page>args.object;
page.bindingContext = page.navigationContext;
}
export function toggleFavorite(args: gestures.GestureEventData) {
var item = <appViewModel.SessionModel>args.view.bindingContext;
item.toggleFavorite();
}

View File

@@ -0,0 +1,83 @@
<Page xmlns="http://www.nativescript.org/tns.xsd"
xmlns:tsb="app/TelerikNEXT/TelerikUI/side-bar"
navigatedTo="pageNavigatedTo">
<GridLayout rows="auto, *">
<!-- HEADER -->
<GridLayout columns="70, *" style="background-image: url('~/app/images/background.jpg')">
<StackLayout col="1" margin="15 5">
<Label text="{{ title }}" textWrap="true" cssClass="page-title"/>
<Label cssClass="info-orange">
<Label.formattedText>
<FormattedString>
<FormattedString.spans>
<Span text="{{ range}}" fontAttributes="Bold" />
<Span text=", " fontAttributes="Bold" />
<Span text="{{ room }}" fontAttributes="Bold" />
</FormattedString.spans>
</FormattedString>
</Label.formattedText>
</Label>
</StackLayout>
<Image tap="toggleFavorite" cssClass="favourite-image"
src="{{ favorite ? '~/app/images/fav.png' : '~/app/images/addfav.png' }}"
visibility="{{ canBeFavorited ? 'visible' : 'collapsed' }}" />
</GridLayout>
<!-- Scrollable content -->
<ScrollView row="1">
<GridLayout rows="auto, auto, auto, auto, auto, auto, auto, auto, auto, auto, auto" columns="70, *" >
<!-- Description -->
<Label cssClass="info" textWrap="true" col="1" margin="10 5 5 5"
text="TODO: Put description here." />
<!-- Line -->
<StackLayout cssClass="horizontal-line" row="1" col="1"/>
<!-- Speakers -->
<Label text="Speakers" cssClass="section-header" row="2" col="1" />
<ListView items="{{ speakers }}" row="3" colSpan="2" height="{{ speakers.length * 72 }}" selectedBackgroundColor="#fac950" separatorColor="#FFFFFF">
<ListView.itemTemplate>
<GridLayout columns="65, *" cssClass="list-view-row">
<Image src="{{ '~/app/images/' + picture }}" verticalAlignment="top"/>
<StackLayout col="1">
<Label cssClass="info">
<Label.formattedText>
<FormattedString>
<FormattedString.spans>
<Span text="{{ name }}" fontAttributes="Bold" />
</FormattedString.spans>
</FormattedString>
</Label.formattedText>
</Label>
<Label cssClass="info">
<Label.formattedText>
<FormattedString>
<FormattedString.spans>
<Span text="{{ title }}" fontAttributes="Italic" />
</FormattedString.spans>
</FormattedString>
</Label.formattedText>
</Label>
<Label text="{{ company }}" cssClass="info"/>
</StackLayout>
</GridLayout>
</ListView.itemTemplate>
</ListView>
<!-- Line -->
<StackLayout cssClass="horizontal-line" row="4" col="1"/>
<!-- More -->
<Label text="More" cssClass="section-header" row="5" col="1"/>
<Label text="LEAVE FEEDBACK" row="6" col="1"/>
<Label text="WATCH VIDEOS" row="7" col="1"/>
</GridLayout>
</ScrollView>
</GridLayout>
</Page>