UNPKG

tui-grid

Version:

TOAST UI Grid : Powerful data grid control supported by TOAST UI

420 lines (378 loc) 12.5 kB
/** * @fileoverview css style generator * @author NHN. FE Development Lab <dl_javascript@nhn.com> */ 'use strict'; var _ = require('underscore'); var builder = require('./cssRuleBuilder'); var classNameConst = require('../common/classNameConst'); /** * Shortcut for the builder.createClassRule() method. * @ignore */ var classRule = _.bind(builder.createClassRule, builder); /** * Shortcut for the builder.createClassComposeRule() method. * @ignore */ var classComposeRule = _.bind(builder.createClassComposeRule, builder); /** * Creates a rule string for background and text colors. * @param {String} className - class name * @param {Objecr} options - options * @returns {String} * @ignore */ function bgTextRuleString(className, options) { return classRule(className) .bg(options.background) .text(options.text) .build(); } /** * Creates a rule string for background and border colors. * @param {String} className - class name * @param {Objecr} options - options * @returns {String} * @ignore */ function bgBorderRuleString(className, options) { return classRule(className) .bg(options.background) .border(options.border) .build(); } module.exports = { /** * Generates a css string for grid outline. * @param {Object} options - options * @returns {String} */ outline: function(options) { var borderTopRule = classRule(classNameConst.BORDER_TOP).bg(options.border); var borderBottomRule = classComposeRule(' .', [ classNameConst.NO_SCROLL_X, classNameConst.BORDER_BOTTOM ]).bg(options.border); var rules = [ borderTopRule, borderBottomRule ]; var borderLeftRule, borderRightRule; if (options.showVerticalBorder) { borderLeftRule = classRule(classNameConst.BORDER_LEFT).bg(options.border); borderRightRule = classComposeRule(' .', [ classNameConst.NO_SCROLL_Y, classNameConst.BORDER_RIGHT ]).bg(options.border); rules = rules.concat([borderLeftRule, borderRightRule]); } return builder.buildAll(rules); }, /** * Generates a css string for border of frozen columns. * @param {Object} options - options * @returns {String} */ frozenBorder: function(options) { return classRule(classNameConst.FROZEN_BORDER) .bg(options.border) .build(); }, /** * Generates a css string for scrollbars. * @param {Object} options - options * @returns {String} */ scrollbar: function(options) { var webkitScrollbarRules = builder.createWebkitScrollbarRules('.' + classNameConst.CONTAINER, options); var ieScrollbarRule = builder.createIEScrollbarRule('.' + classNameConst.CONTAINER, options); var xInnerBorderRule = classRule(classNameConst.BORDER_BOTTOM).bg(options.border); var xOuterBorderRule = classRule(classNameConst.CONTENT_AREA).border(options.border); var yInnerBorderRule = classRule(classNameConst.SCROLLBAR_Y_INNER_BORDER).bg(options.border); var yOuterBorderRule = classRule(classNameConst.SCROLLBAR_Y_OUTER_BORDER).bg(options.border); var spaceRightTopRule = classRule(classNameConst.SCROLLBAR_RIGHT_TOP) .bg(options.emptySpace) .border(options.border); var spaceRightBottomRule = classRule(classNameConst.SCROLLBAR_RIGHT_BOTTOM) .bg(options.emptySpace) .border(options.border); var spaceLeftBottomRule = classRule(classNameConst.SCROLLBAR_LEFT_BOTTOM) .bg(options.emptySpace) .border(options.border); var frozenBorderRule = classRule(classNameConst.SCROLLBAR_FROZEN_BORDER) .bg(options.emptySpace) .border(options.border); return builder.buildAll(webkitScrollbarRules.concat([ ieScrollbarRule, xInnerBorderRule, xOuterBorderRule, yInnerBorderRule, yOuterBorderRule, spaceRightTopRule, spaceRightBottomRule, spaceLeftBottomRule, frozenBorderRule ])); }, /** * Generates a css string for a resize-handle. * @param {Object} options - options * @returns {String} */ heightResizeHandle: function(options) { return bgBorderRuleString(classNameConst.HEIGHT_RESIZE_HANDLE, options); }, /** * Generates a css string for a pagination. * @param {Object} options - options * @returns {String} */ pagination: function(options) { return bgBorderRuleString(classNameConst.PAGINATION, options); }, /** * Generates a css string for selection layers. * @param {Object} options - options * @returns {String} */ selection: function(options) { return bgBorderRuleString(classNameConst.LAYER_SELECTION, options); }, /** * Generates a css string for head area. * @param {Object} options - options * @returns {String} */ headArea: function(options) { return classRule(classNameConst.HEAD_AREA) .bg(options.background) .border(options.border) .build(); }, /** * Generates a css string for body area. * @param {Object} options - options * @returns {String} */ bodyArea: function(options) { return classRule(classNameConst.BODY_AREA) .bg(options.background) .build(); }, /** * Generates a css string for summary area. * @param {Object} options - options * @returns {String} */ summaryArea: function(options) { var contentAreaRule = classRule(classNameConst.SUMMARY_AREA) .bg(options.background) .border(options.border); var bodyAreaRule = classComposeRule(' .', [ classNameConst.HAS_SUMMARY_TOP, classNameConst.BODY_AREA ]).border(options.border); return builder.buildAll([ contentAreaRule, bodyAreaRule ]); }, /** * Generates a css string for table cells. * @param {Object} options - options * @returns {String} */ cell: function(options) { return classRule(classNameConst.CELL) .bg(options.background) .border(options.border) .borderWidth(options) .text(options.text) .build(); }, /* * Generates a css string for head cells. * @param {Object} options - options * @returns {String} */ cellHead: function(options) { var tableRule = classComposeRule(' .', [ classNameConst.SHOW_LSIDE_AREA, classNameConst.LSIDE_AREA, classNameConst.HEAD_AREA, classNameConst.TABLE ]).verticalBorderStyle(options, 'right'); var cellRule = classRule(classNameConst.CELL_HEAD) .bg(options.background) .border(options.border) .borderWidth(options) .text(options.text); return builder.buildAll([ tableRule, cellRule ]); }, /* * Generates a css string for row's head cells. * @param {Object} options - options * @returns {String} */ cellRowHead: function(options) { var tableRule = classComposeRule(' .', [ classNameConst.SHOW_LSIDE_AREA, classNameConst.LSIDE_AREA, classNameConst.BODY_AREA, classNameConst.TABLE ]).verticalBorderStyle(options, 'right'); var cellRule = classRule(classNameConst.CELL_ROW_HEAD) .bg(options.background) .border(options.border) .borderWidth(options) .text(options.text); return builder.buildAll([ tableRule, cellRule ]); }, /* * Generates a css string for summary cells. * @param {Object} options - options * @returns {String} */ cellSummary: function(options) { var tableRule = classComposeRule(' .', [ classNameConst.SHOW_LSIDE_AREA, classNameConst.LSIDE_AREA, classNameConst.SUMMARY_AREA, classNameConst.TABLE ]).verticalBorderStyle(options, 'right'); var cellRule = classRule(classNameConst.CELL_SUMMARY) .bg(options.background) .border(options.border) .borderWidth(options) .text(options.text); return builder.buildAll([ tableRule, cellRule ]); }, /** * Generates a css string for the cells in even rows. * @param {Object} options - options * @returns {String} */ cellEvenRow: function(options) { return classComposeRule('>', [ classNameConst.ROW_EVEN, 'td' ]).bg(options.background) .build(); }, /** * Generates a css string for the cells in odd rows. * @param {Object} options - options * @returns {String} */ cellOddRow: function(options) { return classComposeRule('>', [ classNameConst.ROW_ODD, 'td' ]).bg(options.background).build(); }, /** * Generates a css string for selected head cells. * @param {Object} options - options * @returns {String} */ cellSelectedHead: function(options) { return classComposeRule('.', [ classNameConst.CELL_HEAD, classNameConst.CELL_SELECTED ]).bg(options.background) .text(options.text) .build(); }, /** * Generates a css string for selected row head cells. * @param {Object} options - options * @returns {String} */ cellSelectedRowHead: function(options) { return classComposeRule('.', [ classNameConst.CELL_ROW_HEAD, classNameConst.CELL_SELECTED ]).bg(options.background) .text(options.text) .build(); }, /** * Generates a css string for focused cell. * @param {Object} options - options * @returns {String} */ cellFocused: function(options) { var focusLayerRule = classRule(classNameConst.LAYER_FOCUS_BORDER).bg(options.border); var editingLayerRule = classRule(classNameConst.LAYER_EDITING).border(options.border); return builder.buildAll([focusLayerRule, editingLayerRule]); }, /** * Generates a css string for focus inactive cell. * @param {Object} options - options * @returns {String} */ cellFocusedInactive: function(options) { return classComposeRule(' .', [ classNameConst.LAYER_FOCUS_DEACTIVE, classNameConst.LAYER_FOCUS_BORDER ]).bg(options.border).build(); }, /** * Generates a css string for editable cells. * @param {Object} options - options * @returns {String} */ cellEditable: function(options) { return bgTextRuleString(classNameConst.CELL_EDITABLE, options); }, /** * Generates a css string for required cells. * @param {Object} options - options * @returns {String} */ cellRequired: function(options) { return bgTextRuleString(classNameConst.CELL_REQUIRED, options); }, /** * Generates a css string for disabled cells. * @param {Object} options - options * @returns {String} */ cellDisabled: function(options) { return bgTextRuleString(classNameConst.CELL_DISABLED, options); }, /** * Generates a css string for dummy cells. * @param {Object} options - options * @returns {String} */ cellDummy: function(options) { return bgTextRuleString(classNameConst.CELL_DUMMY, options); }, /** * Generates a css string for invalid cells. * @param {Object} options - options * @returns {String} */ cellInvalid: function(options) { return bgTextRuleString(classNameConst.CELL_INVALID, options); }, /** * Generates a css string for cells in a current row. * @param {Object} options - options * @returns {String} */ cellCurrentRow: function(options) { return bgTextRuleString(classNameConst.CELL_CURRENT_ROW, options); } };