159 lines
4.7 KiB
JavaScript
159 lines
4.7 KiB
JavaScript
// ERPNext - web based ERP (http://erpnext.com)
|
|
// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
// question toolbar
|
|
// contains - voting widget / tag list and user info / timestamp
|
|
// By XXXXXX on YYYYY
|
|
|
|
KBItemToolbar = function(args, kb) {
|
|
$.extend(this, args);
|
|
var me = this;
|
|
this.make = function() {
|
|
this.wrapper = $a(this.parent, 'div', '', {});
|
|
this.line1 = $a(this.wrapper, 'div', '', {color: '#888', fontSize:'11px', margin:'7px 0px'});
|
|
this.make_timestamp();
|
|
this.make_answers();
|
|
if(this.with_tags)
|
|
this.make_tags();
|
|
this.setup_del();
|
|
}
|
|
|
|
this.make_timestamp = function() {
|
|
this.line1.innerHTML = repl('By %(name)s | %(when)s', {
|
|
name: wn.utils.full_name(this.det.first_name, this.det.last_name),
|
|
when: wn.datetime.comment_when(this.det.modified)
|
|
});
|
|
|
|
// allow system manager to delete questions / answers
|
|
if(has_common(user_roles, ['Administrator', 'System Manager'])) {
|
|
this.line1.innerHTML += ' | <a style="cursor:pointer;"\
|
|
class="del-link">delete</a>';
|
|
}
|
|
}
|
|
|
|
this.make_answers = function() {
|
|
if(this.doctype=='Question') {
|
|
if(this.det.answers==0) {
|
|
this.line1.innerHTML += ' | no answers';
|
|
} else if(this.det.answers==1) {
|
|
this.line1.innerHTML += ' | 1 answer';
|
|
} else {
|
|
this.line1.innerHTML += ' | '+this.det.answers+' answers';
|
|
}
|
|
}
|
|
}
|
|
|
|
this.make_tags = function() {
|
|
this.line1.innerHTML += ' | '
|
|
this.tags_area = $a(this.line1, 'span', 'kb-tags')
|
|
this.tags = new TagList(this.tags_area,
|
|
this.det._user_tags && (this.det._user_tags.split(',')),
|
|
this.doctype, this.det.name, 0, kb.set_tag_filter)
|
|
}
|
|
|
|
this.setup_del = function() {
|
|
$(this.line1).find('.del-link').click(function() {
|
|
console.log(1);
|
|
this.innerHTML = 'deleting...';
|
|
this.disabled = 1;
|
|
$c_page('utilities', 'questions', 'delete', {
|
|
dt: me.doctype, dn: me.det.name}, function(r,rt) {
|
|
// reload the list
|
|
kb.list.run()
|
|
});
|
|
});
|
|
}
|
|
|
|
this.make();
|
|
}
|
|
|
|
|
|
// displays an editable text,
|
|
// needs parent, text, disp_class, inp_class
|
|
// dt, dn
|
|
|
|
EditableText = function(args) {
|
|
$.extend(this, args);
|
|
var me = this;
|
|
|
|
me.$w = $(repl('<div class="ed-text">\
|
|
<div class="ed-text-display %(disp_class)s"></div>\
|
|
<a class="ed-text-edit" style="cursor: pointer; float: right; margin-top: -16px;">[edit]</a>\
|
|
<textarea class="ed-text-input %(inp_class)s hide"></textarea>\
|
|
<div class="help hide"><br>Formatted as <a href="#markdown-reference"\
|
|
target="_blank">markdown</a></div>\
|
|
<button class="btn btn-info hide ed-text-save">Save</button>\
|
|
<a class="ed-text-cancel hide" style="cursor: pointer;">Cancel</a>\
|
|
</div>', args)).appendTo(me.parent);
|
|
|
|
this.set_display = function(txt) {
|
|
var display_wrapper = me.$w.find('.ed-text-display');
|
|
display_wrapper.html(wn.markdown(txt));
|
|
display_wrapper.find("a").attr("target", "blank");
|
|
me.text = txt;
|
|
}
|
|
|
|
this.set_display(me.text);
|
|
|
|
if(me.height) me.$w.find('.ed-text-input').css('height', me.height);
|
|
|
|
// edit
|
|
me.$w.find('.ed-text-edit').click(function() {
|
|
me.$w.find('.ed-text-input').val(me.text);
|
|
me.show_as_input();
|
|
})
|
|
|
|
// save button - save the new text
|
|
me.$w.find('.ed-text-save').click(
|
|
function() {
|
|
var v = me.$w.find('.ed-text-input').val();
|
|
// check if text is written
|
|
if(!v) {
|
|
msgprint('Please write something!');
|
|
return;
|
|
}
|
|
var btn = this;
|
|
$(btn).set_working();
|
|
$c_page('utilities', 'question_view', 'update_item', {
|
|
dt: me.dt, dn: me.dn, fn: me.fieldname, text: v
|
|
},
|
|
function(r) {
|
|
$(btn).done_working();
|
|
if(r.exc) {msgprint(r.exc); return; }
|
|
me.set_display(v);
|
|
me.show_as_text();
|
|
});
|
|
}
|
|
)
|
|
|
|
|
|
// cancel button
|
|
me.$w.find('.ed-text-cancel').click(function() {
|
|
me.show_as_text();
|
|
})
|
|
|
|
this.show_as_text = function() {
|
|
me.$w.find('.ed-text-display, .ed-text-edit').toggle(true);
|
|
me.$w.find('.ed-text-input, .ed-text-save, .ed-text-cancel, .help').toggle(false);
|
|
}
|
|
|
|
this.show_as_input = function() {
|
|
me.$w.find('.ed-text-display, .ed-text-edit').toggle(false);
|
|
me.$w.find('.ed-text-input, .ed-text-save, .ed-text-cancel, .help').toggle(true);
|
|
}
|
|
|
|
}
|