Skip to content

Commit

Permalink
Merge branch 'release/0.2.16.11'
Browse files Browse the repository at this point in the history
  • Loading branch information
lnds committed Jan 10, 2016
2 parents 04f9043 + 70f1d99 commit 20148cc
Show file tree
Hide file tree
Showing 357 changed files with 30,519 additions and 19,145 deletions.
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Change Log

## [Unreleased]
### Added
- User Administration
- Profile Editing

## [0.2.16.11] - 2016-01-10
### Changed
- Medium Editor 5.12.0
- Add more buttons to toolbar.
- Medium Insert Plugin 2.1.1
- Play Framework Version now is 2.4.3
- Now Fontawesome are included using bower

### Removed
- Tables there's a bug, so tables are gone for now.

### Added
- Start using CHANGELOG.md
- Twitter Cards



[0.2.17.9]: https://github.com/lnds/prosa/compare/0.2.15.8...02.17.9
[0.2.15.8]: https://github.com/lnds/prosa/compare/0.2.13.3...0.2.15.8
[0.2.13.3]: https://github.com/lnds/prosa/compare/0.2.11.1...0.2.13.3
[0.2.12.2]: https://github.com/lnds/prosa/compare/0.2.12.2...0.2.11.2
[0.2.11.1]: https://github.com/lnds/prosa/compare/0.1.7...0.2.11.1
[0.1.7]: https://github.com/lnds/prosa/compare/0.1.6...0.1.7
[0.1.6]: https://github.com/lnds/prosa/compare/0.1.5...0.1.6
[0.1.5]: https://github.com/lnds/prosa/releases/tag/0.1.5
4 changes: 2 additions & 2 deletions LEEME.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ Uso el siguiente esquema

Major.Minor.Ticket.Build

Major: es el numero de versión, 0 significa que está en etapa de pre-release (etapas alpha y beta), sólo cambia cuando se produce un cambio que es incompatible hacia atrás
Minor: indica un cambio compatible con versiones anteriores, denota la incorporación de una funcionalidad nueva. Actualmente uso el numero de sprint (ver más abajo)
Major: es el numero de versión, 0 significa que está en etapa de pre-release (etapas alpha y beta), sólo cambia cuando se produce un cambio que es incompatible hacia atrás (o pasamos a la versión 1).
Minor: Actualmente uso el numero de sprint (ver más abajo).
Ticket: número del ticket resuelto en essa versión.
Build: un número incremental que vuelve a cero cuando se incrementa Minor. Normalmente un incremento en este numero implica un bugfix.

Expand Down
14 changes: 9 additions & 5 deletions app/controllers/BlogsController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ import tools.PostAux
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

case class BlogData(id:Option[String], name:String,alias:String,description:String,image:Option[String],logo:Option[String],url:Option[String], disqus:Option[String], googleAnalytics:Option[String], useAvatarAsLogo:Option[Boolean], status:Int)
case class BlogData(id:Option[String], name:String,alias:String,description:String,image:Option[String],
logo:Option[String],url:Option[String], disqus:Option[String], googleAnalytics:Option[String],
useAvatarAsLogo:Option[Boolean], status:Int, twitter:Option[String])

