Allow publish to Blogger Pages
This commit is contained in:
		
							parent
							
								
									6558d73425
								
							
						
					
					
						commit
						1c16921f3f
					
				| @ -942,6 +942,96 @@ define([ | |||||||
|         }); |         }); | ||||||
|         task.enqueue(); |         task.enqueue(); | ||||||
|     }; |     }; | ||||||
|  | 
 | ||||||
|  |     googleHelper.uploadBloggerPage = function(blogUrl, blogId, pageId, isDraft, publishDate, title, content, callback) { | ||||||
|  |         var accountId = 'google.blogger0'; | ||||||
|  |         var task = new AsyncTask(); | ||||||
|  |         connect(task); | ||||||
|  |         authenticate(task, 'blogger', accountId); | ||||||
|  |         task.onRun(function() { | ||||||
|  |             var headers = {}; | ||||||
|  |             var authorizationMgr = authorizationMgrMap[accountId]; | ||||||
|  |             if(authorizationMgr && authorizationMgr.token) { | ||||||
|  |                 headers.Authorization = "Bearer " + authorizationMgr.token.access_token; | ||||||
|  |             } | ||||||
|  |             function uploadPage() { | ||||||
|  |                 var url = "https://www.googleapis.com/blogger/v3/blogs/" + blogId + "/pages/"; | ||||||
|  |                 var data = { | ||||||
|  |                     kind: "blogger#page", | ||||||
|  |                     blog: { | ||||||
|  |                         id: blogId | ||||||
|  |                     }, | ||||||
|  |                     title: title, | ||||||
|  |                     content: content | ||||||
|  |                 }; | ||||||
|  |                 var type = "POST"; | ||||||
|  |                 // If it's an update
 | ||||||
|  |                 if(pageId !== undefined) { | ||||||
|  |                     url += pageId; | ||||||
|  |                     data.id = pageId; | ||||||
|  |                     type = "PUT"; | ||||||
|  |                 } | ||||||
|  |                 $.ajax({ | ||||||
|  |                     url: url, | ||||||
|  |                     data: JSON.stringify(data), | ||||||
|  |                     headers: headers, | ||||||
|  |                     type: type, | ||||||
|  |                     contentType: "application/json", | ||||||
|  |                     dataType: "json", | ||||||
|  |                     timeout: constants.AJAX_TIMEOUT | ||||||
|  |                 }).done(function(page) { | ||||||
|  |                     pageId = page.id; | ||||||
|  |                     task.chain(); | ||||||
|  |                 }).fail(function(jqXHR) { | ||||||
|  |                     var error = { | ||||||
|  |                         code: jqXHR.status, | ||||||
|  |                         message: jqXHR.statusText | ||||||
|  |                     }; | ||||||
|  |                     // Handle error
 | ||||||
|  |                     if(error.code === 404 && pageId !== undefined) { | ||||||
|  |                         error = 'Page ' + pageId + ' not found on Blogger.|removePublish'; | ||||||
|  |                     } | ||||||
|  |                     handleError(error, task); | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |             function getBlogId() { | ||||||
|  |                 if(blogId !== undefined) { | ||||||
|  |                     task.chain(uploadPage); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 $.ajax({ | ||||||
|  |                     url: "https://www.googleapis.com/blogger/v3/blogs/byurl", | ||||||
|  |                     data: { | ||||||
|  |                         url: blogUrl | ||||||
|  |                     }, | ||||||
|  |                     headers: headers, | ||||||
|  |                     dataType: "json", | ||||||
|  |                     timeout: constants.AJAX_TIMEOUT | ||||||
|  |                 }).done(function(blog) { | ||||||
|  |                     blogId = blog.id; | ||||||
|  |                     task.chain(uploadPage); | ||||||
|  |                 }).fail(function(jqXHR) { | ||||||
|  |                     var error = { | ||||||
|  |                         code: jqXHR.status, | ||||||
|  |                         message: jqXHR.statusText | ||||||
|  |                     }; | ||||||
|  |                     // Handle error
 | ||||||
|  |                     if(error.code === 404) { | ||||||
|  |                         error = 'Blog "' + blogUrl + '" not found on Blogger.|removePublish'; | ||||||
|  |                     } | ||||||
|  |                     handleError(error, task); | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |             task.chain(getBlogId); | ||||||
|  |         }); | ||||||
|  |         task.onSuccess(function() { | ||||||
|  |             callback(undefined, blogId, pageId); | ||||||
|  |         }); | ||||||
|  |         task.onError(function(error) { | ||||||
|  |             callback(error); | ||||||
|  |         }); | ||||||
|  |         task.enqueue(); | ||||||
|  |     }; | ||||||
|      |      | ||||||
|     // Use by Google's client.js
 |     // Use by Google's client.js
 | ||||||
|     window.delayedFunction = undefined; |     window.delayedFunction = undefined; | ||||||
|  | |||||||
| @ -683,7 +683,7 @@ | |||||||
| 							</div> | 							</div> | ||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 					<div class="form-group modal-publish-blogger"> | 					<div class="form-group modal-publish-blogger modal-publish-bloggerpage"> | ||||||
| 						<label class="col-lg-4 control-label" | 						<label class="col-lg-4 control-label" | ||||||
| 							for="input-publish-blogger-url">Blog URL</label> | 							for="input-publish-blogger-url">Blog URL</label> | ||||||
| 						<div class="col-lg-7"> | 						<div class="col-lg-7"> | ||||||
| @ -720,6 +720,15 @@ | |||||||
| 								class="form-control"> | 								class="form-control"> | ||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
|  | 					<div | ||||||
|  | 						class="form-group modal-publish-bloggerpage"> | ||||||
|  | 						<label class="col-lg-4 control-label" for="input-publish-pageid">Update | ||||||
|  | 							existing page ID (optional)</label> | ||||||
|  | 						<div class="col-lg-7"> | ||||||
|  | 							<input type="text" id="input-publish-pageid" placeholder="PageID" | ||||||
|  | 								class="form-control"> | ||||||
|  | 						</div> | ||||||
|  | 					</div> | ||||||
| 					<div class="form-group modal-publish-dropbox"> | 					<div class="form-group modal-publish-dropbox"> | ||||||
| 						<label class="col-lg-4 control-label" | 						<label class="col-lg-4 control-label" | ||||||
| 							for="input-publish-dropbox-path">File path</label> | 							for="input-publish-dropbox-path">File path</label> | ||||||
| @ -799,6 +808,18 @@ | |||||||
|                     target="_blank">YAML front matter</a> to specify the title and the tags/labels of your publication.</p> |                     target="_blank">YAML front matter</a> to specify the title and the tags/labels of your publication.</p> | ||||||
|                     <p><b>Interpreted variables:</b> <code>title</code>, <code>tags</code>, <code>published</code>, <code>date</code>.</p> |                     <p><b>Interpreted variables:</b> <code>title</code>, <code>tags</code>, <code>published</code>, <code>date</code>.</p> | ||||||
| 				</blockquote> | 				</blockquote> | ||||||
|  | 				<blockquote class="front-matter-info modal-publish-bloggerpage"> | ||||||
|  |                     <p><b>Tip:</b> You can use a | ||||||
|  |                     <a href="http://jekyllrb.com/docs/frontmatter/" | ||||||
|  |                     target="_blank">YAML front matter</a> to specify the title of your page.</p> | ||||||
|  |                     <p><b>Interpreted variables:</b> <code>title</code>.</p> | ||||||
|  | 				</blockquote> | ||||||
|  | 				<blockquote class="url-info modal-publish-bloggerpage"> | ||||||
|  |                     <p><b>About URL:</b> For newly created page , Blogger API will append a generated number to the url like <code>about-me-1234.html</code>, if you deeply care about your URL naming, you should first create the page on Blogger and then update them with StackEdit specifying the pageId when publishing. | ||||||
|  |                     </p> | ||||||
|  |                     <p><b>About page visibility:</b> Blogger API does not respect published status for pages.When publishing the page to Blogger, the page will be <strong>live</strong> but not added to the page listing. You should arrange the page listing from Blogger dashboard. | ||||||
|  |                     </p> | ||||||
|  | 				</blockquote> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div class="modal-footer"> | 			<div class="modal-footer"> | ||||||
| 				<a href="#" class="btn btn-default" data-dismiss="modal">Cancel</a> | 				<a href="#" class="btn btn-default" data-dismiss="modal">Cancel</a> | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								public/res/providers/bloggerPageProvider.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								public/res/providers/bloggerPageProvider.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | define([ | ||||||
|  |     "underscore", | ||||||
|  |     "utils", | ||||||
|  |     "classes/Provider", | ||||||
|  |     "helpers/googleHelper" | ||||||
|  | ], function(_, utils, Provider, googleHelper) { | ||||||
|  | 
 | ||||||
|  |     var bloggerPageProvider = new Provider("bloggerpage", "Blogger Page"); | ||||||
|  |     bloggerPageProvider.defaultPublishFormat = "html"; | ||||||
|  |     bloggerPageProvider.publishPreferencesInputIds = [ | ||||||
|  |         "blogger-url" | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     bloggerPageProvider.publish = function(publishAttributes, frontMatter, title, content, callback) { | ||||||
|  |         var isDraft = frontMatter && frontMatter.published === false; | ||||||
|  |         var publishDate = frontMatter && frontMatter.date; | ||||||
|  |         googleHelper.uploadBloggerPage(publishAttributes.blogUrl, publishAttributes.blogId, publishAttributes.pageId, isDraft, publishDate, title, content, function(error, blogId, pageId) { | ||||||
|  |             if(error) { | ||||||
|  |                 callback(error); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             publishAttributes.blogId = blogId; | ||||||
|  |             publishAttributes.pageId = pageId; | ||||||
|  |             callback(); | ||||||
|  |         }); | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     bloggerPageProvider.newPublishAttributes = function(event) { | ||||||
|  |         var publishAttributes = {}; | ||||||
|  |         var blogUrl = utils.getInputTextValue("#input-publish-blogger-url", event); | ||||||
|  |         if(blogUrl !== undefined) { | ||||||
|  |             publishAttributes.blogUrl = utils.checkUrl(blogUrl); | ||||||
|  |         } | ||||||
|  |         publishAttributes.pageId = utils.getInputTextValue("#input-publish-pageid"); | ||||||
|  |         if(event.isPropagationStopped()) { | ||||||
|  |             return undefined; | ||||||
|  |         } | ||||||
|  |         return publishAttributes; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     return bloggerPageProvider; | ||||||
|  | }); | ||||||
| @ -12,6 +12,7 @@ define([ | |||||||
|     "classes/Provider", |     "classes/Provider", | ||||||
|     "classes/AsyncTask", |     "classes/AsyncTask", | ||||||
|     "providers/bloggerProvider", |     "providers/bloggerProvider", | ||||||
|  |     "providers/bloggerPageProvider", | ||||||
|     "providers/dropboxProvider", |     "providers/dropboxProvider", | ||||||
|     "providers/gistProvider", |     "providers/gistProvider", | ||||||
|     "providers/githubProvider", |     "providers/githubProvider", | ||||||
|  | |||||||
| @ -346,7 +346,7 @@ kbd { | |||||||
| 	background-position: -54px 0; | 	background-position: -54px 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .icon-provider-blogger { | .icon-provider-blogger, .icon-provider-bloggerpage { | ||||||
| 	background-position: -72px 0; | 	background-position: -72px 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 wiibaa
						wiibaa