(function(){ var loading = null, site_url = null; $("document").ready(function(){ loading = $("#loading"); bindHandlers(); }) var bindHandlers = function(){ $("#find-channels").on("click",function(){ site_url = $("#site-url-wrapper input[type=text]").val(); $("#site-url-wrapper").fadeOut(); getChannelList(); }) $("#toggle-manual-rss").on("click",function(){ $("#manual-rss-form").slideToggle(); }) $("input[name='source-type']").on("change",function(){ if($(this).val() == "json"){ $("#rss-detect-block").hide(); $("#json-detect-block").show(); }else{ $("#json-detect-block").hide(); $("#rss-detect-block").show(); } }) $("#manual-rss-detect").on("click",function(){ var rss_url = $("#manual-rss-url").val().trim(); if(!rss_url){ alert("請先填寫 RSS 網址"); return; } $.ajax({ url: "/admin/feeds/rss_fields", data: {"url": rss_url}, dataType: "json", type: "get" }).done(function(data){ if(!data.fields || data.fields.length == 0){ alert("偵測不到欄位,請確認 RSS 網址是否正確"); return; } var titleSelect = $("#manual-rss-title-field"); var linkSelect = $("#manual-rss-link-field"); var imageSelect = $("#manual-rss-image-field"); titleSelect.html(""); linkSelect.html(""); imageSelect.html(""); $.each(data.fields, function(i, f){ titleSelect.append(""); linkSelect.append(""); imageSelect.append(""); }) $("#manual-rss-mapping").show(); }) }) $("#json-detect-step1").on("click",function(){ var json_url = $("#manual-rss-url").val().trim(); if(!json_url){ alert("請先填寫網址"); return; } $.ajax({ url: "/admin/feeds/json_top_keys", data: {"url": json_url}, dataType: "json", type: "get" }).done(function(data){ if(data.error){ alert("抓取失敗,請確認網址是否正確、是否為 JSON 格式"); return; } var select = $("#json-list-key-select"); select.html(""); if(data.root_is_array){ select.append(""); } $.each(data.array_keys, function(i, k){ select.append(""); }) if(!data.root_is_array && data.array_keys.length == 0){ alert("偵測不到任何陣列欄位,請確認這個網址回傳的是不是文章列表 JSON"); return; } $("#json-list-key-wrapper").show(); $("#json-field-mapping").hide(); }) }) $("#json-detect-step2").on("click",function(){ var json_url = $("#manual-rss-url").val().trim(); var list_key = $("#json-list-key-select").val(); $.ajax({ url: "/admin/feeds/json_item_fields", data: {"url": json_url, "list_key": list_key}, dataType: "json", type: "get" }).done(function(data){ if(!data.fields || data.fields.length == 0){ alert("偵測不到欄位,請確認列表位置選對了嗎"); return; } var titleSelect = $("#json-title-field"); var subtitleSelect = $("#json-subtitle-field"); var contentSelect = $("#json-content-field"); var timeSelect = $("#json-time-field"); var imageSelect = $("#json-image-field"); var idSelect = $("#json-id-field"); var linkFieldSelect = $("#json-link-field"); titleSelect.html(""); subtitleSelect.html(""); contentSelect.html(""); timeSelect.html(""); imageSelect.html(""); idSelect.html(""); linkFieldSelect.html(""); $.each(data.fields, function(i, f){ titleSelect.append(""); subtitleSelect.append(""); contentSelect.append(""); timeSelect.append(""); imageSelect.append(""); idSelect.append(""); linkFieldSelect.append(""); }) $("#json-field-mapping").show(); }) }) $("input[name='json-link-mode']").on("change",function(){ if($(this).val() == "template"){ $("#json-link-field-wrapper").hide(); $("#json-link-template-wrapper").show(); }else{ $("#json-link-template-wrapper").hide(); $("#json-link-field-wrapper").show(); } }) $("#manual-rss-next").on("click",function(){ var rss_url = $("#manual-rss-url").val().trim(); var title = $("#manual-rss-title").val().trim(); var source_type = $("input[name='source-type']:checked").val(); var channel_key = "announcement"; if(!rss_url || !title){ alert("請把網址、頻道顯示名稱填寫完整"); return; } site_url = rss_url; var title_translations = {}; title_translations[I18n.locale] = title; var feed = { uid: title.replace(/\s+/g,'_') + "_" + Date.now(), url: rss_url, title_translations: title_translations }; if(source_type == "json"){ var list_key = $("#json-list-key-select").val(); var json_title_field = $("#json-title-field").val(); var json_subtitle_field = $("#json-subtitle-field").val(); var json_content_field = $("#json-content-field").val(); var json_time_field = $("#json-time-field").val(); var json_image_field = $("#json-image-field").val(); var json_id_field = $("#json-id-field").val(); var json_link_mode = $("input[name='json-link-mode']:checked").val(); var json_link_field = $("#json-link-field").val(); var json_link_template = $("#json-link-template").val().trim(); if(!json_title_field || !json_id_field){ alert("請完成 JSON 欄位偵測,並至少填寫標題欄位、ID欄位"); return; } if(json_link_mode == "template" && !json_link_template){ alert("請填寫連結樣板"); return; } if(json_link_mode == "field" && !json_link_field){ alert("請選擇連結欄位"); return; } feed.is_json_list = true; feed.json_list_key = list_key; feed.json_id_field = json_id_field; feed.json_title_field = json_title_field; feed.json_subtitle_field = json_subtitle_field; feed.json_content_field = json_content_field; feed.json_time_field = json_time_field; feed.json_image_field = json_image_field; feed.json_link_mode = json_link_mode; feed.json_link_field = json_link_field; feed.json_link_template = json_link_template; }else{ var title_field = $("#manual-rss-title-field").val(); var link_field = $("#manual-rss-link-field").val(); var image_field = $("#manual-rss-image-field").val(); if(!title_field || !link_field){ alert("請把標題欄位、連結欄位填寫完整"); return; } feed.is_rss = true; feed.rss_title_field = title_field; feed.rss_link_field = link_field; feed.rss_image_field = image_field; } var channel = {key: channel_key, title: title}; subscribeFeed($("
"), feed, channel); }) } var getChannelList = function(){ displayLoading(true,"Fetching channels from " + site_url); $.ajax({ url : "/admin/feeds/get_channel_list", data : {"url" : site_url}, dataType : "json", type : "get" }).done(function(channels){ if (channels != null){ $.each(channels.channels,function(index,channel){ var ch = $("

" + channel.title + "
"); ch.on("click",function(){ getFeedList(channel); }) $("#channels").append(ch); }) setTimeout(function(){ displayLoading(false); setTimeout(function(){$("#channels").fadeIn();},500); },1000); } else{ alert('Feed not found') window.location.href = window.location.href } }) } var getFeedList = function(channel){ $("#channels").fadeOut(function(){ $("#channels").html(""); displayLoading(true,"Fetching feed list for " + channel.title); var data_to_send = {"url" : site_url, "channel" : channel.key, "feed_list_url" : channel.url}; if (channel.feeds){ data_to_send.feeds = JSON.stringify(channel.feeds) } console.log(data_to_send) $.ajax({ url : "/admin/feeds/get_feed_list", data : data_to_send, dataType : "json", type : "post" }).done(function(data){ $.each(data.feeds, function(index,feed){ var klass = (feed.subscribed ? "active" : ""); var f = $("

" + feed.title_translations[I18n.locale] + "
"); f.on("click",function(){ if($(this).hasClass("active")){ if(confirm("Are you sure, you want to unsubscribe from " + feed.title_translations[I18n.locale] + "?")){ unsubscribeFeed($(this),feed); } }else{ subscribeFeed($(this),feed,channel); } }) $("#channels").append(f); }) setTimeout(function(){ displayLoading(false); setTimeout(function(){$("#channels").fadeIn();},500); },1000); }) }) } var unsubscribeFeed = function(dom,feed){ dom.removeClass("active"); $.ajax({ url : "/admin/feeds/unsubscribe", data : {"feed_uid": feed.uid}, dataType : "json", type : "post" }).done(function(){ $("#selectCategoryModal").modal("hide"); }) } var subscribeFeed = function(dom,feed,channel){ var subscribe_button = $("#subscribe-button"), select = $("#local-category"); $("#selectCategoryModal").modal("show"); subscribe_button.attr("disabled","disabled"); $.ajax({ url : "/admin/feeds/get_category_list", data : {"channel" : channel.key}, dataType : "json", type : "get" }).done(function(data){ select.html(""); $.each(data.categories,function(index,category){ select.append(""); }) subscribe_button.removeAttr("disabled"); }) subscribe_button.unbind("click"); subscribe_button.on("click",function(){ dom.addClass("active"); subscribe_button.attr("disabled","disabled"); $.ajax({ url : "/admin/feeds/subscribe", data : {"url" : site_url, "feed" : feed, "channel" : channel.title, "channel_key" : channel.key, "category" : select.val()}, dataType : "json", type : "post" }).done(function(){ subscribe_button.removeAttr("disabled"); $("#selectCategoryModal").modal("hide"); alert("訂閱成功!"); }).fail(function(){ subscribe_button.removeAttr("disabled"); alert("訂閱失敗,請確認欄位設定是否正確,或稍後再試一次"); }) }) } var displayLoading = function(display, msg){ if(display){ loading.find(".progress_msg").text(msg); loading.fadeIn(); }else{ loading.find(".progress_msg").text(""); loading.fadeOut(); } } })();