class BlogsController @Inject() (val messagesApi: MessagesApi, dbConfigProvider: DatabaseConfigProvider) extends Controller with TokenValidateElement with AuthElement with AuthConfigImpl with I18nSupport {
class BlogsController @Inject() (val messagesApi: MessagesApi, dbConfigProvider: DatabaseConfigProvider)
extends Controller with TokenValidateElement with AuthElement with AuthConfigImpl with I18nSupport {


val blogForm = Form(
Expand All @@ -29,7 +32,8 @@ class BlogsController @Inject() (val messagesApi: MessagesApi, dbConfigProvider:
"disqus" -> optional(text),
"google_analytics" -> optional(text),
"use_avatar_as_logo" -> optional(boolean),
"status" -> number(min=BlogStatus.INACTIVE.id, max=BlogStatus.PUBLISHED.id)
"status" -> number(min=BlogStatus.INACTIVE.id, max=BlogStatus.PUBLISHED.id),
"twitter" -> optional(text)
)
(BlogData.apply)(BlogData.unapply)
)
Expand All @@ -50,7 +54,7 @@ class BlogsController @Inject() (val messagesApi: MessagesApi, dbConfigProvider:
case None =>
Future.successful(Redirect(routes.BlogsGuestController.index()).flashing("error" -> Messages("blogs.error.not_found")))
case Some(blog) =>
val form = blogForm.fill(BlogData(Some(blog.id), blog.name, blog.alias, blog.description, blog.image, blog.logo, blog.url, blog.disqus, blog.googleAnalytics, blog.useAvatarAsLogo, blog.status.id))
val form = blogForm.fill(BlogData(Some(blog.id), blog.name, blog.alias, blog.description, blog.image, blog.logo,blog.url, blog.disqus, blog.googleAnalytics, blog.useAvatarAsLogo, blog.status.id, blog.twitter))
Authors.findById(blog.owner).map {
case None =>
Redirect(routes.BlogsGuestController.index()).flashing("error" -> Messages("blogs.error.not_found"))
Expand All @@ -66,7 +70,7 @@ class BlogsController @Inject() (val messagesApi: MessagesApi, dbConfigProvider:
blogData =>
Blogs.findByAlias(blogData.alias).flatMap {
case None =>
Blogs.create(loggedIn, blogData.name, blogData.alias, blogData.description, blogData.image, blogData.logo, blogData.url, blogData.disqus, blogData.googleAnalytics, blogData.useAvatarAsLogo).map { i =>
Blogs.create(loggedIn, blogData.name, blogData.alias, blogData.description, blogData.image, blogData.logo, blogData.url, blogData.disqus, blogData.googleAnalytics, blogData.useAvatarAsLogo, blogData.twitter).map { i =>
Redirect(routes.BlogsGuestController.index()).flashing("success" -> Messages("blogs.success.created"))
}
case Some(blog) =>
Expand Down
11 changes: 7 additions & 4 deletions app/models/Authors.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ case class Author(
password:String,
permission: String,
fullname:Option[String],
bio:Option[String]
bio:Option[String],
twitter:Option[String]
) extends Visitor with Identifiable


Expand All @@ -40,8 +41,9 @@ class Authors(tag:Tag) extends Table[Author](tag, "author") with HasId {
def permission = column[String]("permission")
def fullname = column[Option[String]]("fullname")
def bio = column[Option[String]]("bio")
def twitter = column[Option[String]]("twitter_handle")

def * = (id,nickname,email,password,permission,fullname,bio) <> (Author.tupled, Author.unapply)
def * = (id,nickname,email,password,permission,fullname,bio, twitter) <> (Author.tupled, Author.unapply)

}

Expand All @@ -65,9 +67,10 @@ object Authors extends EntityService[Author] {
def findByNickname(nickname: String) : Future[Option[Author]] =
dbConfig.db.run(authors.filter(a => a.nickname === nickname).result.headOption)

def create(nickname:String, email:String, password:String, permission:String)(implicit s:Session) = {
def create(nickname:String, email:String, password:String, permission:String, twitter:Option[String]) : Future[Option[Author]]= {
val pass = BCrypt.hashpw(password, BCrypt.gensalt())
insert(Author(IdGenerator.nextId(classOf[Author]), nickname, email, pass, permission, None, None))
val author = Author(IdGenerator.nextId(classOf[Author]), nickname, email, pass, permission, None, None, twitter)
insert(author).map { i => Some(author) }
}

def changePassword(author:Author, newPassword:String) : Future[Int] = {
Expand Down
10 changes: 6 additions & 4 deletions app/models/Blogs.scala
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ case class Blog(
disqus:Option[String],
googleAnalytics:Option[String],
status:BlogStatus.Value, //
owner:String
owner:String,
twitter:Option[String]
) extends Identifiable


Expand All @@ -49,8 +50,9 @@ class Blogs(tag:Tag) extends Table[Blog](tag, "blog") with HasId {
def googleAnalytics = column[Option[String]]("google_analytics")
def status = column[BlogStatus.Value]("status")
def owner = column[String]("owner", O.Length(45, varying = true))
def twitter = column[Option[String]]("twitter_handle")

def * = (id,name,alias,description,image, logo, url, useAvatarAsLogo, disqus, googleAnalytics, status, owner) <> (Blog.tupled, Blog.unapply)
def * = (id,name,alias,description,image, logo, url, useAvatarAsLogo, disqus, googleAnalytics, status, owner, twitter) <> (Blog.tupled, Blog.unapply)
}


Expand All @@ -73,8 +75,8 @@ object Blogs extends DbService[Blog]{
def findByAlias(alias:String) : Future[Option[Blog]] =
dbConfig.db.run(blogs.filter(_.alias === alias).result.headOption)

def create(owner:Author, name:String,alias:String,description:String,image:Option[String],logo:Option[String],url:Option[String], disqus:Option[String], gogleAnalytics:Option[String], useAvatarAsLogo:Option[Boolean]) : Future[Int] =
insert(Blog(IdGenerator.nextId(classOf[Blog]), name, alias, description, image, logo, url, useAvatarAsLogo, disqus, gogleAnalytics, BlogStatus.CREATED, owner.id))
def create(owner:Author, name:String,alias:String,description:String,image:Option[String],logo:Option[String],url:Option[String], disqus:Option[String], gogleAnalytics:Option[String], useAvatarAsLogo:Option[Boolean], twitter:Option[String]) : Future[Int] =
insert(Blog(IdGenerator.nextId(classOf[Blog]), name, alias, description, image, logo, url, useAvatarAsLogo, disqus, gogleAnalytics, BlogStatus.CREATED, owner.id, twitter))

def update(blog:Blog, name:String,alias:String,description:String,image:Option[String],logo:Option[String],url:Option[String], disqus:Option[String], gogleAnalytics:Option[String], useAvatarAsLogo:Option[Boolean], status:BlogStatus.Value) : Future[Int] =
update (blog.copy(name=name, alias=alias, useAvatarAsLogo=useAvatarAsLogo, description=description, image=image, logo=logo, url=url, disqus=disqus, googleAnalytics=gogleAnalytics, status=status))
Expand Down
26 changes: 25 additions & 1 deletion app/views/main.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,30 @@
<meta property="og:site_name" content="@blog.name" />
}



<meta name="twitter:card" content="summary_large_image">
@blogOpt.map { blog =>
@blog.twitter.map { twitter =>
<meta name="twitter:site" content="@twitter">
}
}
@authorOpt.map { author =>
@author.twitter.map { twitter =>
<meta name="twitter:creator" content="@twitter">
}
}

<meta property="twitter:title" content="@title">
@descOpt.map { description =>
<meta property="twitter:description" content="@description" />
}

@imgOpt.map { img =>
<meta property="twitter:image" content="@img">
}


<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<meta name="viewport" content="width=device-width, initial-scale=1.0">

Expand All @@ -51,7 +75,7 @@
<link href='http://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>
<link rel='stylesheet' href='@routes.Assets.versioned("bower_components/bootstrap/dist/css/bootstrap.css")'>
<link rel='shortcut icon' type='image/png' href='@routes.Assets.versioned("images/favicon.png")'>
<link rel='stylesheet' href='@routes.Assets.versioned("css/font-awesome.css")'>
<link rel='stylesheet' href='@routes.Assets.versioned("bower_components/font-awesome/css/font-awesome.min.css")'>
<link rel="stylesheet" href='@routes.Assets.versioned("css/dropzone.css")'>
<link rel='stylesheet' href='@routes.Assets.versioned("css/prosa-main.css")'>

Expand Down
127 changes: 86 additions & 41 deletions app/views/main_editor.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,40 @@
<link rel='stylesheet' href='@routes.Assets.versioned("bower_components/bootstrap/dist/css/bootstrap.css")'>

<link rel='shortcut icon' type='image/png' href='@routes.Assets.versioned("images/favicon.png")'>
<link rel='stylesheet' href='@routes.Assets.versioned("css/font-awesome.css")'>
<link rel='stylesheet' href='@routes.Assets.versioned("bower_components/font-awesome/css/font-awesome.min.css")'>
<link rel="stylesheet" href='@routes.Assets.versioned("css/dropzone.css")'>

<link href='http://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href='@routes.Assets.versioned("bower_components/medium-editor/dist/css/medium-editor.min.css")'>
<link rel="stylesheet" href='@routes.Assets.versioned("bower_components/medium-editor/dist/css/themes/default.min.css")' id="medium-editor-theme">
<link rel="stylesheet" href='@routes.Assets.versioned("bower_components/medium-editor-insert-plugin/dist/css/medium-editor-insert-plugin.min.css")'>
<link rel="stylesheet" href='@routes.Assets.versioned("bower_components/medium-editor-tables/dist/css/medium-editor-tables.css")'>
<link rel="stylesheet" href='@routes.Assets.versioned("bower_components/medium-editor-insert-plugin/dist/css/medium-editor-insert-plugin.min.css")' >
<link rel='stylesheet' href='@routes.Assets.versioned("css/prosa-main.css")'>

<script src="@routes.Assets.versioned("bower_components/jquery/dist/jquery.min.js")" ></script>
<script src="@routes.Assets.versioned("bower_components/bootstrap/dist/js/bootstrap.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/medium-editor/dist/js/medium-editor.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/handlebars/handlebars.runtime.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/jquery-sortable/source/js/jquery-sortable-min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/blueimp-file-upload/js/vendor/jquery.ui.widget.js")"></script>
<script src="@routes.Assets.versioned("bower_components/blueimp-file-upload/js/jquery.iframe-transport.js")"></script>
<script src="@routes.Assets.versioned("bower_components/blueimp-file-upload/js/jquery.fileupload.js")"></script>
<script src="@routes.Assets.versioned("bower_components/medium-editor-insert-plugin/dist/js/medium-editor-insert-plugin.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/medium-editor-tables/dist/js/medium-editor-tables.js")"></script>
<script src="@routes.Assets.versioned("js/prosa.js")"> </script>
<script src="@routes.Assets.versioned("js/docs.min.js")"></script>


<style>
body {
padding-top: 50px;
}
.medium-insert-images-slideshow figure {
width: 100%;
}
.medium-insert-images-slideshow figure img {
margin: 0;
}
.medium-insert-images.medium-insert-images-grid.small-grid figure {
width: 10%;
}
@@media (max-width: 750px) {
.medium-insert-images.medium-insert-images-grid.small-grid figure {
width: 20%;
}
}
@@media (max-width: 450px) {
.medium-insert-images.medium-insert-images-grid.small-grid figure {
width: 25%;
}
}
</style>
</head>
<body>
Expand Down Expand Up @@ -70,42 +77,80 @@

</div><!-- #site-canvas -->
</div><!-- #site-wrapper -->
<!-- scripts -->

<!-- scripts -->

<script src="@routes.Assets.versioned("bower_components/jquery/dist/jquery.min.js")" ></script>
<script src="@routes.Assets.versioned("bower_components/blueimp-file-upload/js/vendor/jquery.ui.widget.js")"></script>
<script src="@routes.Assets.versioned("bower_components/blueimp-file-upload/js/jquery.iframe-transport.js")"></script>
<script src="@routes.Assets.versioned("bower_components/blueimp-file-upload/js/jquery.fileupload.js")"></script>
<script src="@routes.Assets.versioned("bower_components/medium-editor/dist/js/medium-editor.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/handlebars/handlebars.runtime.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/jquery-sortable/source/js/jquery-sortable-min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/medium-editor-insert-plugin/dist/js/medium-editor-insert-plugin.min.js")"></script>
<script src="@routes.Assets.versioned("bower_components/bootstrap/dist/js/bootstrap.min.js")"></script>
<script src="@routes.Assets.versioned("js/prosa.js")"> </script>
<script src="@routes.Assets.versioned("js/docs.min.js")"></script>
<script>
$body = document.body;
$('[data-load-image]', $body).each(function() {
ImageLoader.load($(this));
});
</script>
<script>var editor = new MediumEditor('.editor', {
placeholder:'@Messages("placeholders.editor.type_here")',
<script>
var editor = new MediumEditor('.editor', {
buttonLabels: 'fontawesome',
buttons: [
'bold',
'italic',
'underline',
'anchor',
'header1',
'header2',
'quote',
'table',
],
extensions: {
'table': new MediumEditorTable()
}
toolbar: {
buttons: [
'bold',
'italic',
'underline',
'anchor',
'h1',
'h2',
'h3',
'quote',
'pre',
'orderedlist',
'unorderedlist',
'indent',
'outdent',
'justifyLeft',
'justifyCenter',
'justifyRight',
]
},

});
</script>
<script>
$(function(){
$('.editor').mediumInsert({
editor: editor,
addons: {
images: {uploadScript:"@routes.ImagesController.editorUpload"},
embeds: {}

@actions

<script language="javascript">
$('.editor').mediumInsert({
editor: editor,
enabled: true,
addons: {
images: {
label: '<span class="fa fa-camera"></span>',
preview: true, // (boolean) Show an image before it is uploaded (only in browsers that support this feature)
captions: true, // (boolean) Enable captions
captionPlaceholder: 'Type caption for image (optional)', // (string) Caption placeholder
autoGrid: 3,
fileUploadOptions:{
url:"@routes.ImagesController.editorUpload",
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
}
}
})
})
},
embeds: {
label: '<span class="fa fa-youtube-play"></span>',
placeholder: 'Paste a YouTube, Vimeo, Facebook, Twitter or Instagram link and press Enter', // (string) Placeholder displayed when entering URL to embed
captions: false, // (boolean) Enable captions
}
});

</script>
@actions
</body>

</html>
5 changes: 4 additions & 1 deletion app/views/posts_edit.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,10 @@ <h2 class="post-subtitle-cover editable" style="color:darkred" id="post_subtitle
case None => {}
case Some(error) => { <p class="text-danger">@Messages(error.message)</p> }
}
<div class="editor" id="post_content">
<div id="container">
<div class="editor" id="post_content" data-placeholder="@Messages("placeholders.editor.type_here")">
@Html(form("content").value.getOrElse(""))
</div>
</div>
</div>
</div>
Expand Down Expand Up @@ -218,6 +220,7 @@ <h4 class="modal-title" id="modalUnpublishLabel">@Messages("posts.modal.caption.
});

$( function() {
alert("!!!image banner");
var bisrc = $("#banner-image" ).css('background-image');
var rx = /url\((.*)\)/g;
var a = rx.exec(bisrc);
Expand Down
4 changes: 3 additions & 1 deletion app/views/posts_new.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ <h2 class="post-subtitle-cover editable" style="color:darkred" id="post_subtitle
case None => {}
case Some(error) => { <p class="text-danger">@Messages(error.message)</p> }
}
<div class="editor" id="post_content">
<div id="container">
<div class="editor" id="post_content" data-placeholder="@Messages("placeholders.editor.type_here")">
</div>
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ val conf = ConfigFactory.parseFile(new File("conf/application.conf")).resolve()

version := conf.getString("app.version")

lazy val root = (project in file(".")).enablePlugins(PlayScala)
lazy val root = (project in file(".")).enablePlugins(PlayScala).enablePlugins(SbtWeb)

scalaVersion := "2.11.7"

Expand Down
Loading

0 comments on commit 20148cc

Please sign in to comment.