add message to moderation for reject and unpublish
authorymh <ymh.work@gmail.com>
Thu, 05 Mar 2015 13:45:11 +0100
changeset 474 7ec378cc1f8a
parent 473 f469ab22542d
child 475 f14b740cd5f7
add message to moderation for reject and unpublish
src/hdalab/models/renkan.py
src/hdalab/static/hdalab/js/manage.js
src/hdalab/static/hdalab/lib/vex/css/vex-theme-os.css
src/hdalab/static/hdalab/lib/vex/css/vex.css
src/hdalab/static/hdalab/lib/vex/js/vex.combined.min.js
src/hdalab/templates/editorial/manage_renkans.html
src/hdalab/templates/mails/published_renkan.html
src/hdalab/templates/mails/published_renkan.txt
src/hdalab/templates/mails/rejected_renkan.html
src/hdalab/templates/mails/rejected_renkan.txt
src/hdalab/templates/mails/unpublished_renkan.html
src/hdalab/templates/mails/unpublished_renkan.txt
--- a/src/hdalab/models/renkan.py	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/models/renkan.py	Thu Mar 05 13:45:11 2015 +0100
@@ -61,31 +61,33 @@
         app_label = 'hdalab'
 
 MAIL_TEMPLATES = {
-    HdalabRenkan.PUBLISHED: ("mails/published_renkan", "Renkan publié"),
-    HdalabRenkan.REJECTED: ("mails/rejected_renkan", "Renkan rejeté")
+    (HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"),
+    (HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
+    (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"),
 }
 
 
 #TODO put into queue
 def send_renkan_moderation_messages(sender, **kwargs):
     renkan_state = kwargs.get('instance', None)
-    if not renkan_state or renkan_state.to_state not in MAIL_TEMPLATES:
+    if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES:
         return
 
+    template_key = (renkan_state.from_state,renkan_state.to_state)
     msg_txt = ""
     msg_html = ""
     subject = ""
     try:
-        template_name, subject = MAIL_TEMPLATES[renkan_state.to_state]
+        template_name, subject = MAIL_TEMPLATES[template_key]
 #        template = loader.get_template(template_name)
         context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL}
         msg_html = render_to_string(template_name+".txt", context)
         msg_txt = render_to_string(template_name+".html", context)
     except TemplateDoesNotExist:
-        logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[renkan_state.to_state], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state])
+        logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state])
         return
     except Exception as e:
-        logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[renkan_state.to_state], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
+        logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
     
     if msg_txt and msg_html and renkan_state.renkan and renkan_state.renkan.renkan and renkan_state.renkan.renkan.owner and renkan_state.renkan.renkan.owner.email:
         logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
--- a/src/hdalab/static/hdalab/js/manage.js	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/static/hdalab/js/manage.js	Thu Mar 05 13:45:11 2015 +0100
@@ -14,4 +14,47 @@
         });
         
     });
