使用Python生成演示文稿(Generate presentation with Python)
我正在处理数据处理,并希望通过直接从Python生成的一些数据分析生成PowerPoint或OpenOffice Impress演示文稿。 有没有Python的库来做到这一点? 我使用Unix环境。
I'm working with data processing and want to generate PowerPoint or OpenOffice Impress presentation with some data analysis directly from Python. Is there any libraries for Python to do that? I'm using Unix enviroment.
原文:https://stackoverflow.com/questions/11202648
最满意答案
我同意我的旧答案不能与Font Awesome 4一起使用,因为类的名称在版本4中已更改。我在我为客户开发的解决方案中使用Font Awesome 4,我决定与其他人共享。
文件jQuery.jqGrid.fontAwesome4.css , jQuery.jqGrid.fontAwesome4.js和jQuery.jqGrid.checkboxFontAwesome4.js包含新的jqGrid方法
initFontAwesome
和formatter: "checkboxFontAwesome4"
。 该演示演示了文件的用法:使用建议的方法
initFontAwesome
非常简单。 首先,需要包含其他CSS和JavaScript文件:<link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"> ... <link rel="stylesheet" type="text/css" href=".../ui.jqgrid.css" /> <link rel="stylesheet" type="text/css" href=".../jQuery.jqGrid.fontAwesome4.css" /> ... <script type="text/javascript" src=".../i18n/grid.locale-en.js"></script> <script type="text/javascript" src=".../jquery.jqGrid.min.js"></script> <script type="text/javascript" src=".../jQuery.jqGrid.fontAwesome4.js"></script>
然后一个修改众所周知的线
$("#grid").jqGrid({ ... // jqGrid options and callbacks });
至
$("#grid").jqGrid("initFontAwesome").jqGrid({ ... // jqGrid options and callbacks });
要使用
formatter: "checkboxFontAwesome4"
而不是预定义的格式化formatter: "checkbox"
格式化formatter: "checkbox"
只需要在jquery.jqGrid.min.js
(或jquery.jqGrid.src.js
)之后包含jQuery.jqGrid.checkboxFontAwesome4.js
:<script type="text/javascript" src=".../jQuery.jqGrid.checkboxFontAwesome4.js"></script>
格式化程序“checkboxFontAwesome4”对
formatter: "checkbox"
有一些优势formatter: "checkbox"
:
- 可以通过单击图标来选择行。 标准
formatter: "checkbox"
使用禁用的<input type="checkbox">
。 点击禁用的控件将在大多数Web浏览器上被阻止。 我在“clickableCheckbox”之前发布了(见这里和这里 )。- 我使用树复选框格式化程序对网格进行了大量行和列的测试表明格式化程序“checkboxFontAwesome4”是渲染速度最快的(在我测试的所有Web浏览器中),
formatter: "checkbox"
较低且“clickableCheckbox” “是最缓慢的。formatter "checkboxFontAwesome4"
不仅很酷,而且渲染速度非常快。最后,我包括jQuery.jqGrid.fontAwesome4.css , jQuery.jqGrid.fontAwesome4.js和jQuery.jqGrid.checkboxFontAwesome4.js的当前状态:
jQuery.jqGrid.fontAwesome4.css
:.ui-jqgrid .ui-pg-table .ui-pg-div>span.fa, #jqContextMenu .ui-menu-item>a>span.fa { text-indent:0; height: auto; width: auto; background-image: none; overflow: visible; padding-top: 1px; } .ui-jqgrid .ui-pg-table .ui-pg-div { text-indent:0; height: auto; width: auto; background-image: none; overflow: visible; padding-top: 1px; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title span { font-size: 18px; display: inline-block; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title { margin-top: 0; top: 0; padding-left: 2px; padding-bottom: 2px;} .ui-jqgrid .ui-icon-asc.fa { height: auto; margin-top: 0; } .ui-jqgrid .ui-icon-asc.fa, .ui-jqgrid .ui-icon-desc.fa { height: auto; margin-top: 2px; margin-left: 2px; } .ui-jqgrid .s-ico>.ui-state-disabled.fa, .s-ico>.ui-state-disabled.fa { padding: 0; } .ui-jqdialog .ui-jqdialog-titlebar-close { text-decoration: none; right: 0.2em !important} .ui-jqdialog .ui-jqdialog-titlebar-close>span { margin-top: 3px; margin-left: 5px;} .ui-jqdialog .EditTable .fm-button-icon-right { padding-left: 0; padding-right: 0.5em; float:right;} .ui-jqdialog .EditTable .fm-button-icon-left { padding-left: 0; float:left; } .ui-jqdialog .EditButton>.fm-button { display: block; width: auto; } .ui-jqdialog .EditButton>.fm-button>span { float: left; margin-left: 0.5em; margin-right: 0;} .ui-jqgrid .ui-jqdialog .fm-button>span { margin-left: 0.5em; margin-right: 0; } .ui-jqdialog>.ui-resizable-se { bottom: -3px; right: -3px}
jQuery.jqGrid.fontAwesome4.js
:/*global $ */ (function ($) { "use strict"; /*jslint unparam: true */ $.extend($.jgrid, { icons: { common: "fa", // will be implemented later scale: "", // will be implemented later. For example as "fa-lg" titleVisibleGrid: "fa fa-arrow-circle-up", titleHiddenGrid: "fa fa-arrow-circle-down", titleIcon: "ui-corner-all fa-title", close: "fa fa-times", edit: "fa fa-pencil fa-fw", add: "fa fa-plus fa-fw", del: "fa fa-trash-o fa-fw", search: "fa fa-search fa-fw", refresh: "fa fa-refresh fa-fw", view: "fa fa-file-o fa-fw", pager: { first: "fa fa-step-backward fa-fw", prev: "fa fa-backward fa-fw", next: "fa fa-forward fa-fw", last: "fa fa-step-forward fa-fw" }, form: { prev: "fa fa-caret-left", next: "fa fa-caret-right", save: "fa fa-floppy-o", undo: "fa fa-undo", close: "fa fa-times", delete: "fa fa-trash-o" }, searchForm: { reset: "fa fa-undo", query: "fa fa-comments-o", search: "fa fa-search" } } }); $.extend($.jgrid.nav, { editicon: $.jgrid.icons.edit, addicon: $.jgrid.icons.add, delicon: $.jgrid.icons.del, searchicon: $.jgrid.icons.search, refreshicon: $.jgrid.icons.refresh, viewicon: $.jgrid.icons.view }); $.extend($.jgrid.defaults, { fontAwesomeIcons: true // the new option will be used in callbacks }); $.extend($.jgrid, { originalCreateModal: $.jgrid.originalCreateModal || $.jgrid.createModal, createModal: function (aIDs, content, p, insertSelector, posSelector, appendsel, css) { $.jgrid.originalCreateModal.call(this, aIDs, content, p, insertSelector, posSelector, appendsel, css); if ($(insertSelector).find(">.ui-jqgrid-bdiv>div>.ui-jqgrid-btable").jqGrid("getGridParam", "fontAwesomeIcons")) { $("#" + $.jgrid.jqID(aIDs.modalhead) + ">a.ui-jqdialog-titlebar-close>span.ui-icon") .removeClass("ui-icon ui-icon-closethick") .addClass($.jgrid.icons.close); $("#" + $.jgrid.jqID(aIDs.themodal) + ">div.jqResize").removeClass("ui-icon-grip-diagonal-se"); } } }); $.extend($.jgrid.view, { beforeShowForm: function ($form) { var $dialog = $form.closest(".ui-jqdialog"), $iconSpans = $dialog.find("a.fm-button>span.ui-icon"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); if ($this.hasClass("ui-icon-triangle-1-w")) { $this.removeClass("ui-icon ui-icon-triangle-1-w") .addClass($.jgrid.icons.form.prev); } else if ($this.hasClass("ui-icon-triangle-1-e")) { $this.removeClass("ui-icon ui-icon-triangle-1-e") .addClass($.jgrid.icons.form.next); } else if ($this.hasClass("ui-icon-close")) { $fmButton.removeClass("fm-button-icon-left") .addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.form.close + "\"></span><span>" + $fmButton.text() + "</span>"); } }); } }); $.extend($.jgrid.del, { afterShowForm: function ($form) { var $dialog = $form.closest(".ui-jqdialog"), $tdButtons = $dialog.find(".EditTable .DelButton"), $fmButtonNew = $("<td class=\"DelButton EditButton\" style=\"float: right;\">"), $iconSpans = $tdButtons.find(">a.fm-button>span.ui-icon"); $tdButtons.css("float", "right"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); if ($this.hasClass("ui-icon-scissors")) { $fmButton.html("<span class=\"" + $.jgrid.icons.form.delete + "\"></span><span>" + $fmButton.text() + "</span>"); $fmButtonNew.append($fmButton); } else if ($this.hasClass("ui-icon-cancel")) { $fmButton.html("<span class=\"" + $.jgrid.icons.form.undo + "\"></span><span>" + $fmButton.text() + "</span>"); $fmButtonNew.append($fmButton); } }); if ($fmButtonNew.children().length > 0) { // remove between buttons $tdButtons.replaceWith($fmButtonNew); } } }); $.jgrid.extend({ initFontAwesome: function () { return this.each(function () { var $grid = $(this); $grid.bind("jqGridFilterAfterShow", function (e, $form) { // an alternative to afterShowSearch var $dialog = $form.closest(".ui-jqdialog"), $iconSpans = $dialog.find("a.fm-button>span.ui-icon"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); $this.removeClass("ui-icon"); if ($this.hasClass("ui-icon-search")) { $this.closest(".EditButton").css("float", "right"); $fmButton.addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.searchForm.search + "\"></span><span>" + $fmButton.text() + "</span>"); } else if ($this.hasClass("ui-icon-arrowreturnthick-1-w")) { $this.closest(".EditButton").css("float", "left"); $fmButton.addClass("fm-button-icon-left") .html("<span class=\"" + $.jgrid.icons.searchForm.reset + "\"></span><span>" + $fmButton.text() + "</span>"); } else if ($this.hasClass("ui-icon-comment")) { $this.closest(".EditButton").css("float", "right"); $fmButton.addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.searchForm.query + "\"></span><span>" + $fmButton.text() + "</span>"); } }); }).bind("jqGridAddEditBeforeShowForm", function (e, $form) { // alternative to beforeShowForm callback var $dialog = $form.closest(".ui-jqdialog"), $iconSpans = $dialog.find("a.fm-button>span.ui-icon"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); if ($this.hasClass("ui-icon-triangle-1-w")) { $this.removeClass("ui-icon ui-icon-triangle-1-w") .addClass($.jgrid.icons.form.prev); } else if ($this.hasClass("ui-icon-triangle-1-e")) { $this.removeClass("ui-icon ui-icon-triangle-1-e") .addClass($.jgrid.icons.form.next); } else if ($this.hasClass("ui-icon-disk")) { $this.closest(".EditButton").css("float", "right"); $fmButton.html("<span class=\"" + $.jgrid.icons.form.save + "\"></span><span>" + $fmButton.text() + "</span>"); } else if ($this.hasClass("ui-icon-close")) { $this.closest(".EditButton").css("float", "right"); $fmButton.removeClass("fm-button-icon-left") .addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.form.undo + "\"></span><span>" + $fmButton.text() + "</span>"); } }); }).bind("jqGridHeaderClick", function (e, gridstate) { var $icon; if (this.p.fontAwesomeIcons) { $icon = $(this).closest(".ui-jqgrid").find(".ui-jqgrid-titlebar>.ui-jqgrid-titlebar-close>span"); if (gridstate === "visible") { $icon.removeClass("ui-icon ui-icon-circle-triangle-n fa-arrow-circle-down") .addClass($.jgrid.icons.titleVisibleGrid).parent().addClass($.jgrid.icons.titleIcon); } else if (gridstate === "hidden") { $icon.removeClass("ui-icon ui-icon-circle-triangle-n fa-arrow-circle-up") .addClass($.jgrid.icons.titleHiddenGrid).parent().addClass($.jgrid.icons.titleIcon); } } }).bind("jqGridInitGrid", function () { var $this = $(this), $pager, $sortables; if (this.p.fontAwesomeIcons) { $pager = $this.closest(".ui-jqgrid").find(".ui-pg-table"); $pager.find(".ui-pg-button>span.ui-icon-seek-first") .removeClass("ui-icon ui-icon-seek-first") .addClass($.jgrid.icons.pager.first); $pager.find(".ui-pg-button>span.ui-icon-seek-prev") .removeClass("ui-icon ui-icon-seek-prev") .addClass($.jgrid.icons.pager.prev); $pager.find(".ui-pg-button>span.ui-icon-seek-next") .removeClass("ui-icon ui-icon-seek-next") .addClass($.jgrid.icons.pager.next); $pager.find(".ui-pg-button>span.ui-icon-seek-end") .removeClass("ui-icon ui-icon-seek-end") .addClass($.jgrid.icons.pager.last); $this.closest(".ui-jqgrid") .find(".ui-jqgrid-titlebar>.ui-jqgrid-titlebar-close>.ui-icon-circle-triangle-n") .removeClass("ui-icon ui-icon-circle-triangle-n") .addClass("fa fa-arrow-circle-up").parent().addClass("ui-corner-all fa-title"); $sortables = $this.closest(".ui-jqgrid") .find(".ui-jqgrid-htable .ui-jqgrid-labels .ui-jqgrid-sortable span.s-ico"); $sortables.find(">span.ui-icon-triangle-1-s") .removeClass("ui-icon ui-icon-triangle-1-s") .addClass("fa fa-sort-asc fa-lg"); $sortables.find(">span.ui-icon-triangle-1-n") .removeClass("ui-icon ui-icon-triangle-1-n") .addClass("fa fa-sort-desc fa-lg"); } }); }); } }); }(jQuery));
jQuery.jqGrid.checkboxFontAwesome4.js
:/*global jQuery */ (function ($) { "use strict"; /*jslint unparam: true */ $.extend($.fn.fmatter, { checkboxFontAwesome4: function (cellValue, options) { var title = options.colModel.title !== false ? ' title="' + (options.colName || options.colModel.label || options.colModel.name) + '"' : ''; return (cellValue === 1 || String(cellValue) === "1" || cellValue === true || String(cellValue).toLowerCase() === "true") ? '<i class="fa fa-check-square-o fa-lg"' + title + '></i>' : '<i class="fa fa-square-o fa-lg"' + title + '></i>'; } }); $.extend($.fn.fmatter.checkboxFontAwesome4, { unformat: function (cellValue, options, elem) { var cbv = (options.colModel.editoptions) ? options.colModel.editoptions.value.split(":") : ["Yes", "No"]; return $(">i", elem).hasClass("fa-check-square-o") ? cbv[0] : cbv[1]; } }); }(jQuery));
更新 : 另一个演示包含一些额外的CSS样式,如果一个包含Bootstrap 3.0.2的
bootstrap.css
,它可以提高jqGrid的可见性。 我确信这些样式不是最好的,但是我确定了在测试中发现的问题。 以下是款式:.ui-jqgrid .ui-pg-table .ui-pg-input, .ui-jqgrid .ui-pg-table .ui-pg-selbox { height: auto; width: auto; line-height: inherit; } .ui-jqgrid .ui-pg-table .ui-pg-selbox { padding: 1px; } .ui-jqgrid { line-height: normal; } div.ui-jqgrid-view table.ui-jqgrid-btable { border-style: none; border-top-style: none; border-collapse: separate; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title { border-collapse: separate; margin-top: 0; top: 0; margin-right: 2px; height: 22px; width: 20px; padding: 2px; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title.ui-state-hover span { margin-top: -1px; margin-left: -1px; } .ui-paging-info { display: inline; } .ui-jqgrid .ui-pg-table { border-collapse: separate; } div.ui-jqgrid-view table.ui-jqgrid-btable td { border-left-style: none } div.ui-jqgrid-view table.ui-jqgrid-htable { border-style: none; border-top-style: none; border-collapse: separate; } div.ui-jqgrid-view table.ui-jqgrid-btable th { border-left-style: none } .ui-jqgrid .ui-jqgrid-htable th div { height: 14px; } .ui-jqgrid .ui-jqgrid-resize { height: 18px !important; }
更新2:使用Font Awesome 4.2和Bootstrap 3.2进行 一次演示 。 用法非常简单。 一个应该包括一些.css(
jQuery.jqGrid.fontAwesome4.css
和jQuery.jqGrid.bootstrap-fixes.css
)和.js文件(jQuery.jqGrid.fontAwesome4.js
和jQuery.jqGrid.checkboxFontAwesome4.js
)并使用.jqGrid("initFontAwesome")
创建网格之前的.jqGrid("initFontAwesome")
。 要修复第二个开头的编辑表单height
问题,我使用了beforeInitData: function () { $("#editmod" + this.id).remove(); }
另外。 可以从这里下载最新版本的jQuery.jqGrid.fontAwesome4.css
,jQuery.jqGrid.bootstrap-fixes.css
,jQuery.jqGrid.fontAwesome4.js
和jQuery.jqGrid.checkboxFontAwesome4.js
。I agree that my old answer can't be used with Font Awesome 4 because the names of the classes are changed in version 4. I use Font Awesome 4 myself in solutions which I develop for my customers and I decide to share it with other.
The files jQuery.jqGrid.fontAwesome4.css, jQuery.jqGrid.fontAwesome4.js and jQuery.jqGrid.checkboxFontAwesome4.js contains new jqGrid method
initFontAwesome
andformatter: "checkboxFontAwesome4"
. The demo demonstrates the usage of the files:
The usage of suggested method
initFontAwesome
is very simple. First of all one need to include additional CSS and JavaScript files:<link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"> ... <link rel="stylesheet" type="text/css" href=".../ui.jqgrid.css" /> <link rel="stylesheet" type="text/css" href=".../jQuery.jqGrid.fontAwesome4.css" /> ... <script type="text/javascript" src=".../i18n/grid.locale-en.js"></script> <script type="text/javascript" src=".../jquery.jqGrid.min.js"></script> <script type="text/javascript" src=".../jQuery.jqGrid.fontAwesome4.js"></script>
Then one modify well known line
$("#grid").jqGrid({ ... // jqGrid options and callbacks });
to
$("#grid").jqGrid("initFontAwesome").jqGrid({ ... // jqGrid options and callbacks });
To use
formatter: "checkboxFontAwesome4"
instead of predefined formatterformatter: "checkbox"
one need just includesjQuery.jqGrid.checkboxFontAwesome4.js
afterjquery.jqGrid.min.js
(orjquery.jqGrid.src.js
):<script type="text/javascript" src=".../jQuery.jqGrid.checkboxFontAwesome4.js"></script>
The formatter "checkboxFontAwesome4" have some advantage to
formatter: "checkbox"
:
- one can select the row by clicking on the icons. The standard
formatter: "checkbox"
uses disabled<input type="checkbox">
. Clicking on disabled control will be blocked on the most web browsers. I posted before "clickableCheckbox" (see here and here).- The tests which I made with grids having many rows and columns using the tree checkbox formatters shows that formatter "checkboxFontAwesome4" is the most quick in rendering (in all web browsers where I it tested),
formatter: "checkbox"
is lower and "clickableCheckbox" is the mostly slow. Soformatter "checkboxFontAwesome4"
is not only cool, but it's really quick in rendering.At the end I includes the current state of jQuery.jqGrid.fontAwesome4.css, jQuery.jqGrid.fontAwesome4.js and jQuery.jqGrid.checkboxFontAwesome4.js:
jQuery.jqGrid.fontAwesome4.css
:.ui-jqgrid .ui-pg-table .ui-pg-div>span.fa, #jqContextMenu .ui-menu-item>a>span.fa { text-indent:0; height: auto; width: auto; background-image: none; overflow: visible; padding-top: 1px; } .ui-jqgrid .ui-pg-table .ui-pg-div { text-indent:0; height: auto; width: auto; background-image: none; overflow: visible; padding-top: 1px; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title span { font-size: 18px; display: inline-block; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title { margin-top: 0; top: 0; padding-left: 2px; padding-bottom: 2px;} .ui-jqgrid .ui-icon-asc.fa { height: auto; margin-top: 0; } .ui-jqgrid .ui-icon-asc.fa, .ui-jqgrid .ui-icon-desc.fa { height: auto; margin-top: 2px; margin-left: 2px; } .ui-jqgrid .s-ico>.ui-state-disabled.fa, .s-ico>.ui-state-disabled.fa { padding: 0; } .ui-jqdialog .ui-jqdialog-titlebar-close { text-decoration: none; right: 0.2em !important} .ui-jqdialog .ui-jqdialog-titlebar-close>span { margin-top: 3px; margin-left: 5px;} .ui-jqdialog .EditTable .fm-button-icon-right { padding-left: 0; padding-right: 0.5em; float:right;} .ui-jqdialog .EditTable .fm-button-icon-left { padding-left: 0; float:left; } .ui-jqdialog .EditButton>.fm-button { display: block; width: auto; } .ui-jqdialog .EditButton>.fm-button>span { float: left; margin-left: 0.5em; margin-right: 0;} .ui-jqgrid .ui-jqdialog .fm-button>span { margin-left: 0.5em; margin-right: 0; } .ui-jqdialog>.ui-resizable-se { bottom: -3px; right: -3px}
jQuery.jqGrid.fontAwesome4.js
:/*global $ */ (function ($) { "use strict"; /*jslint unparam: true */ $.extend($.jgrid, { icons: { common: "fa", // will be implemented later scale: "", // will be implemented later. For example as "fa-lg" titleVisibleGrid: "fa fa-arrow-circle-up", titleHiddenGrid: "fa fa-arrow-circle-down", titleIcon: "ui-corner-all fa-title", close: "fa fa-times", edit: "fa fa-pencil fa-fw", add: "fa fa-plus fa-fw", del: "fa fa-trash-o fa-fw", search: "fa fa-search fa-fw", refresh: "fa fa-refresh fa-fw", view: "fa fa-file-o fa-fw", pager: { first: "fa fa-step-backward fa-fw", prev: "fa fa-backward fa-fw", next: "fa fa-forward fa-fw", last: "fa fa-step-forward fa-fw" }, form: { prev: "fa fa-caret-left", next: "fa fa-caret-right", save: "fa fa-floppy-o", undo: "fa fa-undo", close: "fa fa-times", delete: "fa fa-trash-o" }, searchForm: { reset: "fa fa-undo", query: "fa fa-comments-o", search: "fa fa-search" } } }); $.extend($.jgrid.nav, { editicon: $.jgrid.icons.edit, addicon: $.jgrid.icons.add, delicon: $.jgrid.icons.del, searchicon: $.jgrid.icons.search, refreshicon: $.jgrid.icons.refresh, viewicon: $.jgrid.icons.view }); $.extend($.jgrid.defaults, { fontAwesomeIcons: true // the new option will be used in callbacks }); $.extend($.jgrid, { originalCreateModal: $.jgrid.originalCreateModal || $.jgrid.createModal, createModal: function (aIDs, content, p, insertSelector, posSelector, appendsel, css) { $.jgrid.originalCreateModal.call(this, aIDs, content, p, insertSelector, posSelector, appendsel, css); if ($(insertSelector).find(">.ui-jqgrid-bdiv>div>.ui-jqgrid-btable").jqGrid("getGridParam", "fontAwesomeIcons")) { $("#" + $.jgrid.jqID(aIDs.modalhead) + ">a.ui-jqdialog-titlebar-close>span.ui-icon") .removeClass("ui-icon ui-icon-closethick") .addClass($.jgrid.icons.close); $("#" + $.jgrid.jqID(aIDs.themodal) + ">div.jqResize").removeClass("ui-icon-grip-diagonal-se"); } } }); $.extend($.jgrid.view, { beforeShowForm: function ($form) { var $dialog = $form.closest(".ui-jqdialog"), $iconSpans = $dialog.find("a.fm-button>span.ui-icon"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); if ($this.hasClass("ui-icon-triangle-1-w")) { $this.removeClass("ui-icon ui-icon-triangle-1-w") .addClass($.jgrid.icons.form.prev); } else if ($this.hasClass("ui-icon-triangle-1-e")) { $this.removeClass("ui-icon ui-icon-triangle-1-e") .addClass($.jgrid.icons.form.next); } else if ($this.hasClass("ui-icon-close")) { $fmButton.removeClass("fm-button-icon-left") .addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.form.close + "\"></span><span>" + $fmButton.text() + "</span>"); } }); } }); $.extend($.jgrid.del, { afterShowForm: function ($form) { var $dialog = $form.closest(".ui-jqdialog"), $tdButtons = $dialog.find(".EditTable .DelButton"), $fmButtonNew = $("<td class=\"DelButton EditButton\" style=\"float: right;\">"), $iconSpans = $tdButtons.find(">a.fm-button>span.ui-icon"); $tdButtons.css("float", "right"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); if ($this.hasClass("ui-icon-scissors")) { $fmButton.html("<span class=\"" + $.jgrid.icons.form.delete + "\"></span><span>" + $fmButton.text() + "</span>"); $fmButtonNew.append($fmButton); } else if ($this.hasClass("ui-icon-cancel")) { $fmButton.html("<span class=\"" + $.jgrid.icons.form.undo + "\"></span><span>" + $fmButton.text() + "</span>"); $fmButtonNew.append($fmButton); } }); if ($fmButtonNew.children().length > 0) { // remove between buttons $tdButtons.replaceWith($fmButtonNew); } } }); $.jgrid.extend({ initFontAwesome: function () { return this.each(function () { var $grid = $(this); $grid.bind("jqGridFilterAfterShow", function (e, $form) { // an alternative to afterShowSearch var $dialog = $form.closest(".ui-jqdialog"), $iconSpans = $dialog.find("a.fm-button>span.ui-icon"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); $this.removeClass("ui-icon"); if ($this.hasClass("ui-icon-search")) { $this.closest(".EditButton").css("float", "right"); $fmButton.addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.searchForm.search + "\"></span><span>" + $fmButton.text() + "</span>"); } else if ($this.hasClass("ui-icon-arrowreturnthick-1-w")) { $this.closest(".EditButton").css("float", "left"); $fmButton.addClass("fm-button-icon-left") .html("<span class=\"" + $.jgrid.icons.searchForm.reset + "\"></span><span>" + $fmButton.text() + "</span>"); } else if ($this.hasClass("ui-icon-comment")) { $this.closest(".EditButton").css("float", "right"); $fmButton.addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.searchForm.query + "\"></span><span>" + $fmButton.text() + "</span>"); } }); }).bind("jqGridAddEditBeforeShowForm", function (e, $form) { // alternative to beforeShowForm callback var $dialog = $form.closest(".ui-jqdialog"), $iconSpans = $dialog.find("a.fm-button>span.ui-icon"); $iconSpans.each(function () { var $this = $(this), $fmButton = $this.parent(); if ($this.hasClass("ui-icon-triangle-1-w")) { $this.removeClass("ui-icon ui-icon-triangle-1-w") .addClass($.jgrid.icons.form.prev); } else if ($this.hasClass("ui-icon-triangle-1-e")) { $this.removeClass("ui-icon ui-icon-triangle-1-e") .addClass($.jgrid.icons.form.next); } else if ($this.hasClass("ui-icon-disk")) { $this.closest(".EditButton").css("float", "right"); $fmButton.html("<span class=\"" + $.jgrid.icons.form.save + "\"></span><span>" + $fmButton.text() + "</span>"); } else if ($this.hasClass("ui-icon-close")) { $this.closest(".EditButton").css("float", "right"); $fmButton.removeClass("fm-button-icon-left") .addClass("fm-button-icon-right") .html("<span class=\"" + $.jgrid.icons.form.undo + "\"></span><span>" + $fmButton.text() + "</span>"); } }); }).bind("jqGridHeaderClick", function (e, gridstate) { var $icon; if (this.p.fontAwesomeIcons) { $icon = $(this).closest(".ui-jqgrid").find(".ui-jqgrid-titlebar>.ui-jqgrid-titlebar-close>span"); if (gridstate === "visible") { $icon.removeClass("ui-icon ui-icon-circle-triangle-n fa-arrow-circle-down") .addClass($.jgrid.icons.titleVisibleGrid).parent().addClass($.jgrid.icons.titleIcon); } else if (gridstate === "hidden") { $icon.removeClass("ui-icon ui-icon-circle-triangle-n fa-arrow-circle-up") .addClass($.jgrid.icons.titleHiddenGrid).parent().addClass($.jgrid.icons.titleIcon); } } }).bind("jqGridInitGrid", function () { var $this = $(this), $pager, $sortables; if (this.p.fontAwesomeIcons) { $pager = $this.closest(".ui-jqgrid").find(".ui-pg-table"); $pager.find(".ui-pg-button>span.ui-icon-seek-first") .removeClass("ui-icon ui-icon-seek-first") .addClass($.jgrid.icons.pager.first); $pager.find(".ui-pg-button>span.ui-icon-seek-prev") .removeClass("ui-icon ui-icon-seek-prev") .addClass($.jgrid.icons.pager.prev); $pager.find(".ui-pg-button>span.ui-icon-seek-next") .removeClass("ui-icon ui-icon-seek-next") .addClass($.jgrid.icons.pager.next); $pager.find(".ui-pg-button>span.ui-icon-seek-end") .removeClass("ui-icon ui-icon-seek-end") .addClass($.jgrid.icons.pager.last); $this.closest(".ui-jqgrid") .find(".ui-jqgrid-titlebar>.ui-jqgrid-titlebar-close>.ui-icon-circle-triangle-n") .removeClass("ui-icon ui-icon-circle-triangle-n") .addClass("fa fa-arrow-circle-up").parent().addClass("ui-corner-all fa-title"); $sortables = $this.closest(".ui-jqgrid") .find(".ui-jqgrid-htable .ui-jqgrid-labels .ui-jqgrid-sortable span.s-ico"); $sortables.find(">span.ui-icon-triangle-1-s") .removeClass("ui-icon ui-icon-triangle-1-s") .addClass("fa fa-sort-asc fa-lg"); $sortables.find(">span.ui-icon-triangle-1-n") .removeClass("ui-icon ui-icon-triangle-1-n") .addClass("fa fa-sort-desc fa-lg"); } }); }); } }); }(jQuery));
jQuery.jqGrid.checkboxFontAwesome4.js
:/*global jQuery */ (function ($) { "use strict"; /*jslint unparam: true */ $.extend($.fn.fmatter, { checkboxFontAwesome4: function (cellValue, options) { var title = options.colModel.title !== false ? ' title="' + (options.colName || options.colModel.label || options.colModel.name) + '"' : ''; return (cellValue === 1 || String(cellValue) === "1" || cellValue === true || String(cellValue).toLowerCase() === "true") ? '<i class="fa fa-check-square-o fa-lg"' + title + '></i>' : '<i class="fa fa-square-o fa-lg"' + title + '></i>'; } }); $.extend($.fn.fmatter.checkboxFontAwesome4, { unformat: function (cellValue, options, elem) { var cbv = (options.colModel.editoptions) ? options.colModel.editoptions.value.split(":") : ["Yes", "No"]; return $(">i", elem).hasClass("fa-check-square-o") ? cbv[0] : cbv[1]; } }); }(jQuery));
UPDATED: Another demo contains some additional CSS styles which improve visibility of jqGrid if one includes
bootstrap.css
of the Bootstrap 3.0.2. I am sure that the styles are not the best, but there fix the problems which I found in my tests. Below are the styles:.ui-jqgrid .ui-pg-table .ui-pg-input, .ui-jqgrid .ui-pg-table .ui-pg-selbox { height: auto; width: auto; line-height: inherit; } .ui-jqgrid .ui-pg-table .ui-pg-selbox { padding: 1px; } .ui-jqgrid { line-height: normal; } div.ui-jqgrid-view table.ui-jqgrid-btable { border-style: none; border-top-style: none; border-collapse: separate; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title { border-collapse: separate; margin-top: 0; top: 0; margin-right: 2px; height: 22px; width: 20px; padding: 2px; } .ui-jqgrid .ui-jqgrid-titlebar-close.fa-title.ui-state-hover span { margin-top: -1px; margin-left: -1px; } .ui-paging-info { display: inline; } .ui-jqgrid .ui-pg-table { border-collapse: separate; } div.ui-jqgrid-view table.ui-jqgrid-btable td { border-left-style: none } div.ui-jqgrid-view table.ui-jqgrid-htable { border-style: none; border-top-style: none; border-collapse: separate; } div.ui-jqgrid-view table.ui-jqgrid-btable th { border-left-style: none } .ui-jqgrid .ui-jqgrid-htable th div { height: 14px; } .ui-jqgrid .ui-jqgrid-resize { height: 18px !important; }
UPDATED 2: One more demo works with Font Awesome 4.2 and Bootstrap 3.2. The usage is very easy. One should include some .css (
jQuery.jqGrid.fontAwesome4.css
andjQuery.jqGrid.bootstrap-fixes.css
) and .js files (jQuery.jqGrid.fontAwesome4.js
andjQuery.jqGrid.checkboxFontAwesome4.js
) and to use.jqGrid("initFontAwesome")
before the grid are created. To fix problems withheight
of editing form at the second opening I usedbeforeInitData: function () { $("#editmod" + this.id).remove(); }
additionally. One can download the latest versions ofjQuery.jqGrid.fontAwesome4.css
,jQuery.jqGrid.bootstrap-fixes.css
,jQuery.jqGrid.fontAwesome4.js
andjQuery.jqGrid.checkboxFontAwesome4.js
from here.
相关问答
更多-
这是非常有趣的问题! 我以前从未使用过Font Awesome图标 ,但它似乎很有趣的项目。 jqGrid目前没有对Font Awesome图标的直接支持,但我准备了简单的演示 ,演示如何用Font Awesome中的对应图标替换标准jQuery UI导航器图标。 人们可以看到大多数页面缩放后清楚了原始导航器图标的区别。 我在缩放400%时显示在导航器下方: 原始导航器使用jQuery UI图标 带有Font Awesome图标的导航器: 我使用的代码非常简单。 而不是用法 $grid.jqGrid("na ...
-
无法呈现字体真棒图标(Unable to render font awesome icons)[2023-02-05]
您还需要添加fa类: You need to add the fa class also: -
堆栈3字体真棒图标(Stack 3 font awesome icons)[2023-09-24]
我认为新的SVG是您的最佳选择。 参考您的图像,注意到FontAwesome图标是透明的,您将无法将fa-laptop堆叠在fa-desktop和fa-mobile图标前面,而不会通过笔记本电脑的屏幕看到它们。 这是一个用CSS堆叠它们的演示和一些绝对定位来向你展示我的意思; https://jsfiddle.net/k3en9L4m/ span.stack{ position: relative; } span.stack i{ position: absolute; } I thin ... -
jqGrid:字体真棒图标(jqGrid:Font Awesome Icons)[2023-08-09]
我同意我的旧答案不能与Font Awesome 4一起使用,因为类的名称在版本4中已更改。我在我为客户开发的解决方案中使用Font Awesome 4,我决定与其他人共享。 文件jQuery.jqGrid.fontAwesome4.css , jQuery.jqGrid.fontAwesome4.js和jQuery.jqGrid.checkboxFontAwesome4.js包含新的jqGrid方法initFontAwesome和formatter: "checkboxFontAwesome4" 。 该演示 ... -
不能显示字体真棒图标?(cant display Font awesome icons?)[2023-11-19]
您需要有可用的字体目录,并可以在您的Web服务器中访问。 它包含在从http://fortawesome.github.io/Font-Awesome/下载的软件包中 在font-awesome.css中,它需要引用字体目录才能显示图标图像。 希望这可以帮助。 You need to have fonts directory available and can be accessed in your web server. It is included in the download package fro ... -
没有显示真棒字体图标(Awesome font icons not showed)[2022-05-16]
字体真棒文件没有链接。 我添加了GitHub的链接并出现了图标(请参阅截图)。 检查链接。 截图 The fonts awesome files are not linked. I added the link to GitHub and the icons appeared (see screenshot). Check the links. Screenshot -
您的问题不包含足够的实施细节。 如果只使用标准的免费jqGrid中的代码,那么人们将看不到任何glyphicon图标,因为也添加了fa类。 如果要移除fa类,按钮(带有图标类的 )将具有ui-pg-button-icon-over-text fa-lg fa-fw glyphicon glyphicon-cloud-download callses然后我看不到和glyphicon位置的问题。 以示例为例,结果如下 所以它应该是您使用的其他CSS规则的问题。 我想你只需要添加一个CSS规则来修复你 ...
-
如何圆形字体真棒图标?(How to round font-awesome icons?)[2023-09-30]
尝试调整高度/宽度并重置行高: i { display: inline-block; background: gray; color: white; border-radius: 50%; padding: 0.3em; /* adjust padding */ line-height: initial !important; /* reset line-height */ height: 1em; width: 1em; text-align:cent ... -
Rails字体真棒图标(Rails Font Awesome Icons)[2023-03-16]
用这个。 如果您想要任何图标,请转到此处并单击您想要的图标,它将为您提供该图标的HTML。 Use this. If you ever want any icon just go Here and click on icon you want and it will give your HTML for that icon ... -
我不确定我是否正确理解你的问题。 我想Ace主题已经是一个使用Font Awesome图标的jQuery UI主题。 所以我觉得你在一个页面上只使用了两个jQuery UI Theme 。 在这种情况下,您应该使用一些非空的“CSS Scope”下载第二个主题(jQuery UI亮度主题),然后在外部div中使用范围类来显示您需要使用第二个主题的页面上的区域。 有关详细信息,请参阅答案 在包含第二个主题(jQuery UI亮度)的方式将不会应用于您使用Ace主题的页面的第一部分。 I am not sure ...