{"version":3,"sources":["kendo.imagebrowser.js"],"names":["f","define","$","undefined","offsetTop","element","height","concatPaths","path","name","match","sizeFormatter","value","suffix","Math","round","ImageBrowser","kendo","window","FileBrowser","ui","isPlainObject","proxy","extend","isFunction","trimSlashesRegExp","ERROR","NS","NAMEFIELD","SIZEFIELD","TYPEFIELD","DEFAULTSORTORDER","field","dir","EMPTYTILE","template","data","schemas","imagebrowser","items","model","id","fields","size","type","transports","RemoteTransport","init","options","fn","call","this","_call","read","create","destroy","update","that","addClass","fileTypes","selected","_selectedItem","imageUrl","transport","get","replace","format","encodeURIComponent","_fileUpload","e","file","filterRegExp","RegExp","split","join","fileName","files","fileSize","fileNameField","sizeField","test","_createFile","_uploading","upload","one","_insertFileToList","set","response","_getFieldName","_tiles","listView","filter","attr","_scroll","preventDefault","_showMessage","messages","invalidFileType","_content","list","appendTo","on","_dblClick","ListView","layout","flex","direction","wrap","dataSource","_itemTmpl","editTemplate","_editTmpl","selectable","autoBind","dataBinding","toolbar","find","parent","action","progress","content","dataBound","view","length","append","text","emptyFolder","change","_listViewChange","_dataSource","schema","typeSortOrder","nameSortOrder","sort","_errorHandler","unbind","_error","DataSource","bind","_loadImage","li","dataItem","getByUid","thumbnailUrl","img","alt","urlJoin","hide","prev","remove","end","fadeIn","after","indexOf","_override","Date","getTime","loaded","clearTimeout","_timeout","setTimeout","_outerHeight","viewTop","scrollTop","viewBottom","each","top","bottom","offsetHeight","html","plugin","jQuery","amd","a1","a2","a3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,sBAAuB,qBAAsBD,IACtD,WAyQE,MAhQC,UAAUE,EAAGC,GAwDV,QAASC,GAAUC,GACf,MAAOA,GAAQD,UAAYF,EAAEG,GAASC,SAE1C,QAASC,GAAYC,EAAMC,GAIvB,MAHID,KAASL,GAAcK,EAAKE,MAAM,SAClCF,GAAQA,GAAQ,IAAM,KAEnBA,EAAOC,EAElB,QAASE,GAAcC,GACnB,IAAKA,EACD,MAAO,EAEX,IAAIC,GAAS,QAWb,OAVID,IAAS,YACTC,EAAS,MACTD,GAAS,YACFA,GAAS,SAChBC,EAAS,MACTD,GAAS,SACFA,GAAS,OAChBC,EAAS,MACTD,GAAS,MAENE,KAAKC,MAAc,IAARH,GAAe,IAAMC,EAhF9C,GAkFOG,GAjFAC,EAAQC,OAAOD,MAAOE,EAAcF,EAAMG,GAAGD,YAAaE,EAAgBnB,EAAEmB,cAAeC,EAAQpB,EAAEoB,MAAOC,EAASrB,EAAEqB,OAAQC,EAAaP,EAAMO,WAAYC,EAAoB,aAAcC,EAAQ,QAASC,EAAK,qBAAsBC,EAAY,OAAQC,EAAY,OAAQC,EAAY,OAAQC,GACpSC,MAAOF,EACPG,IAAK,OACNC,EAAYjB,EAAMkB,SAAS,yLAClCZ,IAAO,EAAMN,EAAMmB,MACfC,SACIC,cACIF,KAAM,SAAUA,GACZ,MAAOA,GAAKG,OAASH,OAEzBI,OACIC,GAAI,OACJC,QACIjC,KAAM,OACNkC,KAAM,OACNC,KAAM,aAM1BrB,GAAO,EAAMN,EAAMmB,MACfS,YACIP,aAAgBrB,EAAMmB,KAAKU,gBAAgBvB,QACvCwB,KAAM,SAAUC,GACZ/B,EAAMmB,KAAKU,gBAAgBG,GAAGF,KAAKG,KAAKC,KAAMjD,EAAEqB,QAAO,KAAU4B,KAAKH,QAASA,KAEnFI,MAAO,SAAUR,EAAMI,GACnBA,EAAQZ,KAAOlC,EAAEqB,UAAWyB,EAAQZ,MAAQ5B,KAAM2C,KAAKH,QAAQxC,SAC3DgB,EAAW2B,KAAKH,QAAQJ,IACxBO,KAAKH,QAAQJ,GAAMM,KAAKC,KAAMH,GAE9B/B,EAAMmB,KAAKU,gBAAgBG,GAAGL,GAAMM,KAAKC,KAAMH,IAGvDK,KAAM,SAAUL,GACZG,KAAKC,MAAM,OAAQJ,IAEvBM,OAAQ,SAAUN,GACdG,KAAKC,MAAM,SAAUJ,IAEzBO,QAAS,SAAUP,GACfG,KAAKC,MAAM,UAAWJ,IAE1BQ,OAAQ,aAERR,SACIK,MAAQT,KAAM,QACdY,QAAUZ,KAAM,QAChBU,QAAUV,KAAM,QAChBW,SAAWX,KAAM,cA+B7B5B,EAAeG,EAAYI,QAC3BwB,KAAM,SAAU1C,EAAS2C,GACrB,GAAIS,GAAON,IACXH,GAAUA,MACV7B,EAAY8B,GAAGF,KAAKG,KAAKO,EAAMpD,EAAS2C,GACxCS,EAAKpD,QAAQqD,SAAS,mBAE1BV,SACIvC,KAAM,eACNkD,UAAW,4BAEf/C,MAAO,WACH,GAAkDJ,GAA9CiD,EAAON,KAAMS,EAAWH,EAAKI,gBAAuBC,EAAWL,EAAKT,QAAQe,UAAUD,QAC1F,IAAIF,GAAwC,MAA5BA,EAASI,IAAIlC,GAKzB,MAJAtB,GAAOD,EAAYkD,EAAKjD,OAAQoD,EAASI,IAAIpC,IAAYqC,QAAQxC,EAAmB,IAChFqC,IACAtD,EAAOgB,EAAWsC,GAAYA,EAAStD,GAAQS,EAAMiD,OAAOJ,EAAUK,mBAAmB3D,KAEtFA,GAGf4D,YAAa,SAAUC,GACnB,GAA0RC,GAAtRb,EAAON,KAAMH,EAAUS,EAAKT,QAASW,EAAYX,EAAQW,UAAWY,EAAmBC,QAAQ,IAAMb,EAAUc,MAAM,KAAKC,KAAK,OAAS,KAAKT,QAAQ,QAAS,OAAQ,KAAMU,EAAWN,EAAEO,MAAM,GAAGnE,KAAMoE,EAAWR,EAAEO,MAAM,GAAGjC,KAAMmC,EAAgBlD,EAAWmD,EAAYlD,CAC3Q0C,GAAaS,KAAKL,IAClBN,EAAEjC,MAAS5B,KAAMiD,EAAKjD,QACtB8D,EAAOb,EAAKwB,YAAYN,EAAUE,GAC7BP,GAGDA,EAAKY,YAAa,EAClBzB,EAAK0B,OAAOC,IAAI,QAAS,WACrBd,EAAOnE,IAEXsD,EAAK0B,OAAOC,IAAI,UAAW,SAAUf,GACjC,GAAIC,EAAM,OACCA,GAAKY,UACZ,IAAI1C,GAAQiB,EAAK4B,kBAAkBf,EACnC9B,GAAM8C,IAAIR,EAAeT,EAAEkB,SAAS9B,EAAK+B,cAAcV,KACvDtC,EAAM8C,IAAIP,EAAWV,EAAEkB,SAAS9B,EAAK+B,cAAcT,KACnDtB,EAAKgC,OAAShC,EAAKiC,SAASnD,QAAQoD,OAAO,IAAM1E,EAAM2E,KAAK,QAAU,OACtEnC,EAAKoC,cAbbxB,EAAEyB,mBAkBNzB,EAAEyB,iBACFrC,EAAKsC,aAAa9E,EAAMiD,OAAOlB,EAAQgD,SAASC,gBAAiBtB,EAAUhB,MAGnFuC,SAAU,WACN,GAAIzC,GAAON,IACXM,GAAK0C,KAAOjG,EAAE,0CAA0CkG,SAAS3C,EAAKpD,SAASgG,GAAG,WAAa1E,EAAI,mBAAoBL,EAAMmC,EAAK6C,UAAW7C,IAC7IA,EAAKiC,SAAW,GAAIzE,GAAMG,GAAGmF,SAAS9C,EAAK0C,MACvCK,OAAQ,OACRC,MACIC,UAAW,MACXC,KAAM,QAEVC,WAAYnD,EAAKmD,WACjBzE,SAAUsB,EAAKoD,YACfC,aAAcrD,EAAKsD,YACnBC,YAAY,EACZC,UAAU,EACVC,YAAa,SAAU7C,GACnBZ,EAAK0D,QAAQC,KAAK,cAAcC,SAAS3D,SAAS,oBACjC,WAAbW,EAAEiD,QAAoC,SAAbjD,EAAEiD,SAC3BjD,EAAEyB,iBACF7E,EAAMG,GAAGmG,SAAS9D,EAAKiC,SAAS8B,SAAS,KAGjDC,UAAW,WACHhE,EAAKmD,WAAWc,OAAOC,QACvBlE,EAAKgC,OAAStC,KAAKZ,QAAQoD,OAAO,IAAM1E,EAAM2E,KAAK,QAAU,OAC7DnC,EAAKoC,WAEL1C,KAAKqE,QAAQI,OAAO1F,GAAY2F,KAAMpE,EAAKT,QAAQgD,SAAS8B,gBAGpEC,OAAQzG,EAAMmC,EAAKuE,gBAAiBvE,KAExCA,EAAKiC,SAAS8B,QAAQnB,GAAG,SAAW1E,EAAIL,EAAMmC,EAAKoC,QAASpC,KAEhEwE,YAAa,WACT,GAGOC,GAHHzE,EAAON,KAAMH,EAAUS,EAAKT,QAASe,EAAYf,EAAQe,UAAWoE,EAAgB5G,KAAWQ,GAAmBqG,GAC9GpG,MAAOJ,EACPK,IAAK,OACE2E,GACPhE,KAAMmB,EAAUnB,MAAQ,eACxByF,MACIF,EACAC,GAGR/G,GAAc0C,KACdA,EAAUvD,KAAOc,EAAMmC,EAAKjD,KAAMiD,GAClCmD,EAAW7C,UAAYA,GAEvB1C,EAAc2B,EAAQkF,QACtBtB,EAAWsB,OAASlF,EAAQkF,OACrBnE,EAAUnB,MAAQvB,EAAcJ,EAAMmB,KAAKC,QAAQ0B,EAAUnB,SACpEsF,EAASjH,EAAMmB,KAAKC,QAAQ0B,EAAUnB,OAEtCa,EAAKmD,YAAcnD,EAAK6E,cACxB7E,EAAKmD,WAAW2B,OAAO7G,EAAO+B,EAAK6E,eAEnC7E,EAAK6E,cAAgBhH,EAAMmC,EAAK+E,OAAQ/E,GAE5CA,EAAKmD,WAAa3F,EAAMmB,KAAKqG,WAAWnF,OAAOsD,GAAY8B,KAAKhH,EAAO+B,EAAK6E,gBAEhFK,WAAY,SAAUC,GAClB,GAAInF,GAAON,KAAM9C,EAAUH,EAAE0I,GAAKC,EAAWpF,EAAKmD,WAAWkC,SAASzI,EAAQuF,KAAK3E,EAAM2E,KAAK,SAAUnF,EAAOoI,EAAS7E,IAAIpC,GAAYmH,EAAetF,EAAKT,QAAQe,UAAUgF,aAAcC,EAAM9I,EAAE,WAAa+I,IAAKxI,IAASyI,EAAU,GACrOL,GAAS3D,aAGb8D,EAAIG,OAAO9C,GAAG,OAAS1E,EAAI,WACvBzB,EAAEiD,MAAMiG,OAAOC,SAASC,MAAM5F,SAAS,wBAAwB6F,WAEnElJ,EAAQ+G,KAAK,gBAAgBoC,MAAMR,GAC/BxH,EAAWuH,GACXA,EAAeA,EAAatF,EAAKjD,OAAQ2D,mBAAmB1D,KAExDsI,EAAaU,QAAQ,MAAQ,IAC7BP,EAAU,KAEdH,EAAeA,EAAeG,EAAU,QAAU/E,mBAAmBV,EAAKjD,OAASC,GAC/EoI,EAASa,YACTX,GAAgB,OAAQ,GAAIY,OAAOC,gBAC5Bf,GAASa,YAGxBV,EAAIpD,KAAK,MAAOmD,GAChBH,EAAGiB,QAAS,IAEhBhE,QAAS,WACL,GAAIpC,GAAON,IACPM,GAAKT,QAAQe,WAAaN,EAAKT,QAAQe,UAAUgF,eACjDe,aAAarG,EAAKsG,UAClBtG,EAAKsG,SAAWC,WAAW,WACvB,GAAI1J,GAASW,EAAMgJ,aAAaxG,EAAKiC,SAAS8B,SAAU0C,EAAUzG,EAAKiC,SAAS8B,QAAQ2C,YAAaC,EAAaF,EAAU5J,CAC5HmD,GAAKgC,OAAO4E,KAAK,WACb,GAAIC,GAAMlK,EAAU+C,MAAOoH,EAASD,EAAMnH,KAAKqH,YAI/C,KAHIF,GAAOJ,GAAWI,EAAMF,GAAcG,GAAUL,GAAWK,EAASH,IACpE3G,EAAKkF,WAAWxF,MAEhBmH,EAAMF,EACN,OAAO,IAGf3G,EAAKgC,OAAShC,EAAKgC,OAAOE,OAAO,WAC7B,OAAQxC,KAAK0G,UAElB,OAGXhD,UAAW,WACP,GAAIpD,GAAON,KAAMsH,EAAO,gCAAkCxJ,EAAM2E,KAAK,OAAS,YAc9E,OAbA6E,IAAQxJ,EAAM2E,KAAK,QAAU,OAAS9D,EAAY,MAClD2I,GAAQ,OAAS3I,EAAY,eAC7B2I,GAAQ,wFACRA,GAAQ,WAEJA,GADAhH,EAAKT,QAAQe,WAAaN,EAAKT,QAAQe,UAAUgF,aACzC,yFAEA,sFAEZ0B,GAAQ,MACRA,GAAQ,+BAAiC7I,EAAY,WACrD6I,GAAQ,OAAS3I,EAAY,+DAAiED,EAAY,gBAC1G4I,GAAQ,SACDnJ,EAAML,EAAMkB,SAASsI,IAAS9J,cAAeA,OAG5DM,EAAMG,GAAGsJ,OAAO1J,IAClBE,OAAOD,MAAM0J,QACRzJ,OAAOD,OACE,kBAAVhB,SAAwBA,OAAO2K,IAAM3K,OAAS,SAAU4K,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.imagebrowser.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.imagebrowser', ['kendo.filebrowser'], f);\n}(function () {\n var __meta__ = {\n id: 'imagebrowser',\n name: 'ImageBrowser',\n category: 'web',\n description: '',\n hidden: true,\n depends: ['filebrowser']\n };\n (function ($, undefined) {\n var kendo = window.kendo, FileBrowser = kendo.ui.FileBrowser, isPlainObject = $.isPlainObject, proxy = $.proxy, extend = $.extend, isFunction = kendo.isFunction, trimSlashesRegExp = /(^\\/|\\/$)/g, ERROR = 'error', NS = '.kendoImageBrowser', NAMEFIELD = 'name', SIZEFIELD = 'size', TYPEFIELD = 'type', DEFAULTSORTORDER = {\n field: TYPEFIELD,\n dir: 'asc'\n }, EMPTYTILE = kendo.template('
${text}
');\n extend(true, kendo.data, {\n schemas: {\n 'imagebrowser': {\n data: function (data) {\n return data.items || data || [];\n },\n model: {\n id: 'name',\n fields: {\n name: 'name',\n size: 'size',\n type: 'type'\n }\n }\n }\n }\n });\n extend(true, kendo.data, {\n transports: {\n 'imagebrowser': kendo.data.RemoteTransport.extend({\n init: function (options) {\n kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\n },\n _call: function (type, options) {\n options.data = $.extend({}, options.data, { path: this.options.path() });\n if (isFunction(this.options[type])) {\n this.options[type].call(this, options);\n } else {\n kendo.data.RemoteTransport.fn[type].call(this, options);\n }\n },\n read: function (options) {\n this._call('read', options);\n },\n create: function (options) {\n this._call('create', options);\n },\n destroy: function (options) {\n this._call('destroy', options);\n },\n update: function () {\n },\n options: {\n read: { type: 'POST' },\n update: { type: 'POST' },\n create: { type: 'POST' },\n destroy: { type: 'POST' }\n }\n })\n }\n });\n function offsetTop(element) {\n return element.offsetTop - $(element).height();\n }\n function concatPaths(path, name) {\n if (path === undefined || !path.match(/\\/$/)) {\n path = (path || '') + '/';\n }\n return path + name;\n }\n function sizeFormatter(value) {\n if (!value) {\n return '';\n }\n var suffix = ' bytes';\n if (value >= 1073741824) {\n suffix = ' GB';\n value /= 1073741824;\n } else if (value >= 1048576) {\n suffix = ' MB';\n value /= 1048576;\n } else if (value >= 1024) {\n suffix = ' KB';\n value /= 1024;\n }\n return Math.round(value * 100) / 100 + suffix;\n }\n var ImageBrowser = FileBrowser.extend({\n init: function (element, options) {\n var that = this;\n options = options || {};\n FileBrowser.fn.init.call(that, element, options);\n that.element.addClass('k-imagebrowser');\n },\n options: {\n name: 'ImageBrowser',\n fileTypes: '*.png,*.gif,*.jpg,*.jpeg'\n },\n value: function () {\n var that = this, selected = that._selectedItem(), path, imageUrl = that.options.transport.imageUrl;\n if (selected && selected.get(TYPEFIELD) === 'f') {\n path = concatPaths(that.path(), selected.get(NAMEFIELD)).replace(trimSlashesRegExp, '');\n if (imageUrl) {\n path = isFunction(imageUrl) ? imageUrl(path) : kendo.format(imageUrl, encodeURIComponent(path));\n }\n return path;\n }\n },\n _fileUpload: function (e) {\n var that = this, options = that.options, fileTypes = options.fileTypes, filterRegExp = new RegExp(('(' + fileTypes.split(',').join(')|(') + ')').replace(/\\*\\./g, '.*.'), 'i'), fileName = e.files[0].name, fileSize = e.files[0].size, fileNameField = NAMEFIELD, sizeField = SIZEFIELD, file;\n if (filterRegExp.test(fileName)) {\n e.data = { path: that.path() };\n file = that._createFile(fileName, fileSize);\n if (!file) {\n e.preventDefault();\n } else {\n file._uploading = true;\n that.upload.one('error', function () {\n file = undefined;\n });\n that.upload.one('success', function (e) {\n if (file) {\n delete file._uploading;\n var model = that._insertFileToList(file);\n model.set(fileNameField, e.response[that._getFieldName(fileNameField)]);\n model.set(sizeField, e.response[that._getFieldName(sizeField)]);\n that._tiles = that.listView.items().filter('[' + kendo.attr('type') + '=f]');\n that._scroll();\n }\n });\n }\n } else {\n e.preventDefault();\n that._showMessage(kendo.format(options.messages.invalidFileType, fileName, fileTypes));\n }\n },\n _content: function () {\n var that = this;\n that.list = $('
').appendTo(that.element).on('dblclick' + NS, '.k-listview-item', proxy(that._dblClick, that));\n that.listView = new kendo.ui.ListView(that.list, {\n layout: 'flex',\n flex: {\n direction: 'row',\n wrap: 'wrap'\n },\n dataSource: that.dataSource,\n template: that._itemTmpl(),\n editTemplate: that._editTmpl(),\n selectable: true,\n autoBind: false,\n dataBinding: function (e) {\n that.toolbar.find('.k-i-close').parent().addClass('k-state-disabled');\n if (e.action === 'remove' || e.action === 'sync') {\n e.preventDefault();\n kendo.ui.progress(that.listView.content, false);\n }\n },\n dataBound: function () {\n if (that.dataSource.view().length) {\n that._tiles = this.items().filter('[' + kendo.attr('type') + '=f]');\n that._scroll();\n } else {\n this.content.append(EMPTYTILE({ text: that.options.messages.emptyFolder }));\n }\n },\n change: proxy(that._listViewChange, that)\n });\n that.listView.content.on('scroll' + NS, proxy(that._scroll, that));\n },\n _dataSource: function () {\n var that = this, options = that.options, transport = options.transport, typeSortOrder = extend({}, DEFAULTSORTORDER), nameSortOrder = {\n field: NAMEFIELD,\n dir: 'asc'\n }, schema, dataSource = {\n type: transport.type || 'imagebrowser',\n sort: [\n typeSortOrder,\n nameSortOrder\n ]\n };\n if (isPlainObject(transport)) {\n transport.path = proxy(that.path, that);\n dataSource.transport = transport;\n }\n if (isPlainObject(options.schema)) {\n dataSource.schema = options.schema;\n } else if (transport.type && isPlainObject(kendo.data.schemas[transport.type])) {\n schema = kendo.data.schemas[transport.type];\n }\n if (that.dataSource && that._errorHandler) {\n that.dataSource.unbind(ERROR, that._errorHandler);\n } else {\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(ERROR, that._errorHandler);\n },\n _loadImage: function (li) {\n var that = this, element = $(li), dataItem = that.dataSource.getByUid(element.attr(kendo.attr('uid'))), name = dataItem.get(NAMEFIELD), thumbnailUrl = that.options.transport.thumbnailUrl, img = $('', { alt: name }), urlJoin = '?';\n if (dataItem._uploading) {\n return;\n }\n img.hide().on('load' + NS, function () {\n $(this).prev().remove().end().addClass('k-image k-file-image').fadeIn();\n });\n element.find('.k-i-loading').after(img);\n if (isFunction(thumbnailUrl)) {\n thumbnailUrl = thumbnailUrl(that.path(), encodeURIComponent(name));\n } else {\n if (thumbnailUrl.indexOf('?') >= 0) {\n urlJoin = '&';\n }\n thumbnailUrl = thumbnailUrl + urlJoin + 'path=' + encodeURIComponent(that.path() + name);\n if (dataItem._override) {\n thumbnailUrl += '&_=' + new Date().getTime();\n delete dataItem._override;\n }\n }\n img.attr('src', thumbnailUrl);\n li.loaded = true;\n },\n _scroll: function () {\n var that = this;\n if (that.options.transport && that.options.transport.thumbnailUrl) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n var height = kendo._outerHeight(that.listView.content), viewTop = that.listView.content.scrollTop(), viewBottom = viewTop + height;\n that._tiles.each(function () {\n var top = offsetTop(this), bottom = top + this.offsetHeight;\n if (top >= viewTop && top < viewBottom || bottom >= viewTop && bottom < viewBottom) {\n that._loadImage(this);\n }\n if (top > viewBottom) {\n return false;\n }\n });\n that._tiles = that._tiles.filter(function () {\n return !this.loaded;\n });\n }, 250);\n }\n },\n _itemTmpl: function () {\n var that = this, html = '
';\n html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n html += '
';\n html += '#}else{#';\n if (that.options.transport && that.options.transport.thumbnailUrl) {\n html += '
';\n } else {\n html += '
';\n }\n html += '#}#';\n html += '${' + NAMEFIELD + '}';\n html += '#if(' + TYPEFIELD + ' == \"f\") { # ${this.sizeFormatter(' + SIZEFIELD + ')} #}#';\n html += '
';\n return proxy(kendo.template(html), { sizeFormatter: sizeFormatter });\n }\n });\n kendo.ui.plugin(ImageBrowser);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}