`).appendTo($dropdown);
if(account.email_id === "Sent Mail")
- divider = false
+ divider = false;
});
$dropdown.find('.new-email-account').click(function() {
@@ -354,7 +355,7 @@ frappe.views.ListSidebar = Class.extend({
// if account is holding one user free plan or
// if account's expiry date within range of 30 days from today's date
- let upgrade_date = frappe.datetime.add_days(get_today(), 30);
+ let upgrade_date = frappe.datetime.add_days(frappe.datetime.get_today(), 30);
if (frappe.boot.limits.users === 1 || upgrade_date >= frappe.boot.limits.expiry) {
let upgrade_box = $(`
List/{doctype}/{last_view} or List
+ const user_settings = frappe.get_user_settings(doctype);
+ frappe.set_route('List', doctype, user_settings.last_view || 'List');
+ return true;
+ }
+ return false;
+ }
+
+ get view_name() {
+ // ListView -> List
+ return this.constructor.name.split('View')[0];
+ }
- frappe.model.with_doctype(doctype, function () {
- if (locals['DocType'][doctype].issingle) {
- frappe.set_re_route('Form', doctype);
+ show() {
+ this.init().then(() => {
+ if (frappe.route_options) {
+ this.set_filters_from_route_options();
+ return;
} else {
- if (!frappe.views.list_view[doctype]) {
- frappe.views.list_view[doctype] = new frappe.views.ListView({
- doctype: doctype,
- parent: me.make_page(true, 'List/' + doctype)
- });
- } else {
- frappe.container.change_to(frappe.views.list_view[doctype].page_name);
- }
- me.set_cur_list();
+ this.refresh();
}
});
- },
- show: function () {
- if(this.re_route_to_view()) {
- return;
- }
- this.set_module_breadcrumb();
- this._super();
- this.set_cur_list();
- cur_list && cur_list.refresh();
- },
- re_route_to_view: function() {
- var route = frappe.get_route();
- var doctype = route[1];
- var last_route = frappe.route_history.slice(-2)[0];
- if (route[0] === 'List' && route.length === 2 && frappe.views.list_view[doctype]) {
- if(last_route && last_route[0]==='List' && last_route[1]===doctype) {
- // last route same as this route, so going back.
- // this happens because #List/Item will redirect to #List/Item/List
- // while coming from back button, the last 2 routes will be same, so
- // we know user is coming in the reverse direction (via back button)
-
- // example:
- // Step 1: #List/Item redirects to #List/Item/List
- // Step 2: User hits "back" comes back to #List/Item
- // Step 3: Now we cannot send the user back to #List/Item/List so go back one more step
- window.history.go(-1);
- } else {
- frappe.views.list_view[doctype].load_last_view();
- }
- return true;
- }
- },
- set_module_breadcrumb: function () {
- if (frappe.route_history.length > 1) {
- var prev_route = frappe.route_history[frappe.route_history.length - 2];
- if (prev_route[0] === 'modules') {
- var doctype = frappe.get_route()[1],
- module = prev_route[1];
- if (frappe.module_links[module] && frappe.module_links[module].includes(doctype)) {
- // save the last page from the breadcrumb was accessed
- frappe.breadcrumbs.set_doctype_module(doctype, module);
+ }
+
+ get view_user_settings() {
+ return this.user_settings[this.view_name] || {};
+ }
+
+ setup_defaults() {
+ super.setup_defaults();
+ // initialize with saved filters
+ const saved_filters = this.view_user_settings.filters;
+ if (saved_filters) {
+ this.filters = saved_filters;
+ } else {
+ // filters in listview_settings
+ const filters = (this.settings.filters || []).map(f => {
+ if (f.length === 3) {
+ f = [this.doctype, f[0], f[1], f[2]];
}
- }
- }
- },
- set_cur_list: function () {
- var route = frappe.get_route();
- cur_list = frappe.container.page && frappe.container.page.list_view;
- if (cur_list && cur_list.doctype !== route[1]) {
- // changing...
- cur_list = null;
+ return f;
+ });
+
+ this.filters = filters;
}
- }
-});
+ // initialize with saved order by
+ this.order_by = this.view_user_settings.order_by || 'modified desc';
+ // buld menu items)
+ this.menu_items = this.menu_items.concat(this.get_menu_items());
-$(document).on('save', function (event, doc) {
- frappe.views.set_list_as_dirty(doc.doctype);
-});
+ this.patch_refresh_and_load_lib();
+ }
-frappe.views.set_list_as_dirty = function (doctype) {
- if (frappe.views.trees[doctype]) {
- frappe.views.trees[doctype].tree.refresh();
+ patch_refresh_and_load_lib() {
+ // throttle refresh for 1s
+ this.refresh = this.refresh.bind(this);
+ this.refresh = frappe.utils.throttle(this.refresh, 1000);
+ this.load_lib = new Promise(resolve => {
+ if (this.required_libs) {
+ frappe.require(this.required_libs, resolve);
+ } else {
+ resolve();
+ }
+ });
+ // call refresh every 5 minutes
+ const interval = 5 * 60 * 1000;
+ setInterval(this.refresh, interval);
}
- var route = frappe.get_route();
- var current_view = route[2] || 'List';
+ set_fields() {
+ // get from user_settings
+ if (this.view_user_settings.fields) {
+ this._fields = this.view_user_settings.fields;
+ return;
+ }
+ // build from meta
+ super.set_fields();
+ }
- var list_renderer = frappe.views.list_renderers[doctype];
- if (list_renderer
- && list_renderer[current_view]
- && list_renderer[current_view].no_realtime) {
- return;
+ setup_page_head() {
+ super.setup_page_head();
+ this.set_primary_action();
}
- var list_page = 'List/' + doctype;
- if (frappe.pages[list_page]) {
- if (frappe.pages[list_page].list_view) {
- if (frappe.pages[list_page].list_view.dirty) {
- // already refreshing...
- return;
- }
- frappe.pages[list_page].list_view.dirty = true;
+ set_primary_action() {
+ if (this.can_create) {
+ this.page.set_primary_action(__('New'), () => {
+ this.make_new_doc();
+ }, 'octicon octicon-plus');
+ } else {
+ this.page.clear_primary_action();
}
}
- if (route[0] === 'List' && route[1] === doctype) {
- setTimeout(function () {
- frappe.pages[list_page].list_view.refresh();
- }, 100);
+
+ make_new_doc() {
+ const doctype = this.doctype;
+ const options = {};
+ this.filter_area.get().forEach(f => {
+ if (f[2] === "=" && frappe.model.is_non_std_field(f[1])) {
+ options[f[1]] = f[3];
+ }
+ });
+ frappe.new_doc(doctype, options);
}
-}
-frappe.views.view_modes = ['List', 'Gantt', 'Kanban', 'Calendar', 'Image', 'Inbox'];
+ setup_view() {
+ this.setup_columns();
+ this.setup_events();
+ this.settings.onload && this.settings.onload(this);
+ }
-frappe.views.ListView = frappe.ui.BaseList.extend({
- init: function (opts) {
- $.extend(this, opts);
+ setup_footnote_area() {
+ const match_rules_list = frappe.perm.get_match_rules(this.doctype);
- if (!frappe.boot.user.all_read.includes(this.doctype)) {
- frappe.show_not_permitted(frappe.get_route_str());
- return;
+ if (match_rules_list.length) {
+ this.$footnote_area =
+ frappe.utils.set_footnote(this.$footnote_area, this.$frappe_list,
+ frappe.render_template('list_permission_footer', {
+ condition_list: match_rules_list
+ }));
}
+ }
- this.is_list_view = true;
- this.page_name = 'List/' + this.doctype;
- this.dirty = true;
- this.tags_shown = false;
-
- this.page_title = __(this.doctype);
- this.page_title =
- (this.page_title.toLowerCase().substr(-4) == 'list') && __(this.page_title)
- || __(this.page_title) + ' ' + __('List');
-
- this.make_page();
- this.setup();
-
- // refresh on init
- this.refresh();
- },
-
- make_page: function () {
- this.parent.list_view = this;
- this.page = this.parent.page;
-
- this.$page = $(this.parent).css({ 'min-height': '400px' });
-
- $(``)
- .appendTo(this.page.main);
-
- this.page.main.addClass('listview-main-section');
- var module = locals.DocType[this.doctype].module;
-
- frappe.breadcrumbs.add(module, this.doctype);
- },
-
- setup: function () {
- this.can_delete = frappe.model.can_delete(this.doctype);
- this.meta = frappe.get_meta(this.doctype);
- this.wrapper = this.$page.find('.frappe-list-area').empty();
- this.allow_delete = true;
-
- this.load_last_view();
- this.setup_view_variables();
-
- this.setup_list_renderer();
- this.init_base_list(false);
- this.list_renderer.set_wrapper();
- this.list_renderer_onload();
-
- this.show_match_help();
- this.init_menu();
- this.init_sort_selector();
- this.init_filters();
- this.set_title();
- this.init_headers();
- },
-
- refresh_surroundings: function() {
- this.init_sort_selector();
- this.init_filters();
- this.set_title();
- this.init_headers();
- this.no_result_message = this.list_renderer.make_no_result()
- },
-
- setup_list_renderer: function () {
- frappe.provide('frappe.views.list_renderers.' + this.doctype);
-
- var list_renderer = frappe.views.list_renderers[this.doctype][this.current_view];
- if (list_renderer) {
- this.list_renderer = list_renderer;
- this.list_renderer.init_settings();
- return;
- }
+ setup_columns() {
+ // setup columns for list view
+ this.columns = [];
+
+ const get_df = frappe.meta.get_docfield.bind(null, this.doctype);
- var opts = {
- doctype: this.doctype,
- list_view: this
+ // 1st column: title_field or name
+ if (this.meta.title_field) {
+ this.columns.push({
+ type: 'Subject',
+ df: get_df(this.meta.title_field)
+ });
+ } else {
+ this.columns.push({
+ type: 'Subject',
+ df: {
+ label: __('Name'),
+ fieldname: 'name'
+ }
+ });
}
- if (this.current_view === 'List') {
- this.list_renderer = new frappe.views.ListRenderer(opts);
- } else if (this.current_view === 'Gantt') {
- this.list_renderer = new frappe.views.GanttView(opts);
- } else if (this.current_view === 'Calendar') {
- this.list_renderer = new frappe.views.CalendarView(opts);
- } else if (this.current_view === 'Image') {
- this.list_renderer = new frappe.views.ImageView(opts);
- } else if (this.current_view === 'Kanban') {
- this.list_renderer = new frappe.views.KanbanView(opts);
- } else if (this.current_view === 'Inbox') {
- this.list_renderer = new frappe.views.InboxView(opts)
+ // 2nd column: Status indicator
+ if (frappe.has_indicator(this.doctype)) {
+ // indicator
+ this.columns.push({
+ type: 'Status'
+ });
}
- },
- render_view: function (values) {
- this.list_renderer.render_view(values);
- },
+ const fields_in_list_view = this.get_fields_in_list_view();
+ // Add rest from in_list_view docfields
+ this.columns = this.columns.concat(
+ fields_in_list_view
+ .filter(df => df.fieldname !== 'status')
+ .map(df => ({
+ type: 'Field',
+ df
+ }))
+ );
- set_title: function () {
- if (this.list_renderer.page_title) {
- this.page.set_title(this.list_renderer.page_title);
- } else {
- this.page.set_title(this.page_title);
- }
- },
+ // limit to 4 columns
+ this.columns = this.columns.slice(0, 4);
+ }
- load_last_view: function () {
- var us = frappe.get_user_settings(this.doctype);
- var route = ['List', this.doctype];
+ get_no_result_message() {
+ const new_button = this.can_create ?
+ `` : '';
- if (us.last_view && frappe.views.view_modes.includes(us.last_view)) {
- route.push(us.last_view);
+ return `
\n "};t.getDropdownHTML=h},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var a=n(6),r=o(a),i=n(18),l=o(i);r.default.__version__=l.default.version,t.default=r.default,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n\n
\n
\n
\n
\n
\n '+this.options.freezeMessage+'\n
\n \n
\n ',this.datatableWrapper=(0,l.default)(".data-table",this.wrapper),this.header=(0,l.default)(".data-table-header",this.wrapper),this.bodyScrollable=(0,l.default)(".body-scrollable",this.wrapper),this.freezeContainer=(0,l.default)(".freeze-container",this.wrapper)}},{key:"refresh",value:function(e){this.datamanager.init(e),this.render()}},{key:"destroy",value:function(){this.wrapper.innerHTML="",this.style.destroy()}},{key:"appendRows",value:function(e){this.datamanager.appendRows(e),this.rowmanager.refreshRows()}},{key:"refreshRow",value:function(e,t){this.rowmanager.refreshRow(e,t)}},{key:"render",value:function(){this.renderHeader(),this.renderBody()}},{key:"renderHeader",value:function(){this.columnmanager.renderHeader()}},{key:"renderBody",value:function(){this.bodyRenderer.render()}},{key:"setDimensions",value:function(){this.columnmanager.setDimensions(),this.setBodyWidth(),l.default.style(this.bodyScrollable,{marginTop:l.default.style(this.header,"height")+"px"}),l.default.style((0,l.default)("table",this.bodyScrollable),{margin:0})}},{key:"setBodyWidth",value:function(){var e=l.default.style(this.header,"width");l.default.style(this.bodyScrollable,{width:e+"px"})}},{key:"getColumn",value:function(e){return this.datamanager.getColumn(e)}},{key:"getCell",value:function(e,t){return this.datamanager.getCell(e,t)}},{key:"getColumnHeaderElement",value:function(e){return this.columnmanager.getColumnHeaderElement(e)}},{key:"getViewportHeight",value:function(){return this.viewportHeight||(this.viewportHeight=l.default.style(this.bodyScrollable,"height")),this.viewportHeight}},{key:"sortColumn",value:function(e,t){this.columnmanager.sortColumn(e,t)}},{key:"removeColumn",value:function(e){this.columnmanager.removeColumn(e)}},{key:"scrollToLastColumn",value:function(){this.datatableWrapper.scrollLeft=9999}},{key:"freeze",value:function(){l.default.style(this.freezeContainer,{display:""})}},{key:"unfreeze",value:function(){l.default.style(this.freezeContainer,{display:"none"})}},{key:"fireEvent",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),o=1;o1&&void 0!==arguments[1]&&arguments[1],{isHeader:1,editable:!0,sortable:!0,resizable:!0,focusable:!0,dropdown:!0,format:function(e){return''+e+""}});return e.map(s).map(function(e){return Object.assign({},t,e)})}function s(e,t){var n={content:"",align:"left",sortOrder:"none",colIndex:0,width:40};return"string"==typeof e&&(e={content:e}),Object.assign({},n,e,{colIndex:t})}Object.defineProperty(t,"__esModule",{value:!0}),t.DataError=void 0;var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=function(){function e(e,t){for(var n=0;n'}}].concat(e)}return l(e)}},{key:"prepareNumericColumns",value:function(){var e=this.getRow(0);this.columns=this.columns.map(function(t,n){var o=e[n].content;return!t.align&&o&&(0,d.isNumeric)(o)&&(t.align="right"),t})}},{key:"prepareRows",value:function(e){var t=this;return this.validateRows(e),e=e.map(function(e,n){var o=t._getNextRowCount();if(e.length'].concat(e)}}return i(e,o)})}},{key:"validateColumns",value:function(e){if(!Array.isArray(e))throw new h("`columns` must be an array");e.forEach(function(e,t){if("string"!=typeof e&&"object"!==(void 0===e?"undefined":u(e)))throw new h('column "'+t+'" must be a string or an object')})}},{key:"validateRows",value:function(e){var t=this;if(!Array.isArray(e))throw new h("`rows` must be an array");e.forEach(function(e,n){if(!Array.isArray(e))throw new h("`row` must be an array");if(e.length!==t.getColumnCount(!0))throw new h('Row index "'+n+"\" doesn't match column length")})}},{key:"appendRows",value:function(e){this.validateRows(e),this.rows=this.rows.concat(this.prepareRows(e))}},{key:"sortRows",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"none";e=+e,this.getColumns().map(function(n){n.colIndex===e?n.sortOrder=t:n.sortOrder="none"}),this._sortRows(e,t)}},{key:"_sortRows",value:function(e,t){if(this.currentSort.colIndex===e&&("asc"===this.currentSort.sortOrder&&"desc"===t||"desc"===this.currentSort.sortOrder&&"asc"===t))return this.reverseArray(this.rows),void(this.currentSort.sortOrder=t);this.rows.sort(function(n,o){var a=n[0].rowIndex,r=o[0].rowIndex,i=n[e].content,l=o[e].content;if("none"===t)return a-r;if("asc"===t){if(il)return 1;if(i===l)return 0}else if("desc"===t){if(il)return-1;if(i===l)return 0}return 0})}},{key:"reverseArray",value:function(e){var t=null,n=null,o=e.length;for(t=0,n=o-1;t'].concat(e)}}var n=i(e,t),o=this.rows.findIndex(function(e){return e[0].rowIndex===t});return this.rows[o]=n,n}},{key:"updateCell",value:function(e,t,n){var o=void 0;return"object"===(void 0===e?"undefined":u(e))&&(o=e,e=o.colIndex,t=o.rowIndex,n=o.content),o=this.getCell(e,t),o.content=n,o}},{key:"getRowCount",value:function(){return this.rowCount}},{key:"_getNextRowCount",value:function(){var e=this.rowCount;return this.rowCount++,e}},{key:"getRows",value:function(e,t){return this.rows.slice(e,t)}},{key:"getColumns",value:function(e){var t=this.columns;return e&&(t=t.slice(this.getStandardColumnCount())),t}},{key:"getStandardColumnCount",value:function(){return this.options.addCheckboxColumn&&this.options.addSerialNoColumn?2:this.options.addCheckboxColumn||this.options.addSerialNoColumn?1:0}},{key:"getColumnCount",value:function(e){var t=this.columns.length;return e&&(t-=this.getStandardColumnCount()),t}},{key:"getColumn",value:function(e){return e=+e,this.columns.find(function(t){return t.colIndex===e})}},{key:"getRow",value:function(e){return e=+e,this.rows.find(function(t){return t[0].rowIndex===e})}},{key:"getCell",value:function(e,t){return t=+t,e=+e,this.rows.find(function(e){return e[0].rowIndex===t})[e]}},{key:"get",value:function(){return{columns:this.columns,rows:this.rows}}},{key:"hasColumn",value:function(e){return Boolean(this.columns.find(function(t){return t.content===e}))}},{key:"currentSort",get:function(){return this.columns.find(function(e){return"none"!==e.sortOrder})||{colIndex:-1,sortOrder:"none"}}}]),e}();t.default=f;var h=t.DataError=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return a(t,e),t}(function(e){function t(){var t=Reflect.construct(e,Array.from(arguments));return Object.setPrototypeOf(t,Object.getPrototypeOf(this)),t}return t.prototype=Object.create(e.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e,t}(TypeError))},function(e,t,n){"use strict";function o(e){var t=i[e.keyCode];e.shiftKey&&"shift"!==t&&(t="shift+"+t),(e.ctrlKey&&"ctrl"!==t||e.metaKey&&"meta"!==t)&&(t="ctrl+"+t);var n=l[t];n&&n.length>0&&n.map(function(t){var n=t();void 0!==n&&!0!==n||e.preventDefault()})}Object.defineProperty(t,"__esModule",{value:!0});var a=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(a),i={13:"enter",91:"meta",16:"shift",17:"ctrl",18:"alt",37:"left",38:"up",39:"right",40:"down",9:"tab",27:"esc",67:"c"},l={};!function(){r.default.on(document,"keydown",o)}(),t.default={on:function(e,t){e.split(",").map(function(e){return e.trim()}).map(function(e){l[e]=l[e]||[],l[e].push(t)})}},e.exports=t.default},function(t,n){t.exports=e},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e){return"\n \n "+e.map(function(e){return(0,d.getRowHTML)(e,{rowIndex:e[0].rowIndex})}).join("")+"\n \n "}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n\n '+r(e)+"\n \n "}},{key:"renderBodyWithClusterize",value:function(){var e=this;this.bodyScrollable.innerHTML='\n
'+__('Sort By')+'
\ - \ -'+__('Then By (optional)')+'
\ - \ -\ - '); - - // first - this.sort_by_select = new frappe.ui.FieldSelect({ - parent: $(this.sort_dialog.body).find('.sort-column'), - doctype: this.doctype - }); - this.sort_by_select.$select.css('width', '60%'); - this.sort_order_select = $(this.sort_dialog.body).find('.sort-order'); - - // second - this.sort_by_next_select = new frappe.ui.FieldSelect({ - parent: $(this.sort_dialog.body).find('.sort-column-1'), - doctype: this.doctype, - with_blank: true - }); - this.sort_by_next_select.$select.css('width', '60%'); - this.sort_order_next_select = $(this.sort_dialog.body).find('.sort-order-1'); - - // initial values - this.sort_by_select.set_value(this.doctype, 'modified'); - this.sort_order_select.val('desc'); - - this.sort_by_next_select.clear(); - this.sort_order_next_select.val('desc'); - - // button actions - this.page.add_inner_button(__('Sort Order'), function() { - me.sort_dialog.show(); - }); - - $(this.sort_dialog.body).find('.btn-primary').click(function() { - me.sort_dialog.hide(); - me.run(); - }); - }, - - // setup export - make_export: function() { - var me = this; - if(!frappe.model.can_export(this.doctype)) { - return; - } - var export_btn = this.page.add_menu_item(__('Export'), function() { - var args = me.get_args(); - var selected_items = me.get_checked_items() - frappe.prompt({fieldtype:"Select", label: __("Select File Type"), fieldname:"file_format_type", - options:"Excel\nCSV", default:"Excel", reqd: 1}, - function(data) { - args.cmd = 'frappe.desk.reportview.export_query'; - args.file_format_type = data.file_format_type; - - if(me.add_totals_row) { - args.add_totals_row = 1; - } - - if(selected_items.length >= 1) { - args.selected_items = $.map(selected_items, function(d) { return d.name; }); - } - open_url_post(frappe.request.url, args); - - }, __("Export Report: {0}",[__(me.doctype)]), __("Download")); - - }, true); - }, - - - // save - make_save: function() { - var me = this; - if(frappe.user.is_report_manager()) { - this.page.add_menu_item(__('Save'), function() { me.save_report('save') }, true); - this.page.add_menu_item(__('Save As'), function() { me.save_report('save_as') }, true); - } - }, - - save_report: function(save_type) { - var me = this; - - var _save_report = function(name) { - // callback - return frappe.call({ - method: 'frappe.desk.reportview.save_report', - args: { - name: name, - doctype: me.doctype, - json: JSON.stringify({ - filters: me.filter_list.get_filters(), - columns: me.columns, - sort_by: me.sort_by_select.val(), - sort_order: me.sort_order_select.val(), - sort_by_next: me.sort_by_next_select.val(), - sort_order_next: me.sort_order_next_select.val(), - add_totals_row: me.add_totals_row - }) - }, - callback: function(r) { - if(r.exc) { - frappe.msgprint(__("Report was not saved (there were errors)")); - return; - } - if(r.message != me.docname) - frappe.set_route('Report', me.doctype, r.message); - } - }); - - } - - if(me.docname && save_type == "save") { - _save_report(me.docname); - } else { - frappe.prompt({fieldname: 'name', label: __('New Report name'), reqd: 1, fieldtype: 'Data'}, function(data) { - _save_report(data.name); - }, __('Save As')); - } - - }, - - make_delete: function() { - var me = this; - if(this.can_delete) { - $(this.parent).on("click", "input[type='checkbox'][data-row]", function() { - me.data[$(this).attr("data-row")].selected - = this.checked ? true : false; - }); - - this.page.add_menu_item(__("Delete"), function() { - var delete_list = $.map(me.get_checked_items(), function(d) { return d.name; }); - if(!delete_list.length) - return; - if(frappe.confirm(__("This is PERMANENT action and you cannot undo. Continue?"), - function() { - return frappe.call({ - method: 'frappe.desk.reportview.delete_items', - args: { - items: delete_list, - doctype: me.doctype - }, - callback: function() { - me.refresh(); - } - }); - })); - - }, true); - } - }, - - make_user_permissions: function() { - var me = this; - if(this.docname && frappe.model.can_set_user_permissions("Report")) { - this.page.add_menu_item(__("User Permissions"), function() { - frappe.route_options = { - doctype: "Report", - name: me.docname - }; - frappe.set_route('List', 'User Permission'); - }, true); - } - }, - - setup_listview_settings: function() { - if(frappe.listview_settings[this.doctype] && frappe.listview_settings[this.doctype].onload) { - frappe.listview_settings[this.doctype].onload(this); - } - }, - - get_checked_items: function() { - var me = this; - var selected_records = [] - - $.each(me.data, function(i, d) { - if(d.selected && d.name) { - selected_records.push(d); - } - }); - - return selected_records - } -}); - -frappe.ui.ColumnPicker = Class.extend({ - init: function(list) { - this.list = list; - this.doctype = list.doctype; - }, - clear: function() { - this.columns = []; - $(this.dialog.body).html('