var kp;
(function (kp) {
var API_SERVER = "http://api.kptaipei.tw/v1/";
var accessToken = "[Your API Key]";
//透過reviver提供ISO 8601字串轉Data的功能
//REF: http://msdn.microsoft.com/zh-tw/library/ie/cc836466(v=vs.94).aspx
var dateReviver = function (key, value) {
var a;
if (typeof value === 'string') {
//標準ISO 8601 或 API傳回的yyyy-MM-dd HH:mm:ss格式
a = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z*$/.exec(value);
if (a) {
returnnew Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
}
//格式二 1408525510000
if (key.indexOf("date_") === 0 && value.match(/\d{13}/)) {
returnnew Date(parseInt(value));
}
}
return value;
};
/** API呼叫共用函式 */
function callApi(act, id) {
if (typeof id === "undefined") { id = ""; }
var dfd = jQuery.Deferred();
var param = { accessToken: accessToken };
$.get(API_SERVER + act + "/" + id, param, function (resString) {
var res = JSON.parse(resString, dateReviver);
if (!res.isSuccess) {
alert("API Error: " + res.errorCode + " " + res.errorMessage);
dfd.reject();
} else {
dfd.resolve(res.data);
}
}, "text");
return dfd.promise();
}
kp.callApi = callApi;
/** ViewModel */
var ViewModel = (function () {
function ViewModel() {
this.categories = ko.observableArray([]);
this.selCategory = ko.observable(null);
this.article = ko.observable(null);
this.albums = ko.observableArray([]);
this.albumTitle = ko.observable(null);
this.selAlbum = ko.observable(null);
this.photos = ko.observableArray([]);
this.playlists = ko.observableArray([]);
this.selPlaylist = ko.observable(null);
this.videos = ko.observableArray([]);
this.video = ko.observable(null);
var self = this;
ko.computed(function () {
var item = self.selCategory();
item && callApi("category", item.id).done(function (data) {
item.articles(data);
if (!self.article())
self.article(data[0]);
});
});
ko.computed(function () {
//預設選取第一筆文章
if (!self.selCategory() && self.categories().length)
self.selCategory(self.categories()[0]);
});
ko.computed(function () {
var item = self.selAlbum();
item && callApi("albums", item.id).done(function (data) {
self.photos(data.photos);
self.albumTitle(data.set.title);
});
});
ko.computed(function () {
//預設選取第一本相簿
if (!self.selAlbum() && self.albums().length)
self.selAlbum(self.albums()[0]);
});
ko.computed(function () {
var item = self.selPlaylist();
item && callApi("videos", item.id).done(function (data) {
item.videos(data);
if (!self.video())
self.video(data[0]);
});
});
ko.computed(function () {
//預設選取第一部影片
if (!self.selPlaylist() && self.playlists().length) {
var playlist = self.playlists()[0];
self.selPlaylist(playlist);
}
});
}
return ViewModel;
})();
kp.ViewModel = ViewModel;
kp.model = new ViewModel();
function init(type) {
var map = {
category: "categories",
albums: "albums",
videos: "playlists"
};
callApi(type).done(function (data) {
if (type == "category") {
$.each(data, function (i, item) {
item.articles = ko.observableArray([]);
});
} elseif (type == "videos") {
$.each(data, function (i, item) {
item.videos = ko.observableArray([]);
});
}
kp.model[map[type]](data);
});
}
kp.init = init;
ko.applyBindings(kp.model);
})(kp || (kp = {}));