+    
+    
+    $(".renkan-publish-action").mousedown(function(e) {
+        vex.dialog.confirm({
+            message: renkanActionMessages.publish,
+            callback: function(value) {
+                if(value) {
+                    e.target.click();
+                }
+            }
+        });
+        e.preventDefault();
+    });
+    
+    $(".renkan-unpublish-action").mousedown(function(e) {
+        vex.dialog.prompt({
+            message: renkanActionMessages.unpublish,
+            input: "<textarea name=\"vex\" class=\"vex-dialog-prompt-input\" placeholder=\"message\" rows=\"3\" />",
+            callback: function(message) {
+                if(message !== false) {
+                    $('.action-message',$(e.target).parent()).val(message);
+                    e.target.click();
+                }
+            }
+        });
+        e.preventDefault();
+    });
+
+    $(".renkan-reject-action").mousedown(function(e) {
+        vex.dialog.prompt({
+            message: renkanActionMessages.reject,
+            input: "<textarea name=\"vex\" class=\"vex-dialog-prompt-input\" placeholder=\"message\" rows=\"3\" />",
+            callback: function(message) {
+                if(message !== false) {
+                    $('.action-message',$(e.target).parent()).val(message);
+                    e.target.click();
+                }
+            }
+        });
+        e.preventDefault();
+    });
+
+    
 });
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/vex/css/vex-theme-os.css	Thu Mar 05 13:45:11 2015 +0100
@@ -0,0 +1,533 @@
+@keyframes vex-flyin {
+  /* line 25, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+
+  /* line 28, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+}
+
+@-webkit-keyframes vex-flyin {
+  /* line 25, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+
+  /* line 28, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+}
+
+@-moz-keyframes vex-flyin {
+  /* line 25, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+
+  /* line 28, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+}
+
+@-ms-keyframes vex-flyin {
+  /* line 25, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+
+  /* line 28, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+}
+
+@-o-keyframes vex-flyin {
+  /* line 25, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+
+  /* line 28, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+}
+
+@keyframes vex-flyout {
+  /* line 34, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+
+  /* line 37, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+}
+
+@-webkit-keyframes vex-flyout {
+  /* line 34, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+
+  /* line 37, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+}
+
+@-moz-keyframes vex-flyout {
+  /* line 34, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+
+  /* line 37, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+}
+
+@-ms-keyframes vex-flyout {
+  /* line 34, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+
+  /* line 37, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+}
+
+@-o-keyframes vex-flyout {
+  /* line 34, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+    transform: translateY(0);
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -ms-transform: translateY(0);
+    -o-transform: translateY(0);
+  }
+
+  /* line 37, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+    transform: translateY(-40px);
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+  }
+}
+
+@keyframes vex-pulse {
+  /* line 136, ../sass/_keyframes.sass */
+  0% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+
+  /* line 138, ../sass/_keyframes.sass */
+  70% {
+    -webkit-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    -moz-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+  }
+
+  /* line 140, ../sass/_keyframes.sass */
+  100% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+}
+
+@-webkit-keyframes vex-pulse {
+  /* line 136, ../sass/_keyframes.sass */
+  0% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+
+  /* line 138, ../sass/_keyframes.sass */
+  70% {
+    -webkit-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    -moz-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+  }
+
+  /* line 140, ../sass/_keyframes.sass */
+  100% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+}
+
+@-moz-keyframes vex-pulse {
+  /* line 136, ../sass/_keyframes.sass */
+  0% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+
+  /* line 138, ../sass/_keyframes.sass */
+  70% {
+    -webkit-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    -moz-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+  }
+
+  /* line 140, ../sass/_keyframes.sass */
+  100% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+}
+
+@-ms-keyframes vex-pulse {
+  /* line 136, ../sass/_keyframes.sass */
+  0% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+
+  /* line 138, ../sass/_keyframes.sass */
+  70% {
+    -webkit-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    -moz-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+  }
+
+  /* line 140, ../sass/_keyframes.sass */
+  100% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+}
+
+@-o-keyframes vex-pulse {
+  /* line 136, ../sass/_keyframes.sass */
+  0% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+
+  /* line 138, ../sass/_keyframes.sass */
+  70% {
+    -webkit-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    -moz-box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+    box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
+  }
+
+  /* line 140, ../sass/_keyframes.sass */
+  100% {
+    -webkit-box-shadow: inset 0 0 0 300px transparent;
+    -moz-box-shadow: inset 0 0 0 300px transparent;
+    box-shadow: inset 0 0 0 300px transparent;
+  }
+}
+
+/* line 13, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os {
+  padding-top: 160px;
+  padding-bottom: 160px;
+}
+/* line 17, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os.vex-closing .vex-content {
+  animation: vex-flyout 0.5s;
+  -webkit-animation: vex-flyout 0.5s;
+  -moz-animation: vex-flyout 0.5s;
+  -ms-animation: vex-flyout 0.5s;
+  -o-animation: vex-flyout 0.5s;
+  -webkit-backface-visibility: hidden;
+}
+/* line 20, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-content {
+  animation: vex-flyin 0.5s;
+  -webkit-animation: vex-flyin 0.5s;
+  -moz-animation: vex-flyin 0.5s;
+  -ms-animation: vex-flyin 0.5s;
+  -o-animation: vex-flyin 0.5s;
+  -webkit-backface-visibility: hidden;
+}
+/* line 23, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-content {
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  -ms-border-radius: 5px;
+  -o-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: inset 0 1px #a6a6a6, 0 0 0 1px rgba(0, 0, 0, 0.08);
+  -moz-box-shadow: inset 0 1px #a6a6a6, 0 0 0 1px rgba(0, 0, 0, 0.08);
+  box-shadow: inset 0 1px #a6a6a6, 0 0 0 1px rgba(0, 0, 0, 0.08);
+  font-family: "Helvetica Neue", sans-serif;
+  border-top: 20px solid #bbbbbb;
+  background: #f0f0f0;
+  color: #444444;
+  padding: 1em;
+  position: relative;
+  margin: 0 auto;
+  max-width: 100%;
+  width: 450px;
+  font-size: 1.1em;
+  line-height: 1.5em;
+}
+/* line 38, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-content h1, .vex.vex-theme-os .vex-content h2, .vex.vex-theme-os .vex-content h3, .vex.vex-theme-os .vex-content h4, .vex.vex-theme-os .vex-content h5, .vex.vex-theme-os .vex-content h6, .vex.vex-theme-os .vex-content p, .vex.vex-theme-os .vex-content ul, .vex.vex-theme-os .vex-content li {
+  color: inherit;
+}
+/* line 41, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-close {
+  -webkit-border-radius: 0 5px 0 0;
+  -moz-border-radius: 0 5px 0 0;
+  -ms-border-radius: 0 5px 0 0;
+  -o-border-radius: 0 5px 0 0;
+  border-radius: 0 5px 0 0;
+  position: absolute;
+  top: 0;
+  right: 0;
+  cursor: pointer;
+}
+/* line 48, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-close:before {
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  -ms-border-radius: 3px;
+  -o-border-radius: 3px;
+  border-radius: 3px;
+  position: absolute;
+  content: "\00D7";
+  font-size: 26px;
+  font-weight: normal;
+  line-height: 31px;
+  height: 30px;
+  width: 30px;
+  text-align: center;
+  top: 3px;
+  right: 3px;
+  color: #bbbbbb;
+  background: transparent;
+}
+/* line 63, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-close:hover:before, .vex.vex-theme-os .vex-close:active:before {
+  color: #777777;
+  background: #e0e0e0;
+}
+/* line 69, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-form .vex-dialog-message {
+  margin-bottom: 0.5em;
+}
+/* line 72, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-form .vex-dialog-input {
+  margin-bottom: 1em;
+}
+/* line 75, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="week"] {
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  -ms-border-radius: 3px;
+  -o-border-radius: 3px;
+  border-radius: 3px;
+  background: white;
+  width: 100%;
+  padding: 0.25em 0.67em;
+  border: 0;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+  min-height: 2.5em;
+  margin: 0 0 0.25em;
+}
+/* line 87, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
+  -webkit-box-shadow: inset 0 0 0 1px #3288e6;
+  -moz-box-shadow: inset 0 0 0 1px #3288e6;
+  box-shadow: inset 0 0 0 1px #3288e6;
+  outline: none;
+}
+/* line 91, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-form .vex-dialog-buttons {
+  *zoom: 1;
+}
+/* line 38, ../../../../../.rvm/gems/ruby-1.9.3-p194/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
+.vex.vex-theme-os .vex-dialog-form .vex-dialog-buttons:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+/* line 94, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-button {
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  -ms-border-radius: 3px;
+  -o-border-radius: 3px;
+  border-radius: 3px;
+  border: 0;
+  float: right;
+  margin: 0 0 0 0.5em;
+  font-family: inherit;
+  text-transform: uppercase;
+  letter-spacing: 0.1em;
+  font-size: 0.8em;
+  line-height: 1em;
+  padding: 0.75em 2em;
+}
+/* line 106, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-button.vex-last {
+  margin-left: 0;
+}
+/* line 109, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-button:focus {
+  animation: vex-pulse 1.1s infinite;
+  -webkit-animation: vex-pulse 1.1s infinite;
+  -moz-animation: vex-pulse 1.1s infinite;
+  -ms-animation: vex-pulse 1.1s infinite;
+  -o-animation: vex-pulse 1.1s infinite;
+  -webkit-backface-visibility: hidden;
+  outline: none;
+}
+@media (max-width: 568px) {
+  /* line 109, ../sass/vex-theme-os.sass */
+  .vex.vex-theme-os .vex-dialog-button:focus {
+    animation: none;
+    -webkit-animation: none;
+    -moz-animation: none;
+    -ms-animation: none;
+    -o-animation: none;
+    -webkit-backface-visibility: hidden;
+  }
+}
+/* line 118, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-button.vex-dialog-button-primary {
+  background: #3288e6;
+  color: white;
+}
+/* line 122, ../sass/vex-theme-os.sass */
+.vex.vex-theme-os .vex-dialog-button.vex-dialog-button-secondary {
+  background: #e0e0e0;
+  color: #777777;
+}
+
+/* line 126, ../sass/vex-theme-os.sass */
+.vex-loading-spinner.vex-theme-os {
+  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0.5em rgba(0, 0, 0, 0.2);
+  -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0.5em rgba(0, 0, 0, 0.2);
+  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0.5em rgba(0, 0, 0, 0.2);
+  -webkit-border-radius: 100%;
+  -moz-border-radius: 100%;
+  -ms-border-radius: 100%;
+  -o-border-radius: 100%;
+  border-radius: 100%;
+  background: rgba(255, 255, 255, 0.2);
+  width: 0;
+  height: 0;
+  border: 1.2em solid #bbbbbb;
+  border-top-color: #f0f0f0;
+  border-bottom-color: #f0f0f0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/vex/css/vex.css	Thu Mar 05 13:45:11 2015 +0100
@@ -0,0 +1,335 @@
+@keyframes vex-fadein {
+  /* line 9, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+  }
+
+  /* line 11, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes vex-fadein {
+  /* line 9, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+  }
+
+  /* line 11, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+  }
+}
+
+@-moz-keyframes vex-fadein {
+  /* line 9, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+  }
+
+  /* line 11, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+  }
+}
+
+@-ms-keyframes vex-fadein {
+  /* line 9, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+  }
+
+  /* line 11, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+  }
+}
+
+@-o-keyframes vex-fadein {
+  /* line 9, ../sass/_keyframes.sass */
+  0% {
+    opacity: 0;
+  }
+
+  /* line 11, ../sass/_keyframes.sass */
+  100% {
+    opacity: 1;
+  }
+}
+
+@keyframes vex-fadeout {
+  /* line 16, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+  }
+
+  /* line 18, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes vex-fadeout {
+  /* line 16, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+  }
+
+  /* line 18, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+  }
+}
+
+@-moz-keyframes vex-fadeout {
+  /* line 16, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+  }
+
+  /* line 18, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+  }
+}
+
+@-ms-keyframes vex-fadeout {
+  /* line 16, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+  }
+
+  /* line 18, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+  }
+}
+
+@-o-keyframes vex-fadeout {
+  /* line 16, ../sass/_keyframes.sass */
+  0% {
+    opacity: 1;
+  }
+
+  /* line 18, ../sass/_keyframes.sass */
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes vex-rotation {
+  /* line 127, ../sass/_keyframes.sass */
+  0% {
+    transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+  }
+
+  /* line 129, ../sass/_keyframes.sass */
+  100% {
+    transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    -moz-transform: rotate(359deg);
+    -ms-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+  }
+}
+
+@-webkit-keyframes vex-rotation {
+  /* line 127, ../sass/_keyframes.sass */
+  0% {
+    transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+  }
+
+  /* line 129, ../sass/_keyframes.sass */
+  100% {
+    transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    -moz-transform: rotate(359deg);
+    -ms-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+  }
+}
+
+@-moz-keyframes vex-rotation {
+  /* line 127, ../sass/_keyframes.sass */
+  0% {
+    transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+  }
+
+  /* line 129, ../sass/_keyframes.sass */
+  100% {
+    transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    -moz-transform: rotate(359deg);
+    -ms-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+  }
+}
+
+@-ms-keyframes vex-rotation {
+  /* line 127, ../sass/_keyframes.sass */
+  0% {
+    transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+  }
+
+  /* line 129, ../sass/_keyframes.sass */
+  100% {
+    transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    -moz-transform: rotate(359deg);
+    -ms-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+  }
+}
+
+@-o-keyframes vex-rotation {
+  /* line 127, ../sass/_keyframes.sass */
+  0% {
+    transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+  }
+
+  /* line 129, ../sass/_keyframes.sass */
+  100% {
+    transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    -moz-transform: rotate(359deg);
+    -ms-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+  }
+}
+
+/* line 11, ../sass/vex.sass */
+.vex, .vex *, .vex *:before, .vex *:after {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+/* line 14, ../sass/vex.sass */
+.vex {
+  position: fixed;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 1111;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+/* line 25, ../sass/vex.sass */
+.vex-overlay {
+  background: black;
+  filter: alpha(opacity=40);
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+}
+
+/* line 30, ../sass/vex.sass */
+.vex-overlay {
+  animation: vex-fadein 0.5s;
+  -webkit-animation: vex-fadein 0.5s;
+  -moz-animation: vex-fadein 0.5s;
+  -ms-animation: vex-fadein 0.5s;
+  -o-animation: vex-fadein 0.5s;
+  -webkit-backface-visibility: hidden;
+  position: fixed;
+  background: rgba(0, 0, 0, 0.4);
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+/* line 39, ../sass/vex.sass */
+.vex.vex-closing .vex-overlay {
+  animation: vex-fadeout 0.5s;
+  -webkit-animation: vex-fadeout 0.5s;
+  -moz-animation: vex-fadeout 0.5s;
+  -ms-animation: vex-fadeout 0.5s;
+  -o-animation: vex-fadeout 0.5s;
+  -webkit-backface-visibility: hidden;
+}
+
+/* line 42, ../sass/vex.sass */
+.vex-content {
+  animation: vex-fadein 0.5s;
+  -webkit-animation: vex-fadein 0.5s;
+  -moz-animation: vex-fadein 0.5s;
+  -ms-animation: vex-fadein 0.5s;
+  -o-animation: vex-fadein 0.5s;
+  -webkit-backface-visibility: hidden;
+  background: white;
+}
+/* line 46, ../sass/vex.sass */
+.vex.vex-closing .vex-content {
+  animation: vex-fadeout 0.5s;
+  -webkit-animation: vex-fadeout 0.5s;
+  -moz-animation: vex-fadeout 0.5s;
+  -ms-animation: vex-fadeout 0.5s;
+  -o-animation: vex-fadeout 0.5s;
+  -webkit-backface-visibility: hidden;
+}
+
+/* line 49, ../sass/vex.sass */
+.vex-close:before {
+  font-family: Arial, sans-serif;
+  content: "\00D7";
+}
+
+/* line 53, ../sass/vex.sass */
+.vex-dialog-form {
+  margin: 0;
+}
+
+/* line 56, ../sass/vex.sass */
+.vex-dialog-button {
+  -webkit-appearance: none;
+  cursor: pointer;
+}
+
+/* line 60, ../sass/vex.sass */
+.vex-loading-spinner {
+  animation: vex-rotation 0.7s linear infinite;
+  -webkit-animation: vex-rotation 0.7s linear infinite;
+  -moz-animation: vex-rotation 0.7s linear infinite;
+  -ms-animation: vex-rotation 0.7s linear infinite;
+  -o-animation: vex-rotation 0.7s linear infinite;
+  -webkit-backface-visibility: hidden;
+  -webkit-box-shadow: 0 0 1em rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 0 1em rgba(0, 0, 0, 0.1);
+  box-shadow: 0 0 1em rgba(0, 0, 0, 0.1);
+  position: fixed;
+  z-index: 1112;
+  margin: auto;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 2em;
+  width: 2em;
+  background: white;
+}
+
+/* line 76, ../sass/vex.sass */
+body.vex-open {
+  overflow: hidden;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/vex/js/vex.combined.min.js	Thu Mar 05 13:45:11 2015 +0100
@@ -0,0 +1,2 @@
+/*! vex.js, vex.dialog.js 2.2.1 */
+(function(){var a;a=function(a){var b,c;return b=!1,a(function(){var d;return d=(document.body||document.documentElement).style,b=void 0!==d.animation||void 0!==d.WebkitAnimation||void 0!==d.MozAnimation||void 0!==d.MsAnimation||void 0!==d.OAnimation,a(window).bind("keyup.vex",function(a){return 27===a.keyCode?c.closeByEscape():void 0})}),c={globalID:1,animationEndEvent:"animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend",baseClassNames:{vex:"vex",content:"vex-content",overlay:"vex-overlay",close:"vex-close",closing:"vex-closing",open:"vex-open"},defaultOptions:{content:"",showCloseButton:!0,escapeButtonCloses:!0,overlayClosesOnClick:!0,appendLocation:"body",className:"",css:{},overlayClassName:"",overlayCSS:{},contentClassName:"",contentCSS:{},closeClassName:"",closeCSS:{}},open:function(b){return b=a.extend({},c.defaultOptions,b),b.id=c.globalID,c.globalID+=1,b.$vex=a("<div>").addClass(c.baseClassNames.vex).addClass(b.className).css(b.css).data({vex:b}),b.$vexOverlay=a("<div>").addClass(c.baseClassNames.overlay).addClass(b.overlayClassName).css(b.overlayCSS).data({vex:b}),b.overlayClosesOnClick&&b.$vexOverlay.bind("click.vex",function(b){return b.target===this?c.close(a(this).data().vex.id):void 0}),b.$vex.append(b.$vexOverlay),b.$vexContent=a("<div>").addClass(c.baseClassNames.content).addClass(b.contentClassName).css(b.contentCSS).append(b.content).data({vex:b}),b.$vex.append(b.$vexContent),b.showCloseButton&&(b.$closeButton=a("<div>").addClass(c.baseClassNames.close).addClass(b.closeClassName).css(b.closeCSS).data({vex:b}).bind("click.vex",function(){return c.close(a(this).data().vex.id)}),b.$vexContent.append(b.$closeButton)),a(b.appendLocation).append(b.$vex),c.setupBodyClassName(b.$vex),b.afterOpen&&b.afterOpen(b.$vexContent,b),setTimeout(function(){return b.$vexContent.trigger("vexOpen",b)},0),b.$vexContent},getAllVexes:function(){return a("."+c.baseClassNames.vex+':not(".'+c.baseClassNames.closing+'") .'+c.baseClassNames.content)},getVexByID:function(b){return c.getAllVexes().filter(function(){return a(this).data().vex.id===b})},close:function(a){var b;if(!a){if(b=c.getAllVexes().last(),!b.length)return!1;a=b.data().vex.id}return c.closeByID(a)},closeAll:function(){var b;return b=c.getAllVexes().map(function(){return a(this).data().vex.id}).toArray(),(null!=b?b.length:void 0)?(a.each(b.reverse(),function(a,b){return c.closeByID(b)}),!0):!1},closeByID:function(d){var e,f,g,h,i;return f=c.getVexByID(d),f.length?(e=f.data().vex.$vex,i=a.extend({},f.data().vex),g=function(){return i.beforeClose?i.beforeClose(f,i):void 0},h=function(){return f.trigger("vexClose",i),e.remove(),a("body").trigger("vexAfterClose",i),i.afterClose?i.afterClose(f,i):void 0},b?(g(),e.unbind(c.animationEndEvent).bind(c.animationEndEvent,function(){return h()}).addClass(c.baseClassNames.closing)):(g(),h()),!0):void 0},closeByEscape:function(){var b,d,e;return e=c.getAllVexes().map(function(){return a(this).data().vex.id}).toArray(),(null!=e?e.length:void 0)?(d=Math.max.apply(Math,e),b=c.getVexByID(d),b.data().vex.escapeButtonCloses!==!0?!1:c.closeByID(d)):!1},setupBodyClassName:function(){return a("body").bind("vexOpen.vex",function(){return a("body").addClass(c.baseClassNames.open)}).bind("vexAfterClose.vex",function(){return c.getAllVexes().length?void 0:a("body").removeClass(c.baseClassNames.open)})},hideLoading:function(){return a(".vex-loading-spinner").remove()},showLoading:function(){return c.hideLoading(),a("body").append('<div class="vex-loading-spinner '+c.defaultOptions.className+'"></div>')}}},"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):window.vex=a(jQuery)}).call(this),function(){var a;a=function(a,b){var c,d;return null==b?a.error("Vex is required to use vex.dialog"):(c=function(b){var c;return c={},a.each(b.serializeArray(),function(){return c[this.name]?(c[this.name].push||(c[this.name]=[c[this.name]]),c[this.name].push(this.value||"")):c[this.name]=this.value||""}),c},d={},d.buttons={YES:{text:"OK",type:"submit",className:"vex-dialog-button-primary"},NO:{text:"Cancel",type:"button",className:"vex-dialog-button-secondary",click:function(a){return a.data().vex.value=!1,b.close(a.data().vex.id)}}},d.defaultOptions={callback:function(){},afterOpen:function(){},message:"Message",input:'<input name="vex" type="hidden" value="_vex-empty-value" />',value:!1,buttons:[d.buttons.YES,d.buttons.NO],showCloseButton:!1,onSubmit:function(e){var f,g;return f=a(this),g=f.parent(),e.preventDefault(),e.stopPropagation(),g.data().vex.value=d.getFormValueOnSubmit(c(f)),b.close(g.data().vex.id)},focusFirstInput:!0},d.defaultAlertOptions={message:"Alert",buttons:[d.buttons.YES]},d.defaultConfirmOptions={message:"Confirm"},d.open=function(c){var e;return c=a.extend({},b.defaultOptions,d.defaultOptions,c),c.content=d.buildDialogForm(c),c.beforeClose=function(a){return c.callback(a.data().vex.value)},e=b.open(c),c.focusFirstInput&&e.find('input[type="submit"], textarea, input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="email"], input[type="month"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="time"], input[type="url"], input[type="week"]').first().focus(),e},d.alert=function(b){return"string"==typeof b&&(b={message:b}),b=a.extend({},d.defaultAlertOptions,b),d.open(b)},d.confirm=function(b){return"string"==typeof b?a.error("dialog.confirm(options) requires options.callback."):(b=a.extend({},d.defaultConfirmOptions,b),d.open(b))},d.prompt=function(b){var c;return"string"==typeof b?a.error("dialog.prompt(options) requires options.callback."):(c={message:'<label for="vex">'+(b.label||"Prompt:")+"</label>",input:'<input name="vex" type="text" class="vex-dialog-prompt-input" placeholder="'+(b.placeholder||"")+'"  value="'+(b.value||"")+'" />'},b=a.extend({},c,b),d.open(b))},d.buildDialogForm=function(b){var c,e,f;return c=a('<form class="vex-dialog-form" />'),f=a('<div class="vex-dialog-message" />'),e=a('<div class="vex-dialog-input" />'),c.append(f.append(b.message)).append(e.append(b.input)).append(d.buttonsToDOM(b.buttons)).bind("submit.vex",b.onSubmit),c},d.getFormValueOnSubmit=function(a){return a.vex||""===a.vex?"_vex-empty-value"===a.vex?!0:a.vex:a},d.buttonsToDOM=function(c){var d;return d=a('<div class="vex-dialog-buttons" />'),a.each(c,function(e,f){var g;return g=a('<input type="'+f.type+'" />').val(f.text).addClass(f.className+" vex-dialog-button "+(0===e?"vex-first ":"")+(e===c.length-1?"vex-last ":"")).bind("click.vex",function(c){return f.click?f.click(a(this).parents("."+b.baseClassNames.content),c):void 0}),g.appendTo(d)}),d},d)},"function"==typeof define&&define.amd?define(["jquery","vex"],a):"object"==typeof exports?module.exports=a(require("jquery"),require("vex")):window.vex.dialog=a(window.jQuery,window.vex)}.call(this);
\ No newline at end of file
--- a/src/hdalab/templates/editorial/manage_renkans.html	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/templates/editorial/manage_renkans.html	Thu Mar 05 13:45:11 2015 +0100
@@ -11,17 +11,27 @@
     <link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/index.css' %}" />
     <link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/ui-lightness/jquery-ui-1.10.4.min.css' %}" />
     <link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/profile.css' %}" />
+    <link rel="stylesheet" type="text/css" href="{% static 'hdalab/lib/vex/css/vex.css' %}" />
+    <link rel="stylesheet" type="text/css" href="{% static 'hdalab/lib/vex/css/vex-theme-os.css' %}" />
 {% endblock %}
 
 {% block js_import %}
 {{block.super}}
 <script src="{% static 'hdalab/lib/jquery-ui-1.10.4.min.js' %}"></script>
-<script src="{% static 'hdalab/js/manage.js' %}"></script>
+<script src="{% static 'hdalab/lib/vex/js/vex.combined.min.js' %}"></script>
+<script>vex.defaultOptions.className = 'vex-theme-os';</script>
 <script src="{% static 'hdalab/js/renkan-search.js' %}"></script>
 <script type="text/javascript">
     var favorite = {{favorite}};
     initSearch(favorite);
+    
+    var renkanActionMessages = {
+        publish  : '{% trans "Are you sure you want to PUBLISH this renkan ?" %}',
+        unpublish: '{% trans "Are you sure you want to UNPUBLISH this renkan ?" %}',
+        reject   : '{% trans "Are you sure you want to REJECT this renkan ?" %}'
+    };
 </script>
+<script src="{% static 'hdalab/js/manage.js' %}"></script>
 {% endblock %}
 
 {% block main_content %}
@@ -76,9 +86,10 @@
                 <form action="{% url 'renkan_moderate' rk_id=r.rk_id %}" method="post">
                     {% csrf_token %}
                     <input type="hidden" name="next" value="{% url 'manage_renkans' %}" />
-                {% if hr.state == 2 or hr.state == 4 %}<button name="state" value="3" title="{% trans 'publish renkan' %}" class="renkan-basic-action" onclick="return confirm('{% trans "Are you sure you want to PUBLISH this renkan ?" %}');"><span class="ui-icon ui-icon-unlocked"></button>
-                {% else %}<button name="state" title="{% trans 'unpublish renkan' %}" value="1" class="renkan-basic-action" onclick="return confirm('{% trans "Are you sure you want to UNPUBLISH this renkan ?" %}');"><span class="ui-icon ui-icon-locked"></button>{% endif %}
-                {% if hr.state != 4 %}<button name="state" title="{% trans 'reject renkan' %}" value="4" class="renkan-basic-action" onclick="return confirm('{% trans "Are you sure you want to REJECT this renkan ?" %}');" ><span class="ui-icon ui-icon-close"></span></button>{% endif %}
+                    <input type="hidden" name="message" value="" class="action-message"/>
+                {% if hr.state == 2 or hr.state == 4 %}<button name="state" value="3" title="{% trans 'publish renkan' %}" class="renkan-basic-action renkan-publish-action" ><span class="ui-icon ui-icon-unlocked"></button>
+                {% else %}<button name="state" title="{% trans 'unpublish renkan' %}" value="1" class="renkan-basic-action renkan-unpublish-action"><span class="ui-icon ui-icon-locked"></button>{% endif %}
+                {% if hr.state != 4 %}<button name="state" title="{% trans 'reject renkan' %}" value="4" class="renkan-basic-action renkan-reject-action" ><span class="ui-icon ui-icon-close"></span></button>{% endif %}
                 </form>
             </td>
         </tr>
--- a/src/hdalab/templates/mails/published_renkan.html	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/templates/mails/published_renkan.html	Thu Mar 05 13:45:11 2015 +0100
@@ -192,7 +192,7 @@
                 <tr>
                     <td>
                         <p>Bonjour,</p>
-                        <p>Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été publié.</p>
+                        <p>Votre Renkan intitulé "{{ renkan_state.renkan.renkan.title}}"" a été publié.</p>
                         <p>Vous pouvez le retrouver à l'url suivante: <a href="{{WEB_URL}}{% url 'renkan_view' %}?rk_id={{ renkan_state.renkan.renkan.rk_id }}">{{WEB_URL}}{% url 'renkan_view' %}?rk_id={{ renkan_state.renkan.renkan.rk_id }}</a>.</p>
                     </td>
                 </tr>
--- a/src/hdalab/templates/mails/published_renkan.txt	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/templates/mails/published_renkan.txt	Thu Mar 05 13:45:11 2015 +0100
@@ -1,4 +1,4 @@
 Bonjour,
 
-Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été publié.
+Votre Renkan intitulé "{{ renkan_state.renkan.renkan.title}}" a été publié.
 Vous pouvez le retrouver à l'url suivante: {{WEB_URL}}{% url 'renkan_view' %}?rk_id={{ renkan_state.renkan.renkan.rk_id }}
--- a/src/hdalab/templates/mails/rejected_renkan.html	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/templates/mails/rejected_renkan.html	Thu Mar 05 13:45:11 2015 +0100
@@ -192,7 +192,7 @@
                 <tr>
                     <td>
                         <p>Bonjour,</p>
-                        <p>Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été rejeté.</p>
+                        <p>Votre Renkan intitulé "{{renkan_state.renkan.renkan.title}}" a été rejeté.</p>
                         {% if renkan_state.message %}
                         <p>Avec le message suivant : {{ renkan_state.message }}</p>
                         {% endif %}
--- a/src/hdalab/templates/mails/rejected_renkan.txt	Wed Mar 04 15:24:23 2015 +0100
+++ b/src/hdalab/templates/mails/rejected_renkan.txt	Thu Mar 05 13:45:11 2015 +0100
@@ -1,5 +1,5 @@
 Bonjour,
-Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été rejeté.
+Votre Renkan intitulé "{{ renkan_state.renkan.renkan.title}}" a été rejeté.
 {% if renkan_state.message %}
 Avec le message suivant : {{ renkan_state.message }}
 {% endif %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/mails/unpublished_renkan.html	Thu Mar 05 13:45:11 2015 +0100
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<!-- Template from https://github.com/leemunroe/html-email-template -->
+<head>
+<meta name="viewport" content="width=device-width" />
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Renkan dépublié</title>
+<style>
+/* -------------------------------------
+        GLOBAL
+------------------------------------- */
+* {
+    margin: 0;
+    padding: 0;
+    font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
+    font-size: 100%;
+    line-height: 1.6;
+}
+
+img {
+    max-width: 100%;
+}
+
+body {
+    -webkit-font-smoothing: antialiased;
+    -webkit-text-size-adjust: none;
+    width: 100%!important;
+    height: 100%;
+}
+
+
+/* -------------------------------------
+        ELEMENTS
+------------------------------------- */
+a {
+    color: #348eda;
+}
+
+.btn-primary {
+    text-decoration: none;
+    color: #FFF;
+    background-color: #348eda;
+    border: solid #348eda;
+    border-width: 10px 20px;
+    line-height: 2;
+    font-weight: bold;
+    margin-right: 10px;
+    text-align: center;
+    cursor: pointer;
+    display: inline-block;
+    border-radius: 25px;
+}
+
+.btn-secondary {
+    text-decoration: none;
+    color: #FFF;
+    background-color: #aaa;
+    border: solid #aaa;
+    border-width: 10px 20px;
+    line-height: 2;
+    font-weight: bold;
+    margin-right: 10px;
+    text-align: center;
+    cursor: pointer;
+    display: inline-block;
+    border-radius: 25px;
+}
+
+.last {
+    margin-bottom: 0;
+}
+
+.first {
+    margin-top: 0;
+}
+
+.padding {
+    padding: 10px 0;
+}
+
+
+/* -------------------------------------
+        BODY
+------------------------------------- */
+table.body-wrap {
+    width: 100%;
+    padding: 20px;
+}
+
+table.body-wrap .container {
+    border: 1px solid #f0f0f0;
+}
+
+
+/* -------------------------------------
+        FOOTER
+------------------------------------- */
+table.footer-wrap {
+    width: 100%;    
+    clear: both!important;
+}
+
+.footer-wrap .container p {
+    font-size: 12px;
+    color: #666;
+    
+}
+
+table.footer-wrap a {
+    color: #999;
+}
+
+
+/* -------------------------------------
+        TYPOGRAPHY
+------------------------------------- */
+h1, h2, h3 {
+    font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+    line-height: 1.1;
+    margin-bottom: 15px;
+    color: #000;
+    margin: 40px 0 10px;
+    line-height: 1.2;
+    font-weight: 200;
+}
+
+h1 {
+    font-size: 36px;
+}
+h2 {
+    font-size: 28px;
+}
+h3 {
+    font-size: 22px;
+}
+
+p, ul, ol {
+    margin-bottom: 10px;
+    font-weight: normal;
+    font-size: 14px;
+}
+
+ul li, ol li {
+    margin-left: 5px;
+    list-style-position: inside;
+}
+
+/* ---------------------------------------------------
+        RESPONSIVENESS
+
+------------------------------------------------------ */
+
+/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */
+.container {
+    display: block!important;
+    max-width: 600px!important;
+    margin: 0 auto!important; /* makes it centered */
+    clear: both!important;
+}
+
+/* Set the padding on the td rather than the div for Outlook compatibility */
+.body-wrap .container {
+    padding: 20px;
+}
+
+/* This should also be a block element, so that it will fill 100% of the .container */
+.content {
+    max-width: 600px;
+    margin: 0 auto;
+    display: block;
+}
+
+/* Let's make sure tables in the content area are 100% wide */
+.content table {
+    width: 100%;
+}
+
+</style>
+</head>
+
+<body bgcolor="#f6f6f6">
+
+<!-- body -->
+<table class="body-wrap">
+    <tr>
+        <td></td>
+        <td class="container" bgcolor="#FFFFFF">
+
+            <!-- content -->
+            <div class="content">
+            <table>
+                <tr>
+                    <td>
+                        <p>Bonjour,</p>
+                        <p>Votre Renkan intitulé "{{ renkan_state.renkan.renkan.title}}" a été dépublié.</p>
+                        {% if renkan_state.message %}
+                        <p>Avec le message suivant : {{ renkan_state.message }}</p>
+                        {% endif %}
+                        <p></p>
+                    </td>
+                </tr>
+            </table>
+            </div>
+            <!-- /content -->
+            
+        </td>
+        <td></td>
+    </tr>
+</table>
+<!-- /body -->
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/mails/unpublished_renkan.txt	Thu Mar 05 13:45:11 2015 +0100
@@ -0,0 +1,5 @@
+Bonjour,
+Votre Renkan intitulé "{{ renkan_state.renkan.renkan.title}}" a été dépublié.
+{% if renkan_state.message %}
+Avec le message suivant : {{ renkan_state.message }}
+{% endif %}
\ No newline at end of file