diff --git a/frappe/public/css/bootstrap.css b/frappe/public/css/bootstrap.css
index 183dd7fc4b..7e0fb64d27 100644
--- a/frappe/public/css/bootstrap.css
+++ b/frappe/public/css/bootstrap.css
@@ -2537,7 +2537,7 @@ output {
color: #555;
background-color: #fff;
background-image: none;
- border: 1px solid #ccc;
+ border: 1px solid #d1d8dd;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
@@ -3779,8 +3779,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
line-height: 1;
color: #555;
text-align: center;
- background-color: #eee;
- border: 1px solid #ccc;
+ background-color: #f0f4f7;
+ border: 1px solid #d1d8dd;
border-radius: 4px;
}
.input-group-addon.input-sm {
diff --git a/frappe/public/css/desk.css b/frappe/public/css/desk.css
index c787b51e31..460f712ae5 100644
--- a/frappe/public/css/desk.css
+++ b/frappe/public/css/desk.css
@@ -394,3 +394,21 @@ a.badge-hover:active .badge {
.footnote-area {
border-top: 1px solid #d1d8dd;
}
+.file-upload .input-group-addon {
+ color: #8d99a6;
+ font-size: 12px;
+}
+.file-upload .file-upload-or {
+ font-size: 12px;
+ margin: 0px 7px;
+}
+.file-upload .uploaded-filename,
+.file-upload .web-link-wrapper,
+.file-upload .input-upload,
+.file-upload .input-link {
+ display: inline-block;
+ vertical-align: middle;
+}
+.file-upload .uploaded-filename-display {
+ max-width: 194px;
+}
diff --git a/frappe/public/css/slickgrid.css b/frappe/public/css/slickgrid.css
index 23c46cad78..9ac5bbcd19 100644
--- a/frappe/public/css/slickgrid.css
+++ b/frappe/public/css/slickgrid.css
@@ -25,10 +25,13 @@
width: 100%;
min-height: 20px;
}
-.slick-cell {
+.slick-cell,
+.slick-headerrow-column {
font-size: 12px;
- border-color: #d1d8dd !important;
+ border-color: transparent #d1d8dd #d1d8dd transparent !important;
+ border-style: solid;
color: inherit !important;
+ margin-top: -1px;
}
.slick-header-column,
.slick-header-columns {
diff --git a/frappe/public/js/frappe/ui/upload.html b/frappe/public/js/frappe/ui/upload.html
index 530d162ed7..98bf25d8c4 100644
--- a/frappe/public/js/frappe/ui/upload.html
+++ b/frappe/public/js/frappe/ui/upload.html
@@ -1,13 +1,21 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/frappe/public/js/frappe/upload.js b/frappe/public/js/frappe/upload.js
index f81696ad6f..2a09c9a3d8 100644
--- a/frappe/public/js/frappe/upload.js
+++ b/frappe/public/js/frappe/upload.js
@@ -6,14 +6,41 @@ frappe.upload = {
make: function(opts) {
if(!opts.args) opts.args = {};
var $upload = $(frappe.render_template("upload", {opts:opts})).appendTo(opts.parent);
+ var $file_input = $upload.find(".input-upload-file");
- $upload.find(".attach-as-link").click(function() {
- var as_link = $(this).prop("checked");
+ // bind pseudo browse button
+ $upload.find(".btn-browse").on("click",
+ function() { $file_input.click(); });
- $upload.find(".input-link").toggleClass("hide", !as_link);
- $upload.find(".input-upload").toggleClass("hide", as_link);
+ $file_input.on("change", function() {
+ if (this.files.length > 0) {
+ $upload.find(".web-link-wrapper").addClass("hidden");
+
+ var $uploaded_file_display = $(repl('\
+ \
+ \
+
', {filename: this.files[0].name}))
+ .appendTo($upload.find(".uploaded-filename").removeClass("hidden").empty());
+
+ $uploaded_file_display.find(".uploaded-filename-display").on("click", function() {
+ $file_input.click();
+ });
+
+ $uploaded_file_display.find(".uploaded-file-remove").on("click", function() {
+ $file_input.val("");
+ $file_input.trigger("change");
+ });
+
+ } else {
+ $upload.find(".uploaded-filename").addClass("hidden")
+ $upload.find(".web-link-wrapper").removeClass("hidden");
+ }
});
+
if(!opts.btn) {
opts.btn = $('