Просмотр исходного кода

Merge branch 'master-redesign' of github.com:sharelatex/web-sharelatex into master-redesign

James Allen 12 лет назад
Родитель
Сommit
7318f4c2d3

+ 2 - 0
services/web/app/views/project/editor.jade

@@ -59,6 +59,7 @@ block content
 						include ./editor/editor
 						include ./editor/binary-file
 						include ./editor/track-changes
+						include ./editor/publish-template
 
 			.ui-layout-east
 				include ./editor/chat
@@ -101,6 +102,7 @@ block content
 				}
 			}
 		};
+		window.project_description = "#{project.description}"
 
 	script(type='text/javascript').
 		ga('send', 'event', 'editor-interaction', 'editor-opened')

+ 7 - 0
services/web/app/views/project/editor/left-menu.jade

@@ -110,6 +110,13 @@ aside#left-menu.full-size(
 				)
 					option(value="pdfjs") Built-In
 					option(value="native") Native
+	h4 Publish
+	ul.list-unstyled.nav(ng-controller="TemplatesController")
+		li
+			a(ng-click="openPublishTemplateModal()")
+				i.fa.fa-list-alt.fa-fw 
+				|   Publish as Template
+
 
 #left-menu-mask(
 	ng-show="ui.leftMenuShown",

+ 45 - 0
services/web/app/views/project/editor/publish-template.jade

@@ -0,0 +1,45 @@
+script(type="text/ng-template", id="publishProjectAsTemplateModalTemplate")
+	.modal-header
+		button.close(
+			type="button"
+			data-dismiss="modal"
+			ng-click="cancel()"
+		) ×
+		h3 Publish as Template
+	.modal-body.modal-body-share
+		form()
+			label(for='Description') Template Description
+			.form-group
+				textarea.form-control(
+				rows=5,
+				name='Description',
+				ng-model="template.description",
+				ng-blur="updateProjectDescription()",
+				value=""
+			)
+		div(ng-show="publishedDetails.exists").text-center.publishedDetails
+			|  Your project was last published at 
+			strong {{publishedDetails.publishedDate}}. 
+			a(ng-href="{{publishedDetails.canonicalUrl}}") View it in template gallery.
+
+
+
+	.modal-footer
+		button.btn.btn-default(
+			ng-click="cancel()",
+			ng-disabled="state.publishInflight"
+		) Cancel
+		button.btn.btn-info(
+			ng-click="unpublishTemplate()",
+			ng-disabled="state.unpublishInflight",
+			ng-show="publishedDetails.exists"
+		) 
+			span(ng-show="!state.unpublishInflight") Unpublish
+			span(ng-show="state.unpublishInflight") Unpublishing...
+		button.btn.btn-primary(
+			ng-click="publish()",
+			ng-disabled="state.publishInflight"
+		)
+			span(ng-show="!state.publishInflight && !publishedDetails.exists") Publish
+			span(ng-show="!state.publishInflight && publishedDetails.exists") Republish
+			span(ng-show="state.publishInflight") Publishing...

+ 1 - 0
services/web/public/coffee/ide.coffee

@@ -11,6 +11,7 @@ define [
 	"ide/settings/index"
 	"ide/share/index"
 	"ide/chat/index"
+	"ide/templates/index"
 	"ide/directives/layout"
 	"ide/services/ide"
 	"directives/focus"

+ 55 - 0
services/web/public/coffee/ide/templates/controllers/TemplatesController.coffee

@@ -0,0 +1,55 @@
+define [
+	"base"
+], (App) ->
+	App.controller "TemplatesController", ($scope, $modal, ide) ->
+
+		$scope.openPublishTemplateModal = () ->
+			console.log "open"
+			$modal.open {
+				templateUrl: "publishProjectAsTemplateModalTemplate"
+				controller: "PublishProjectAsTemplateModalController"
+				resolve:
+					diff: () -> $scope.trackChanges.diff
+			}
+
+	App.controller "PublishProjectAsTemplateModalController", ($scope, $modalInstance, diff, ide) ->
+		user_id = window.user.id #TODO this is not correct, it needs to be the owners id
+		$scope.template =
+			description: window.project_description
+		$scope.publishedDetails =
+			exists:false
+
+		$scope.state =
+			publishInflight: false
+			unpublishInflight: false
+
+		refreshPublishedStatus = ->
+			ide.socket.emit "getPublishedDetails", user_id, (err, data)->
+				console.log "got published details"
+				$scope.publishedDetails = data
+				$scope.publishedDetails.publishedDate = moment(data.publishedDate).format("Do MMM YYYY, h:mm a")
+
+		refreshPublishedStatus()
+
+		$scope.updateProjectDescription = ->
+			description = $scope.template.description
+			if description?
+				ide.socket.emit 'updateProjectDescription', description, () => 
+					console.log "updated"
+
+		$scope.publish = ->
+			$scope.state.publishInflight = true
+			ide.socket.emit 'publishProjectAsTemplate', user_id, (error, docLines, version) =>
+				console.log "published"
+				refreshPublishedStatus()
+				$scope.state.publishInflight = false
+
+		$scope.unpublishTemplate = ->
+			$scope.state.unpublishInflight = true
+			ide.socket.emit 'unPublishProjectAsTemplate', user_id, (error, docLines, version) =>
+				console.log "unpublished"
+				refreshPublishedStatus()
+				$scope.state.unpublishInflight = false
+
+		$scope.cancel = () ->
+			$modalInstance.dismiss()

+ 4 - 0
services/web/public/coffee/ide/templates/index.coffee

@@ -0,0 +1,4 @@
+define [
+	"ide/templates/controllers/TemplatesController"
+], () ->
+			

+ 1 - 0
services/web/public/stylesheets/app/editor.less

@@ -7,6 +7,7 @@
 @import "./editor/chat.less";
 @import "./editor/binary-file.less";
 @import "./editor/search.less";
+@import "./editor/publish-template.less";
 
 .full-size {
 	position: absolute;

+ 3 - 0
services/web/public/stylesheets/app/editor/publish-template.less

@@ -0,0 +1,3 @@
+.publishedDetails {
+	color: @gray;
+}

+ 3 - 2
services/web/test/UnitTests/coffee/Chat/ChatControllerTests.coffee

@@ -68,7 +68,8 @@ describe "ChatController", ->
 		it "should return the messages", (done)->
 			messages = [{content:"hello"}]
 			@ChatHandler.getMessages.callsArgWith(2, null, messages)
-			@ChatController.getMessages @project_id, @query, (err, passedMessages)=>
-				passedMessages.should.deep.equal messages
+			@res.send = (sentMessages)=>
+				sentMessages.should.deep.equal messages
 				done()
+			@ChatController.getMessages @req, @res