diff --git a/services/web/app/views/project/editor.jade b/services/web/app/views/project/editor.jade index 67d73c83f1..1ba1a3e367 100644 --- a/services/web/app/views/project/editor.jade +++ b/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') diff --git a/services/web/app/views/project/editor/left-menu.jade b/services/web/app/views/project/editor/left-menu.jade index 2bd16d602b..ea1f141671 100644 --- a/services/web/app/views/project/editor/left-menu.jade +++ b/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", diff --git a/services/web/app/views/project/editor/publish-template.jade b/services/web/app/views/project/editor/publish-template.jade new file mode 100644 index 0000000000..0fbd07618c --- /dev/null +++ b/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... \ No newline at end of file diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 8b5913a18e..9ec93d9890 100644 --- a/services/web/public/coffee/ide.coffee +++ b/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" diff --git a/services/web/public/coffee/ide/templates/controllers/TemplatesController.coffee b/services/web/public/coffee/ide/templates/controllers/TemplatesController.coffee new file mode 100644 index 0000000000..e71e4eab42 --- /dev/null +++ b/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() diff --git a/services/web/public/coffee/ide/templates/index.coffee b/services/web/public/coffee/ide/templates/index.coffee new file mode 100644 index 0000000000..10d7872e9c --- /dev/null +++ b/services/web/public/coffee/ide/templates/index.coffee @@ -0,0 +1,4 @@ +define [ + "ide/templates/controllers/TemplatesController" +], () -> + diff --git a/services/web/public/stylesheets/app/editor.less b/services/web/public/stylesheets/app/editor.less index 9e9f5e380b..9a72122669 100644 --- a/services/web/public/stylesheets/app/editor.less +++ b/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; diff --git a/services/web/public/stylesheets/app/editor/publish-template.less b/services/web/public/stylesheets/app/editor/publish-template.less new file mode 100644 index 0000000000..b57d8dccdc --- /dev/null +++ b/services/web/public/stylesheets/app/editor/publish-template.less @@ -0,0 +1,3 @@ +.publishedDetails { + color: @gray; +}