b908e85b958bd4b4dc27124beffa6fa0.json 18.1 KB
{"ast":null,"code":"/**\r\n * @author NHN Ent. FE Development Team <dl_javascript@nhn.com>\r\n * @fileoverview Add filter module\r\n */\nimport { isUndefined, extend, forEach, filter } from 'tui-code-snippet';\nimport { Promise } from '../util';\nimport fabric from 'fabric';\nimport Component from '../interface/component';\nimport Mask from '../extension/mask';\nimport { rejectMessages, componentNames } from '../consts';\nimport Sharpen from '../extension/sharpen';\nimport Emboss from '../extension/emboss';\nimport ColorFilter from '../extension/colorFilter';\nconst {\n  filters\n} = fabric.Image;\nfilters.Mask = Mask;\nfilters.Sharpen = Sharpen;\nfilters.Emboss = Emboss;\nfilters.ColorFilter = ColorFilter;\n/**\r\n * Filter\r\n * @class Filter\r\n * @param {Graphics} graphics - Graphics instance\r\n * @extends {Component}\r\n * @ignore\r\n */\n\nclass Filter extends Component {\n  constructor(graphics) {\n    super(componentNames.FILTER, graphics);\n  }\n  /**\r\n   * Add filter to source image (a specific filter is added on fabric.js)\r\n   * @param {string} type - Filter type\r\n   * @param {Object} [options] - Options of filter\r\n   * @returns {Promise}\r\n   */\n\n\n  add(type, options) {\n    return new Promise((resolve, reject) => {\n      const sourceImg = this._getSourceImage();\n\n      const canvas = this.getCanvas();\n\n      let imgFilter = this._getFilter(sourceImg, type);\n\n      if (!imgFilter) {\n        imgFilter = this._createFilter(sourceImg, type, options);\n      }\n\n      if (!imgFilter) {\n        reject(rejectMessages.invalidParameters);\n      }\n\n      this._changeFilterValues(imgFilter, options);\n\n      this._apply(sourceImg, () => {\n        canvas.renderAll();\n        resolve({\n          type,\n          action: 'add',\n          options\n        });\n      });\n    });\n  }\n  /**\r\n   * Remove filter to source image\r\n   * @param {string} type - Filter type\r\n   * @returns {Promise}\r\n   */\n\n\n  remove(type) {\n    return new Promise((resolve, reject) => {\n      const sourceImg = this._getSourceImage();\n\n      const canvas = this.getCanvas();\n      const options = this.getOptions(type);\n\n      if (!sourceImg.filters.length) {\n        reject(rejectMessages.unsupportedOperation);\n      }\n\n      this._removeFilter(sourceImg, type);\n\n      this._apply(sourceImg, () => {\n        canvas.renderAll();\n        resolve({\n          type,\n          action: 'remove',\n          options\n        });\n      });\n    });\n  }\n  /**\r\n   * Whether this has the filter or not\r\n   * @param {string} type - Filter type\r\n   * @returns {boolean} true if it has the filter\r\n   */\n\n\n  hasFilter(type) {\n    return !!this._getFilter(this._getSourceImage(), type);\n  }\n  /**\r\n   * Get a filter options\r\n   * @param {string} type - Filter type\r\n   * @returns {Object} filter options or null if there is no that filter\r\n   */\n\n\n  getOptions(type) {\n    const sourceImg = this._getSourceImage();\n\n    const imgFilter = this._getFilter(sourceImg, type);\n\n    if (!imgFilter) {\n      return null;\n    }\n\n    return extend({}, imgFilter.options);\n  }\n  /**\r\n   * Change filter values\r\n   * @param {Object} imgFilter object of filter\r\n   * @param {Object} options object\r\n   * @private\r\n   */\n\n\n  _changeFilterValues(imgFilter, options) {\n    forEach(options, (value, key) => {\n      if (!isUndefined(imgFilter[key])) {\n        imgFilter[key] = value;\n      }\n    });\n    forEach(imgFilter.options, (value, key) => {\n      if (!isUndefined(options[key])) {\n        imgFilter.options[key] = options[key];\n      }\n    });\n  }\n  /**\r\n   * Apply filter\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {function} callback - Executed function after applying filter\r\n   * @private\r\n   */\n\n\n  _apply(sourceImg, callback) {\n    sourceImg.filters.push();\n    const result = sourceImg.applyFilters();\n\n    if (result) {\n      callback();\n    }\n  }\n  /**\r\n   * Get source image on canvas\r\n   * @returns {fabric.Image} Current source image on canvas\r\n   * @private\r\n   */\n\n\n  _getSourceImage() {\n    return this.getCanvasImage();\n  }\n  /**\r\n   * Create filter instance\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {string} type - Filter type\r\n   * @param {Object} [options] - Options of filter\r\n   * @returns {Object} Fabric object of filter\r\n   * @private\r\n   */\n\n\n  _createFilter(sourceImg, type, options) {\n    let filterObj; // capitalize first letter for matching with fabric image filter name\n\n    const fabricType = this._getFabricFilterType(type);\n\n    const ImageFilter = fabric.Image.filters[fabricType];\n\n    if (ImageFilter) {\n      filterObj = new ImageFilter(options);\n      filterObj.options = options;\n      sourceImg.filters.push(filterObj);\n    }\n\n    return filterObj;\n  }\n  /**\r\n   * Get applied filter instance\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {string} type - Filter type\r\n   * @returns {Object} Fabric object of filter\r\n   * @private\r\n   */\n\n\n  _getFilter(sourceImg, type) {\n    let imgFilter = null;\n\n    if (sourceImg) {\n      const fabricType = this._getFabricFilterType(type);\n\n      const {\n        length\n      } = sourceImg.filters;\n      let item, i;\n\n      for (i = 0; i < length; i += 1) {\n        item = sourceImg.filters[i];\n\n        if (item.type === fabricType) {\n          imgFilter = item;\n          break;\n        }\n      }\n    }\n\n    return imgFilter;\n  }\n  /**\r\n   * Remove applied filter instance\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {string} type - Filter type\r\n   * @private\r\n   */\n\n\n  _removeFilter(sourceImg, type) {\n    const fabricType = this._getFabricFilterType(type);\n\n    sourceImg.filters = filter(sourceImg.filters, value => value.type !== fabricType);\n  }\n  /**\r\n   * Change filter class name to fabric's, especially capitalizing first letter\r\n   * @param {string} type - Filter type\r\n   * @example\r\n   * 'grayscale' -> 'Grayscale'\r\n   * @returns {string} Fabric filter class name\r\n   */\n\n\n  _getFabricFilterType(type) {\n    return type.charAt(0).toUpperCase() + type.slice(1);\n  }\n\n}\n\nexport default Filter;","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/src/js/component/filter.js"],"names":["isUndefined","extend","forEach","filter","Promise","fabric","Component","Mask","rejectMessages","componentNames","Sharpen","Emboss","ColorFilter","filters","Image","Filter","constructor","graphics","FILTER","add","type","options","resolve","reject","sourceImg","_getSourceImage","canvas","getCanvas","imgFilter","_getFilter","_createFilter","invalidParameters","_changeFilterValues","_apply","renderAll","action","remove","getOptions","length","unsupportedOperation","_removeFilter","hasFilter","value","key","callback","push","result","applyFilters","getCanvasImage","filterObj","fabricType","_getFabricFilterType","ImageFilter","item","i","charAt","toUpperCase","slice"],"mappings":"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","sourcesContent":["/**\r\n * @author NHN Ent. FE Development Team <dl_javascript@nhn.com>\r\n * @fileoverview Add filter module\r\n */\r\nimport { isUndefined, extend, forEach, filter } from 'tui-code-snippet';\r\nimport { Promise } from '../util';\r\nimport fabric from 'fabric';\r\nimport Component from '../interface/component';\r\nimport Mask from '../extension/mask';\r\nimport { rejectMessages, componentNames } from '../consts';\r\nimport Sharpen from '../extension/sharpen';\r\nimport Emboss from '../extension/emboss';\r\nimport ColorFilter from '../extension/colorFilter';\r\n\r\nconst { filters } = fabric.Image;\r\nfilters.Mask = Mask;\r\nfilters.Sharpen = Sharpen;\r\nfilters.Emboss = Emboss;\r\nfilters.ColorFilter = ColorFilter;\r\n\r\n/**\r\n * Filter\r\n * @class Filter\r\n * @param {Graphics} graphics - Graphics instance\r\n * @extends {Component}\r\n * @ignore\r\n */\r\nclass Filter extends Component {\r\n  constructor(graphics) {\r\n    super(componentNames.FILTER, graphics);\r\n  }\r\n\r\n  /**\r\n   * Add filter to source image (a specific filter is added on fabric.js)\r\n   * @param {string} type - Filter type\r\n   * @param {Object} [options] - Options of filter\r\n   * @returns {Promise}\r\n   */\r\n  add(type, options) {\r\n    return new Promise((resolve, reject) => {\r\n      const sourceImg = this._getSourceImage();\r\n      const canvas = this.getCanvas();\r\n      let imgFilter = this._getFilter(sourceImg, type);\r\n      if (!imgFilter) {\r\n        imgFilter = this._createFilter(sourceImg, type, options);\r\n      }\r\n\r\n      if (!imgFilter) {\r\n        reject(rejectMessages.invalidParameters);\r\n      }\r\n\r\n      this._changeFilterValues(imgFilter, options);\r\n\r\n      this._apply(sourceImg, () => {\r\n        canvas.renderAll();\r\n        resolve({\r\n          type,\r\n          action: 'add',\r\n          options,\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Remove filter to source image\r\n   * @param {string} type - Filter type\r\n   * @returns {Promise}\r\n   */\r\n  remove(type) {\r\n    return new Promise((resolve, reject) => {\r\n      const sourceImg = this._getSourceImage();\r\n      const canvas = this.getCanvas();\r\n      const options = this.getOptions(type);\r\n\r\n      if (!sourceImg.filters.length) {\r\n        reject(rejectMessages.unsupportedOperation);\r\n      }\r\n\r\n      this._removeFilter(sourceImg, type);\r\n\r\n      this._apply(sourceImg, () => {\r\n        canvas.renderAll();\r\n        resolve({\r\n          type,\r\n          action: 'remove',\r\n          options,\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Whether this has the filter or not\r\n   * @param {string} type - Filter type\r\n   * @returns {boolean} true if it has the filter\r\n   */\r\n  hasFilter(type) {\r\n    return !!this._getFilter(this._getSourceImage(), type);\r\n  }\r\n\r\n  /**\r\n   * Get a filter options\r\n   * @param {string} type - Filter type\r\n   * @returns {Object} filter options or null if there is no that filter\r\n   */\r\n  getOptions(type) {\r\n    const sourceImg = this._getSourceImage();\r\n    const imgFilter = this._getFilter(sourceImg, type);\r\n    if (!imgFilter) {\r\n      return null;\r\n    }\r\n\r\n    return extend({}, imgFilter.options);\r\n  }\r\n\r\n  /**\r\n   * Change filter values\r\n   * @param {Object} imgFilter object of filter\r\n   * @param {Object} options object\r\n   * @private\r\n   */\r\n  _changeFilterValues(imgFilter, options) {\r\n    forEach(options, (value, key) => {\r\n      if (!isUndefined(imgFilter[key])) {\r\n        imgFilter[key] = value;\r\n      }\r\n    });\r\n    forEach(imgFilter.options, (value, key) => {\r\n      if (!isUndefined(options[key])) {\r\n        imgFilter.options[key] = options[key];\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Apply filter\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {function} callback - Executed function after applying filter\r\n   * @private\r\n   */\r\n  _apply(sourceImg, callback) {\r\n    sourceImg.filters.push();\r\n    const result = sourceImg.applyFilters();\r\n    if (result) {\r\n      callback();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get source image on canvas\r\n   * @returns {fabric.Image} Current source image on canvas\r\n   * @private\r\n   */\r\n  _getSourceImage() {\r\n    return this.getCanvasImage();\r\n  }\r\n\r\n  /**\r\n   * Create filter instance\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {string} type - Filter type\r\n   * @param {Object} [options] - Options of filter\r\n   * @returns {Object} Fabric object of filter\r\n   * @private\r\n   */\r\n  _createFilter(sourceImg, type, options) {\r\n    let filterObj;\r\n    // capitalize first letter for matching with fabric image filter name\r\n    const fabricType = this._getFabricFilterType(type);\r\n    const ImageFilter = fabric.Image.filters[fabricType];\r\n    if (ImageFilter) {\r\n      filterObj = new ImageFilter(options);\r\n      filterObj.options = options;\r\n      sourceImg.filters.push(filterObj);\r\n    }\r\n\r\n    return filterObj;\r\n  }\r\n\r\n  /**\r\n   * Get applied filter instance\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {string} type - Filter type\r\n   * @returns {Object} Fabric object of filter\r\n   * @private\r\n   */\r\n  _getFilter(sourceImg, type) {\r\n    let imgFilter = null;\r\n\r\n    if (sourceImg) {\r\n      const fabricType = this._getFabricFilterType(type);\r\n      const { length } = sourceImg.filters;\r\n      let item, i;\r\n\r\n      for (i = 0; i < length; i += 1) {\r\n        item = sourceImg.filters[i];\r\n        if (item.type === fabricType) {\r\n          imgFilter = item;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return imgFilter;\r\n  }\r\n\r\n  /**\r\n   * Remove applied filter instance\r\n   * @param {fabric.Image} sourceImg - Source image to apply filter\r\n   * @param {string} type - Filter type\r\n   * @private\r\n   */\r\n  _removeFilter(sourceImg, type) {\r\n    const fabricType = this._getFabricFilterType(type);\r\n    sourceImg.filters = filter(sourceImg.filters, (value) => value.type !== fabricType);\r\n  }\r\n\r\n  /**\r\n   * Change filter class name to fabric's, especially capitalizing first letter\r\n   * @param {string} type - Filter type\r\n   * @example\r\n   * 'grayscale' -> 'Grayscale'\r\n   * @returns {string} Fabric filter class name\r\n   */\r\n  _getFabricFilterType(type) {\r\n    return type.charAt(0).toUpperCase() + type.slice(1);\r\n  }\r\n}\r\n\r\nexport default Filter;\r\n"]},"metadata":{},"sourceType":"module"}