Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

base.js 278KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732
  1. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  2. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var Unibase;
  11. (function (Unibase) {
  12. let Apps;
  13. (function (Apps) {
  14. let Collaboration;
  15. (function (Collaboration) {
  16. let Components;
  17. (function (Components) {
  18. let Sheets;
  19. (function (Sheets) {
  20. class Base {
  21. constructor() {
  22. this.isViewOnly = false;
  23. this.editedTime = new Date();
  24. this.lastEditedTime = 0;
  25. this.f2Edit = false;
  26. this.showFormula = false;
  27. this.fontFamilyRecent = [];
  28. this.isFormula = false;
  29. this.isResizing = false;
  30. this.rowwidthcount = 0;
  31. this.isNewSheet = false;
  32. this.reqCount = 0;
  33. this.isInitial = true;
  34. this.clicks = 0;
  35. this.autofillDrag = false;
  36. this.checkedIndexes = [];
  37. this.selectedIndexes = [null, null, null, null];
  38. this.isCtrlA = false;
  39. this.isCreatingNewFile = false;
  40. this.isDriveImport = false;
  41. this.openJSON = false;
  42. }
  43. init(response, res, customresponce, callback) {
  44. this.result = response.result;
  45. this.documentGroup = this.result.DocumentGroup;
  46. this.customresult = customresponce.result;
  47. this.filedata = res.result;
  48. this.FileName = response.result.FileTitle;
  49. this.FileId = response.result.FileId;
  50. this.permissionLevel = response.result.UserPermission;
  51. this.lastEditedTime = response.result.LastUpdateTime;
  52. this.timePeriod = response.result.TimePeriod;
  53. this.username = response.result.LastUpdateByName;
  54. this.folderId = response.result.folderId;
  55. this.fileurl = response.result.FileUrl;
  56. this.Priority = response.result.Priority;
  57. this.newUpload = response.result.NewUpload;
  58. this.NewDocument = response.result.NewDocument;
  59. this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  60. this.unibaseusername = this.identity.name;
  61. this.hederText = {};
  62. this.mouseDownHandlers = [];
  63. this.keyDownHandlers = [];
  64. this.render();
  65. if (callback != null) {
  66. callback();
  67. }
  68. }
  69. clickHandler(e) {
  70. if (e.target.getAttribute('id') == 'importdata-cancel-bt') {
  71. }
  72. if (e.target.getAttribute('id') == 'importdata-select-btn') {
  73. }
  74. }
  75. removeListeners() {
  76. }
  77. unwireBootStrapKeyEvent() {
  78. let popup = document.body.getElementsByClassName('_bizgaze_popup_container');
  79. let events = $._data($(popup)[0], "events");
  80. if (events && events.keydown) {
  81. $(popup).off('keydown.dismiss.bs.modal', events.keydown[0].handler);
  82. }
  83. if (events && events.click) {
  84. events.click.filter((obj) => obj).forEach(click => {
  85. $(popup).off('click.dismiss.bs.modal', click.handler);
  86. });
  87. }
  88. }
  89. clearFindReplace() {
  90. if (!this.ssObj.element.querySelector('.e-find-dlg') && !this.ssObj.element.querySelector('.e-findtool-dlg')) {
  91. this.ssObj.ribbonModule.findValue = '';
  92. this.ssObj.findAndReplaceModule.shortValue = '';
  93. }
  94. }
  95. fullScreenHandler() {
  96. setTimeout(() => {
  97. this.setHeightOnFullScreenChange();
  98. }, 0);
  99. }
  100. processSheetRender() {
  101. this.updateProps();
  102. this.renderMenuBar();
  103. this.refreshHeight();
  104. this.ssRender();
  105. this.ribbon.init(this.result);
  106. if (this.permissionLevel && this.permissionLevel == Unibase.Apps.Collaboration.Enums.Share.Viewer) {
  107. setTimeout(() => {
  108. this.setViewonly();
  109. this.ssObj.dataBind();
  110. }, 0);
  111. }
  112. this.unwireBootStrapKeyEvent();
  113. this.priorityRender();
  114. this.eventListners();
  115. this.colourpicker();
  116. }
  117. connectHub(fileId, documentgroup) {
  118. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(["apps/collaboration/components/docconnector.js", "apps/collaboration/components/unidochub.js"], function () {
  119. Unibase.Apps.Collaboration.Components.DocConnector.Instance().init(fileId, documentgroup);
  120. });
  121. }
  122. sheetColorRender() {
  123. if (!this.NewDocument) {
  124. Unibase.Apps.Collaboration.DocumentManager.Instance().getCustomJsonData(this.FileId).then((res) => {
  125. var result = res.result.tabcolors;
  126. this.sheets = this.ssObj.element.querySelector('.e-sheet-tab').querySelectorAll('.e-toolbar-item');
  127. this.sheetsName = this.ssObj.element.querySelector('.e-sheet-tab .e-active').querySelector('.e-tab-text');
  128. var R;
  129. var G;
  130. var B;
  131. for (var i = 0; i < this.sheets.length; i++) {
  132. if (result.sheets[i].TabColor !== null && result.sheets[i].TabColor !== undefined && result.sheets[i].TabColor.Name !== "0" && result.sheets[i].TabColor.Name !== null && result.sheets[i].TabColor.Name !== undefined) {
  133. if (result.sheets[i].TabColor.R == null || result.sheets[i].TabColor.R == "") {
  134. R = 0;
  135. }
  136. else {
  137. R = result.sheets[i].TabColor.R;
  138. }
  139. if (result.sheets[i].TabColor.G == null || result.sheets[i].TabColor.G == "") {
  140. G = 0;
  141. }
  142. else {
  143. G = result.sheets[i].TabColor.G;
  144. }
  145. if (result.sheets[i].TabColor.B == null || result.sheets[i].TabColor.B == "") {
  146. B = 0;
  147. }
  148. else {
  149. B = result.sheets[i].TabColor.B;
  150. }
  151. document.getElementById(this.sheets[i].id).style.borderBottom = "4px solid rgb(" + R + "," + G + "," + B + ")";
  152. document.getElementById(this.sheets[i].id).firstElementChild.style.height = "100%";
  153. }
  154. }
  155. document.getElementsByClassName("e-indicator e-ignore")[1].style.display = "none";
  156. });
  157. }
  158. document.getElementsByClassName("e-indicator e-ignore")[1].style.display = "none";
  159. }
  160. sheetColorChange(colorcode) {
  161. var sheetIndex = this.ssObj.activeSheetIndex;
  162. if (sheetIndex != null) {
  163. var rgbcolor = [];
  164. var name;
  165. if (colorcode != "0") {
  166. rgbcolor = this.hexToRgb(colorcode);
  167. name = "#" + colorcode;
  168. }
  169. else {
  170. rgbcolor.push(0);
  171. rgbcolor.push(0);
  172. rgbcolor.push(0);
  173. name = colorcode;
  174. }
  175. var data = {
  176. FileId: this.FileId,
  177. TabColor: rgbcolor,
  178. SheetIndex: sheetIndex,
  179. SheetHexCode: name,
  180. };
  181. Unibase.Apps.Collaboration.DocumentManager.Instance().saveSheetColor(data).then((responce) => {
  182. if (colorcode != 0) {
  183. document.getElementById(this.sheets[sheetIndex].id).style.borderBottom = "4px solid rgb(" + rgbcolor[0] + "," + rgbcolor[1] + "," + rgbcolor[2] + ")";
  184. document.getElementById(this.sheets[sheetIndex].id).firstElementChild.style.height = "100%";
  185. }
  186. else {
  187. document.getElementById(this.sheets[sheetIndex].id).style.borderBottom = "none";
  188. }
  189. document.getElementsByClassName("e-indicator e-ignore")[1].style.display = "none";
  190. this.customresult = responce.result.tabcolor;
  191. this.editDetails();
  192. let args = {
  193. origin: 'biz', action: 'colorchange', sheetIndex: this.getSheetIndex()
  194. };
  195. Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().bizSignalr(args);
  196. });
  197. }
  198. }
  199. hexToRgb(hex) {
  200. var rgb = hex.match(/.{1,2}/g);
  201. var arrayRgb = [
  202. parseInt(rgb[0], 16),
  203. parseInt(rgb[1], 16),
  204. parseInt(rgb[2], 16),
  205. ];
  206. return arrayRgb;
  207. }
  208. priorityRender() {
  209. if (this.Priority) {
  210. $(".biz_ss_star_icon_" + this.FileId).removeClass("fa-star-o");
  211. $(".biz_ss_star_icon_" + this.FileId).addClass("fa-star");
  212. $(".biz_ss_star_icon_" + this.FileId).removeClass("text-light");
  213. $(".biz_ss_star_icon_" + this.FileId).css("color", "orange");
  214. }
  215. }
  216. render() {
  217. this.renderPopup(this.processSheetRender.bind(this));
  218. }
  219. parseMatchValue(value) {
  220. if (value.trim().toLowerCase() == "true" || value.trim() == "1") {
  221. return true;
  222. }
  223. return false;
  224. }
  225. ssRender() {
  226. this.ssObj = new ej.spreadsheet.Spreadsheet(this.ssSettings);
  227. this.formatpainter.init(this);
  228. this.spellchecker.init(this);
  229. if (this.permissionLevel && this.permissionLevel == Unibase.Apps.Collaboration.Enums.Share.Viewer) {
  230. this.initialLoadFn = this.initialLoad.bind(this);
  231. this.ssObj.on("initialLoad", this.initialLoadFn);
  232. }
  233. this.ssObj.on("initialLoad", this.addFormatsToToolbar.bind(this));
  234. this.ssObj.on("deleteImage", this.deleteImageHandler, this);
  235. this.ssObj.on('performUndoRedo', this.performBizUndoRedo.bind(this));
  236. setTimeout(() => {
  237. this.fontFamilyObj = this.ssObj.element.querySelector('#' + this.ssObj.element.id + '_font_name').ej2_instances[0];
  238. this.fontFamilyObj.addEventListener('beforeOpen', this.fontFamilyBfOpen.bind(this));
  239. this.fontFamilyObj.beforeItemRender = this.fontFamilyBfRender.bind(this);
  240. this.fontFamilyObj.addEventListener('select', this.fontFamilySelect.bind(this));
  241. window.hlookupHandler = (value, range, rowIdx, match) => {
  242. var val = this.ssObj.element.querySelector('.e-spreadsheet-edit').innerText;
  243. range = val.split('(')[1].split(')')[0].split(',')[1];
  244. };
  245. window.vlookupHandler = (value, range, colIdx, match) => {
  246. let sheet = this.ssObj.biz.getActiveSheet();
  247. let val = this.ssObj.element.querySelector('.e-spreadsheet-edit').innerText;
  248. range = val.split('(')[1].split(')')[0].split(',')[1];
  249. colIdx = parseInt(colIdx);
  250. value = value.replace(/['"]+/g, '');
  251. match = this.parseMatchValue(match);
  252. let ranges = ej.spreadsheet.getIndexesFromAddress(range);
  253. let i, j;
  254. let isMatched;
  255. if (value.includes('#NAME')) {
  256. return value;
  257. }
  258. if (ranges[3] - ranges[1] + 1 < colIdx || colIdx < 1) {
  259. return '#REF!';
  260. }
  261. for (i = ranges[0]; i <= ranges[2]; i++) {
  262. if (isMatched) {
  263. break;
  264. }
  265. for (j = ranges[1]; j <= ranges[3]; j++) {
  266. let cellObj = ej.spreadsheet.getCell(i, j, sheet);
  267. if (cellObj && cellObj.value && match ? cellObj.value.toString() === value : cellObj.value.toString().toLowerCase() === value.toLowerCase()) {
  268. isMatched = true;
  269. break;
  270. }
  271. }
  272. }
  273. let cell = ej.spreadsheet.getCell(i - 1, ranges[1] + colIdx - 1, sheet);
  274. if (isMatched && cell) {
  275. return cell.value || '';
  276. }
  277. else {
  278. return '#N/A';
  279. }
  280. };
  281. window.hlookupHandler = (value, range, rowIdx, match) => {
  282. let sheet = this.ssObj.biz.getActiveSheet();
  283. let val = this.ssObj.element.querySelector('.e-spreadsheet-edit').innerText;
  284. range = val.split('(')[1].split(')')[0].split(',')[1];
  285. rowIdx = parseInt(rowIdx);
  286. value = value.replace(/['"]+/g, '');
  287. match = this.parseMatchValue(match);
  288. let ranges = ej.spreadsheet.getIndexesFromAddress(range);
  289. let i, j;
  290. let isMatched;
  291. if (value.includes('#NAME')) {
  292. return value;
  293. }
  294. if (ranges[2] - ranges[0] + 1 < rowIdx || rowIdx < 1) {
  295. return '#REF!';
  296. }
  297. for (i = ranges[0]; i <= ranges[2]; i++) {
  298. if (isMatched) {
  299. break;
  300. }
  301. for (j = ranges[1]; j <= ranges[3]; j++) {
  302. let cellObj = ej.spreadsheet.getCell(i, j, sheet);
  303. if (cellObj && cellObj.value && match ? cellObj.value.toString() === value : cellObj.value.toString().toLowerCase() === value.toLowerCase()) {
  304. isMatched = true;
  305. break;
  306. }
  307. }
  308. }
  309. let cell = ej.spreadsheet.getCell(ranges[0] + rowIdx - 1, j, sheet);
  310. if (isMatched && cell) {
  311. return cell.value || '';
  312. }
  313. else {
  314. return '#N/A';
  315. }
  316. };
  317. this.ssObj.addCustomFunction("hlookupHandler", "hlookup");
  318. this.ssObj.addCustomFunction("vlookupHandler", "vlookup");
  319. }, 1000);
  320. this.wireEvents();
  321. this.ssObj.appendTo('.DocumentViewer');
  322. this.ssObj.biz = {};
  323. this.addUtilFn();
  324. Unibase.Apps.Collaboration.Components.Documents.Instance()._openedfile = this.ssObj;
  325. this.initSetInterval();
  326. document.getElementsByClassName('e-spinner-pane')[0].style.display = 'none';
  327. }
  328. dialogOpenHandler(args) {
  329. if (args.dialogName == "ValidationDialog") {
  330. args.element.ej2_instances[0].addEventListener("open", (arg) => {
  331. document.querySelector(".e-validation-dlg .e-allow input").ej2_instances[0].addEventListener("change", this.validationInputHandler.bind(this));
  332. });
  333. args.element.ej2_instances[0].addEventListener("beforeClose", (arg) => {
  334. document.querySelector(".e-validation-dlg .e-allow input").ej2_instances[0].removeEventListener("change", this.validationInputHandler.bind(this));
  335. });
  336. }
  337. }
  338. validationInputHandler(changedargs) {
  339. let dataNote = "Note: date format should be MM/DD/YYYY";
  340. let timeNote = "Note: time format should be HH:MM:SS AM/PM ";
  341. let listNote = "Note: List will be seperated by comma(,)";
  342. let validationDailog = document.getElementsByClassName("e-validation-dlg")[0];
  343. let ele = document.createElement("div");
  344. let container = document.createElement("div");
  345. container.classList.add("biz-validation-note-wrapper");
  346. ele.classList.add("biz-validation-note");
  347. container.append(ele);
  348. let wrapperElement = document.getElementsByClassName("biz-validation-note-wrapper");
  349. if (changedargs.value == "Date") {
  350. if (wrapperElement.length == 0) {
  351. document.getElementsByClassName("e-cellrange")[0].before(container);
  352. ele.textContent = dataNote;
  353. validationDailog.style.marginTop = "0";
  354. container.style.marginBottom = "10px";
  355. }
  356. else
  357. document.getElementsByClassName("biz-validation-note")[0].textContent = dataNote;
  358. }
  359. else if (changedargs.value == "Time") {
  360. if (wrapperElement.length == 0) {
  361. document.getElementsByClassName("e-cellrange")[0].before(container);
  362. ele.textContent = timeNote;
  363. validationDailog.style.marginTop = "0";
  364. container.style.marginBottom = "10px";
  365. }
  366. else {
  367. document.getElementsByClassName("biz-validation-note")[0].textContent = timeNote;
  368. }
  369. }
  370. else if (changedargs.value == "List") {
  371. if (wrapperElement.length == 0) {
  372. document.getElementsByClassName("e-cellrange")[0].before(container);
  373. ele.textContent = listNote;
  374. validationDailog.style.marginTop = "0";
  375. container.style.marginBottom = "10px";
  376. }
  377. else {
  378. document.getElementsByClassName("biz-validation-note")[0].textContent = listNote;
  379. }
  380. }
  381. else {
  382. (wrapperElement.length !== 0) && wrapperElement[0].remove();
  383. validationDailog.style.marginTop = "";
  384. container.style.marginBottom = "";
  385. }
  386. }
  387. deleteImageHandler(args) {
  388. let sheet = this.ssObj.getActiveSheet();
  389. let sheetName = this.setSheetNameForInCell(sheet.name);
  390. if (!args.id.includes(sheetName) && document.getElementById(args.id)) {
  391. let data = document.getElementById(args.id).style.backgroundImage;
  392. args["src"] = data.substring(5, data.length - 2);
  393. let img = sheet.pictures.find(x => x.imageId == args.id);
  394. setTimeout(() => {
  395. if (img) {
  396. let index = sheet.pictures.indexOf(img);
  397. args.id += "_" + sheetName + "_" + img.row + "_" + img.col + "_import";
  398. (index != -1) && (sheet.pictures.splice(index, 1));
  399. }
  400. }, 150);
  401. }
  402. setTimeout(() => {
  403. args["action"] = args.name;
  404. (args.id.includes(sheetName)) && (this.download.ssAutoSave(args, this, true));
  405. }, 200);
  406. }
  407. initSetInterval() {
  408. if (this.timePeriod === "Minutes" || this.timePeriod === "Minute") {
  409. this.intr = setInterval(() => {
  410. this.lastEditedTime = this.lastEditedTime + 1;
  411. this.username = this.username;
  412. this.timePeriod = this.timePeriod;
  413. if (this.lastEditedTime != 1) {
  414. if (this.lastEditedTime >= 59 && this.timePeriod === "Minutes") {
  415. Unibase.Apps.Collaboration.DocumentManager.Instance().lastEdit(this.FileId).then((response) => {
  416. this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  417. this.unibaseusername = this.identity.name;
  418. this.lastEditedTime = response.result.Lastedittime;
  419. this.username = response.result.LastUpdatedByName;
  420. this.timePeriod = response.result.TimePeriod;
  421. if (this.unibaseusername === this.username) {
  422. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  423. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago";
  424. }
  425. else {
  426. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  427. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username;
  428. }
  429. });
  430. }
  431. else {
  432. this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  433. this.unibaseusername = this.identity.name;
  434. if (this.unibaseusername === this.username) {
  435. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  436. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago";
  437. }
  438. else {
  439. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  440. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username;
  441. }
  442. }
  443. }
  444. }, 60000);
  445. }
  446. else if (this.timePeriod === "Hour" || this.timePeriod === "Hours") {
  447. this.intrhour = setInterval(() => {
  448. this.lastEditedTime = this.lastEditedTime + 1;
  449. this.username = this.username;
  450. this.timePeriod = this.timePeriod;
  451. if (this.lastEditedTime >= 23 && this.timePeriod === "Hours") {
  452. Unibase.Apps.Collaboration.DocumentManager.Instance().lastEdit(this.FileId).then((response) => {
  453. this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  454. this.unibaseusername = this.identity.name;
  455. this.lastEditedTime = response.result.Lastedittime;
  456. this.username = response.result.LastUpdatedByName;
  457. this.timePeriod = response.result.TimePeriod;
  458. if (this.unibaseusername === this.username) {
  459. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  460. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago";
  461. }
  462. else {
  463. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  464. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username;
  465. }
  466. });
  467. }
  468. else {
  469. this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  470. this.unibaseusername = this.identity.name;
  471. if (this.unibaseusername === this.username) {
  472. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  473. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago";
  474. }
  475. else {
  476. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  477. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username;
  478. }
  479. }
  480. }, 3600000);
  481. }
  482. }
  483. activeUsers(FileUsers) {
  484. var connecteduser = [];
  485. for (var v in FileUsers) {
  486. let identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  487. let unibaseId = identity.unibaseId;
  488. if (unibaseId != FileUsers[v].unibaseId) {
  489. connecteduser.push(FileUsers[v].firstName.trim());
  490. }
  491. }
  492. this.connecteduserfirstName = connecteduser;
  493. console.log(this.connecteduserfirstName);
  494. this.showActiveUsers(FileUsers);
  495. return this.connecteduserfirstName;
  496. }
  497. showActiveUsers(FileUsers) {
  498. var onlineusername = document.getElementsByClassName("biz-ss-onlineusersintials")[0];
  499. let identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  500. let unibaseId = identity.unibaseId;
  501. var connectedUsersFirstChar = [];
  502. for (var user in this.connecteduserfirstName) {
  503. connectedUsersFirstChar.push(this.connecteduserfirstName[user].charAt(0));
  504. }
  505. var element = document.getElementById('biz-ss-connected_users_container');
  506. if (typeof (element) != 'undefined' && element != null) {
  507. element.remove();
  508. }
  509. let html = "";
  510. let html1 = `<div id="biz-ss-connected_users_container"></div>`;
  511. $(".biz-ss-onlineusersintials").append(html1);
  512. let usersHtml = '', randomColor;
  513. let colorPalette = ['#6640b2', '#3a55b1', '#0092ee', '#00acf0', '#1ebccd', '#009b84', '#22af47', '#88c241', '#d0d962', '#fde335', '#ffbf36', '#ff9528', '#ff6028', '#7a5449', '#c1993f', '#9e9e9e', '#5e7d8a', '#324148', '#f5f5f6', '#f95851', '#ef3975', '#b642b5', '#7a59bc', '#536bbb', '#21a0f0', '#21b7f2'];
  514. for (let i = 0; i < this.connecteduserfirstName.length; i++) {
  515. randomColor = colorPalette[Math.floor(Math.random() * colorPalette.length)];
  516. html = `<div id="biz-ss-connecteduser-` + unibaseId + `" class="d-flex flex-row border rounded-circle w-35p h-35p biz-ss-users-` + i + `" style="margin-right:-8px; background-color:` + randomColor + `">
  517. <div id="biz-ss-connecteduser_` + unibaseId + `" class="biz-ss-connectedusersfirstletter m-auto" data-toggle="popover" data-placement="top" title = "` + this.connecteduserfirstName[i] + `">` + connectedUsersFirstChar[i] + `</div></div>`;
  518. if (i <= 5) {
  519. $("#biz-ss-connected_users_container").append(html);
  520. }
  521. usersHtml += '<a class="dropdown-item d-flex flex-row align-items-center p-1 my-1" href="javascript:void(0)"><div class="biz-ss-connectedusersfirstletter border mr-2 px-2 rounded-circle text-white" style="background-color:#' + randomColor + '" title = "' + this.connecteduserfirstName[i] + '">' + connectedUsersFirstChar[i] + '</div><span class="font-13 font-weight-500">' + FileUsers[i].firstName + '</span></a>';
  522. if (i > 5) {
  523. $("#biz-ss-connected_users_container").children().last().remove();
  524. $("#biz-ss-connected_users_container").append('<div class="users-dropdown"><a href="javascript:void(0);" class="d-flex flex-row border rounded-circle w-35p h-35p text-dark biz-ss-users-' + i + '" role="button" id="biz-ss-connecteduser-' + unibaseId + '" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style=" background-color:lightgray;margin-right:-8px"><span class="m-auto font-14 font-weight-500"><span class="font-12 text-muted"><i class="la la-plus"></i></span>' + [i - 4] + '</span></a><div class="dropdown-menu z-index-10 position-absolute bg-white h-275p scroll-bar" aria-labelledby="biz-ss-connecteduser-' + unibaseId + '"></div>');
  525. $('.users-dropdown .dropdown-menu').append(usersHtml);
  526. }
  527. }
  528. }
  529. fontFamilyBfOpen(args) {
  530. args.element.parentElement.classList.remove('e-font-family');
  531. if (this.fontFamilyRecent.length) {
  532. let defaultItems = this.ssObj.ribbonModule.getFontFamilyItems();
  533. delete defaultItems[5].iconCss;
  534. let sheet = this.ssObj.biz.getActiveSheet();
  535. let range = ej.spreadsheet.getIndexesFromAddress(sheet.activeCell);
  536. let cell = ej.spreadsheet.getCell(range[0], range[1], sheet);
  537. let style = cell && cell.style && cell.style.fontFamily || 'Calibri';
  538. for (let i = 0; i < defaultItems.length; i++) {
  539. if (defaultItems[i].text === style) {
  540. defaultItems[i].iconCss = 'e-icons e-selected-icon';
  541. }
  542. }
  543. let items = this.fontFamilyRecent.concat([{ separator: true }]).concat(defaultItems);
  544. this.fontFamilyObj.items = items;
  545. this.fontFamilyObj.dataBind();
  546. }
  547. }
  548. fontFamilyBfRender(args) {
  549. args.element.style.fontFamily = args.item.text;
  550. }
  551. fontFamilySelect(args) {
  552. this.fontFamilyRecent = this.fontFamilyRecent.filter((e) => { return e.text !== args.item.text; });
  553. this.fontFamilyRecent.unshift({ text: args.item.text });
  554. if (this.fontFamilyRecent.length > 5) {
  555. this.fontFamilyRecent.pop();
  556. }
  557. }
  558. wireEvents() {
  559. if (this.permissionLevel !== Unibase.Apps.Collaboration.Enums.Share.Viewer) {
  560. document.body.addEventListener('mousedown', this.mouseDown.bind(this));
  561. document.body.addEventListener('mouseup', this.mouseUp.bind(this));
  562. document.body.querySelector('.DocumentViewer').addEventListener('keyup', this.keyUp.bind(this));
  563. document.body.addEventListener('dblclick', this.bodyDblClick.bind(this));
  564. document.body.querySelector('.DocumentViewer').addEventListener('keydown', this.keyDown.bind(this));
  565. }
  566. window.addEventListener('keydown', this.windowKeydown.bind(this));
  567. document.body.addEventListener('mouseup', this.viewOnlyMouseUp.bind(this));
  568. document.body.addEventListener('mousedown', this.viewOnlyMouseDown.bind(this));
  569. document.body.querySelector('.DocumentViewer').addEventListener('keydown', this.viewOnlyKeyDown.bind(this));
  570. }
  571. unwireEvents() {
  572. document.body.removeEventListener('mousedown', this.mouseDown.bind(this));
  573. document.body.removeEventListener('mousedown', this.mouseDown.bind(this));
  574. document.body.removeEventListener('mouseup', this.mouseUp.bind(this));
  575. document.body.querySelector('.DocumentViewer').removeEventListener('keydown', this.keyDown.bind(this));
  576. document.body.querySelector('.DocumentViewer').removeEventListener('keyup', this.keyUp.bind(this));
  577. document.body.removeEventListener('mouseup', this.viewOnlyMouseUp.bind(this));
  578. document.body.removeEventListener('mousedown', this.viewOnlyMouseDown.bind(this));
  579. document.body.querySelector('.DocumentViewer').removeEventListener('keydown', this.viewOnlyKeyDown.bind(this));
  580. document.body.removeEventListener('dblclick', this.bodyDblClick.bind(this));
  581. window.removeEventListener('keydown', this.windowKeydown.bind(this));
  582. }
  583. eventListners() {
  584. document.getElementsByClassName("biz-ss-cloudsave")[0].addEventListener('click', (event) => {
  585. Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance().renderCloudSavedDialogue();
  586. });
  587. document.getElementsByClassName("biz-ss-cloudloading")[0].addEventListener('click', (event) => {
  588. Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance().renderCloudSavingDialogue();
  589. });
  590. document.getElementsByClassName("biz-ss-filename")[0].addEventListener('focusout', (event) => {
  591. if (this.FileId)
  592. this.fileNameChange();
  593. else
  594. this.download.ssAutoSave({ action: "createNewSpreadsheet", eventArgs: {} }, this, false);
  595. });
  596. document.getElementsByClassName("biz-ss-starred")[0].addEventListener('click', (event) => {
  597. });
  598. (this.ssObj.enableContextMenu) && this.ssObj.contextMenuModule.contextMenuInstance.addEventListener("beforeItemRender", (e) => {
  599. var indexes = this.ssObj.biz.getIndexes();
  600. let sheet = this.ssObj.biz.getActiveSheet();
  601. if (e.item.text == "UnHide Rows") {
  602. var rowStart = indexes[0];
  603. var rowEnd = indexes[2];
  604. var rows = sheet.rows;
  605. rows = rows.slice(rowStart, rowEnd + 1);
  606. if (rows.filter(({ hidden }) => hidden == true).length == 1) {
  607. e.element.innerHTML = "UnHide Row";
  608. }
  609. }
  610. if (e.item.text == "UnHide Columns") {
  611. var colStart = indexes[1];
  612. var colEnd = indexes[3];
  613. var cols = sheet.columns;
  614. cols = cols.slice(colStart, colEnd + 1);
  615. if (cols.filter(({ hidden }) => hidden == true).length == 1) {
  616. e.element.innerHTML = "UnHide Column";
  617. }
  618. }
  619. });
  620. document.onpaste = (pasteEvent) => {
  621. let sheet = this.ssObj.getActiveSheet();
  622. let indexes = ej.spreadsheet.getIndexesFromAddress(sheet.activeCell);
  623. let items = (event.clipboardData || event.originalEvent.clipboardData).items;
  624. for (var i = 0; i < 2; i++) {
  625. var item = items[i];
  626. if (item && item.kind === 'file') {
  627. let blob = item.getAsFile();
  628. let reader = new FileReader();
  629. reader.onload = (event) => {
  630. let sheetName = this.setSheetNameForInCell(sheet.name);
  631. this.pastedImageDetails = event;
  632. let cellPstn = ej.spreadsheet.getCellPosition(sheet, [indexes[0], indexes[1]], sheet.frozenRows, sheet.frozenColumns);
  633. let imageModel = {
  634. src: this.pastedImageDetails.target.result,
  635. top: cellPstn.top,
  636. left: cellPstn.left,
  637. id: "spreadsheet_overlay_picture_" + sheetName + "_" + indexes[0] + "_" + indexes[1]
  638. };
  639. let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet);
  640. this.oldCellInfo = Object.assign({}, cellInfo);
  641. (!cellInfo) && (cellInfo = {});
  642. this.setImageSize("top", imageModel);
  643. this.setImageSize("left", imageModel);
  644. cellInfo["image"] = [imageModel];
  645. this.ssObj.biz.setCell(indexes[0], indexes[1], sheet, cellInfo);
  646. this.download.ssAutoSave({ action: "cellSave", eventArgs: { address: "sheet!" + this.ssObj.biz.getRange() } }, this, true);
  647. let args_undoredo = { indexes: indexes, range: this.ssObj.biz.getRange(), cellInfo: cellInfo, action: 'insertimage', origin: 'biz', sheetIndex: this.getSheetIndex() };
  648. this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'bizImageInCell', options: args_undoredo, oldCells: this.oldCellInfo } });
  649. this.bizSignalr(args_undoredo);
  650. };
  651. reader.readAsDataURL(blob);
  652. }
  653. }
  654. };
  655. window.onkeyup = (event) => {
  656. if (event.keyCode == 27 && this.fullscreen.ssMenuBarFullScreen) {
  657. let sheetPannelElement = document.getElementById("DocumentViewer_sheet_panel");
  658. this.ssObj.element.parentElement.nextElementSibling.style.display = "inline-block";
  659. this.ssObj.element.parentElement.previousElementSibling.style.display = "block";
  660. document.getElementById('DocumentViewer_ribbon').style.display = 'block';
  661. var toolbarPannelHeight = sheetPannelElement.previousElementSibling.previousElementSibling.offsetHeight;
  662. var formulaPannelHeight = sheetPannelElement.previousElementSibling.offsetHeight;
  663. var sheetTabPannelHeight = sheetPannelElement.nextElementSibling.offsetHeight;
  664. var documentviewerHeight = this.ssObj.element.offsetHeight;
  665. document.getElementById("DocumentViewer_sheet_panel").style.height = (documentviewerHeight - toolbarPannelHeight - formulaPannelHeight - sheetTabPannelHeight) + 'px';
  666. this.fullscreen.ssMenuBarFullScreen = false;
  667. }
  668. };
  669. document.getElementsByClassName("biz-ss-filename")[0].addEventListener("input", () => {
  670. this.setFileNameElementWidth();
  671. });
  672. }
  673. getTextWidth(text, font = this.getCanvasFontSize()) {
  674. const canvas = this.getTextWidth.canvas || (this.getTextWidth.canvas = document.createElement("canvas"));
  675. const context = canvas.getContext("2d");
  676. context.font = font;
  677. const metrics = context.measureText(text);
  678. return metrics.width;
  679. }
  680. getCssStyle(element, prop) {
  681. return window.getComputedStyle(element, null).getPropertyValue(prop);
  682. }
  683. getCanvasFontSize(el = document.body) {
  684. const fontWeight = this.getCssStyle(el, 'font-weight') || 'normal';
  685. const fontSize = this.getCssStyle(el, 'font-size') || '16px';
  686. const fontFamily = this.getCssStyle(el, 'font-family') || 'Times New Roman';
  687. return `${fontWeight} ${fontSize} ${fontFamily}`;
  688. }
  689. setFileNameElementWidth() {
  690. let fileNameEle = document.getElementsByClassName("biz-ss-filename")[0];
  691. fileNameEle.style.width = (this.getTextWidth(fileNameEle.value) + 8) + "px";
  692. }
  693. mouseUp(e) {
  694. setTimeout((e) => {
  695. let customSortDlg = document.getElementsByClassName("e-customsort-dlg")[0];
  696. if (customSortDlg) {
  697. let addBtnSort = document.getElementsByClassName("e-sort-addbtn")[0];
  698. let dataSourceLen = document.querySelector(".e-sort-field.e-control").ej2_instances[0].dataSource.length;
  699. let numberOfList = document.querySelector(".e-list-sort.e-sort-template").firstElementChild.firstElementChild.children.length;
  700. if (dataSourceLen === numberOfList) {
  701. addBtnSort.classList.add("e-disabled");
  702. addBtnSort.disabled = true;
  703. }
  704. else {
  705. addBtnSort.classList.remove("e-disabled");
  706. addBtnSort.disabled = false;
  707. }
  708. }
  709. }, 300);
  710. }
  711. viewOnlyMouseUp(e) {
  712. if (this.fullscreen.ssMenuBarFullScreen) {
  713. setTimeout(() => {
  714. if (e.toElement.title == "Expand Formula Bar" || e.toElement.title == "Collapse Formula Bar") {
  715. let sheetPannelElement = document.getElementById("DocumentViewer_sheet_panel");
  716. var formulaPannelHeight = sheetPannelElement.previousElementSibling.offsetHeight;
  717. var sheetTabPannelHeight = sheetPannelElement.nextElementSibling.offsetHeight;
  718. sheetPannelElement.style.height = (window.innerHeight - formulaPannelHeight - sheetTabPannelHeight) + 'px';
  719. }
  720. }, 200);
  721. }
  722. }
  723. mouseDown(e) {
  724. let sheet = this.ssObj.biz.getActiveSheet();
  725. this.clearFindReplace();
  726. this.mouseDownHandlers.forEach((hanlder) => { hanlder.call(this, e); });
  727. var range = this.ssObj.biz.getIndexes();
  728. this.cellRowStart = range[0];
  729. this.cellColStart = range[1];
  730. this.cellRowEnd = range[2];
  731. this.cellColEnd = range[3];
  732. let moveToDialog = document.getElementsByClassName("copyto_dialog");
  733. let importDialog = document.getElementsByClassName("biz-ss-import-dialog");
  734. let resizeDialog = document.getElementById("biz-ss-resizetofit-dialog_dialog-header");
  735. let cloudSaved = e.target.closest(".biz-ss-cloudsave-container");
  736. let selectedTab = e.target.closest(".e-tab-wrap");
  737. let cloudSaving = e.target.closest(".biz-ss-cloudloading-container");
  738. this.clicks++;
  739. setTimeout(() => {
  740. this.clicks = 0;
  741. }, 400);
  742. if (!(cloudSaved)) {
  743. if (document.getElementById('biz-ss-cloudsave-container')) {
  744. this.ribbon.ssCloudSavedDialougObj.destroy();
  745. }
  746. }
  747. if (!(cloudSaving)) {
  748. if (document.getElementById('biz-ss-cloudloading-container')) {
  749. this.ribbon.ssCloudSavingDialougObj.destroy();
  750. }
  751. }
  752. if (this.clicks === 2) {
  753. let changedValues = [];
  754. this.clicks = 0;
  755. if (e.target.classList.contains("e-autofill")) {
  756. this.autofillDrag = true;
  757. let indexes = this.ssObj.biz.getIndexes();
  758. let sheet = this.ssObj.getActiveSheet();
  759. let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet);
  760. let leftCellsCount = 0;
  761. let currentFormula;
  762. let obj;
  763. if (cellInfo && cellInfo.formula) {
  764. for (var i = indexes[0] + 1; i < 100000000000000; i++) {
  765. let cell = ej.spreadsheet.getCell(i, indexes[1] - 1, sheet);
  766. if (this.checkCellObjHasValue(cell))
  767. leftCellsCount++;
  768. else
  769. i = 100000000000000;
  770. }
  771. if (cellInfo.formula.includes(":") && cellInfo.formula.includes("(")) {
  772. let ranges = cellInfo.formula.split(":");
  773. let row1 = Number(ranges[0].match(/\d/g).join(""));
  774. let row2 = Number(ranges[1].match(/\d/g).join(""));
  775. for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) {
  776. ranges[0] = ranges[0].replace(row1.toString(), (row1 + 1).toString());
  777. ranges[1] = ranges[1].replace(row2.toString(), (row2 + 1).toString());
  778. currentFormula = ranges.join(":");
  779. obj = ej.spreadsheet.getCell(i, indexes[1], sheet);
  780. if (!obj)
  781. obj = { formula: currentFormula };
  782. else
  783. obj["formula"] = currentFormula;
  784. this.ssObj.biz.setCell(i, indexes[1], sheet, obj);
  785. let change = { Row: i, cell: indexes[1], CellInfo: obj };
  786. changedValues.push(change);
  787. row1++;
  788. row2++;
  789. }
  790. }
  791. else if (cellInfo.formula.includes("(")) {
  792. for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) {
  793. let row;
  794. let formulaRange = cellInfo.formula.split("(");
  795. row = Number(formulaRange[1].match(/\d/g).join(""));
  796. currentFormula = cellInfo.formula.replace(row.toString(), (i + 1));
  797. obj = ej.spreadsheet.getCell(i, indexes[1], sheet);
  798. if (!obj)
  799. obj = { formula: currentFormula };
  800. else
  801. obj["formula"] = currentFormula;
  802. this.ssObj.biz.setCell(i, indexes[1], sheet, obj);
  803. let change = { Row: i, cell: indexes[1], CellInfo: obj };
  804. changedValues.push(change);
  805. }
  806. }
  807. else if (cellInfo.formula.includes(":")) {
  808. let ranges = cellInfo.formula.split(":");
  809. let row1 = Number(ranges[0].match(/\d/g).join(""));
  810. let row2 = Number(ranges[1].match(/\d/g).join(""));
  811. for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) {
  812. ranges[0] = ranges[0].replace(row1.toString(), (row1 + 1).toString());
  813. ranges[1] = ranges[1].replace(row2.toString(), (row2 + 1).toString());
  814. currentFormula = ranges.join(":");
  815. obj = ej.spreadsheet.getCell(i, indexes[1], sheet);
  816. if (!obj)
  817. obj = { formula: currentFormula };
  818. else
  819. obj["formula"] = currentFormula;
  820. this.ssObj.biz.setCell(i, indexes[1], sheet, obj);
  821. let change = { Row: i, cell: indexes[1], CellInfo: obj };
  822. changedValues.push(change);
  823. row1++;
  824. row2++;
  825. }
  826. }
  827. else {
  828. let row = Number(cellInfo.formula.match(/\d/g).join(""));
  829. for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) {
  830. currentFormula = cellInfo.formula.replace(row.toString(), (i + 1));
  831. obj = ej.spreadsheet.getCell(i, indexes[1], sheet);
  832. if (!obj)
  833. obj = { formula: currentFormula };
  834. else
  835. obj["formula"] = currentFormula;
  836. this.ssObj.biz.setCell(i, indexes[1], sheet, obj);
  837. let change = { Row: i, cell: indexes[1], CellInfo: obj };
  838. changedValues.push(change);
  839. }
  840. }
  841. }
  842. (changedValues.length > 0) && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true);
  843. this.ssObj.selectRange(sheet.activeCell + ":" + this.generateHeaderText(indexes[3] + 1) + (changedValues.pop().Row + 1));
  844. }
  845. }
  846. if (moveToDialog.length > 0) {
  847. let unicld = Unibase.Apps.Collaboration.Components.UniCloud.Instance();
  848. let copyto = e.target.closest(".copyto_dialog");
  849. if (!(copyto)) {
  850. if (document.getElementsByClassName(".copyto_dialog")) {
  851. $("#_bizgaze_modal").modal("hide");
  852. $("#_bizgaze_modal").empty();
  853. }
  854. }
  855. this.selectFileEffectInDialog(e);
  856. if (e.target.id === "copyto_select_btn") {
  857. if (unicld.copyToSelectedFileId !== 0) {
  858. Unibase.Platform.Helpers.NavigationHelper.Instance().showLoading();
  859. let base = Unibase.Apps.Collaboration.Components.Sheets.Base.Instance();
  860. let sheetIdx = base.getSheetIndex();
  861. let parsed = base.ssObj.sheets[sheetIdx];
  862. $("#_bizgaze_modal").modal("hide");
  863. $(".modal-backdrop")[$(".modal-backdrop").length - 1].remove();
  864. $("#moveToModal").empty();
  865. if (unicld.copyToSelectedFileId === base.FileId) {
  866. let count = 0;
  867. let sheets = base.ssObj.sheets;
  868. let sheetnames = base.ssObj.sheets.map(x => x.name);
  869. let sheetName;
  870. if (sheetnames.includes("Copy of " + parsed.name)) {
  871. sheets.forEach((sheet) => {
  872. if (sheet.name.startsWith("Copy of " + parsed.name))
  873. count++;
  874. });
  875. sheetName = "Copy of " + parsed.name + "(" + count + ")";
  876. }
  877. else {
  878. sheetName = "Copy of " + parsed.name;
  879. }
  880. let saveType = "insertsheetinsamewb";
  881. let data = {
  882. FileId: base.FileId,
  883. sheetName: sheetName,
  884. autosavetype: saveType,
  885. sheetIndex: Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().getSheetIndex(),
  886. requestId: Unibase.Apps.Collaboration.Components.Common.Download.Instance().requestId + 1,
  887. };
  888. Unibase.Apps.Collaboration.DocumentManager.Instance().ssAutoSave(data).then(() => {
  889. Unibase.Apps.Collaboration.DocumentManager.Instance().getJsonData(base.FileId).then((sheetdata) => {
  890. if (sheetdata.result != null) {
  891. let newdata = sheetdata.result;
  892. this.removeSheetIndexProp(newdata.Workbook);
  893. base.ssObj.openFromJson({ file: newdata });
  894. }
  895. else {
  896. }
  897. Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading();
  898. });
  899. });
  900. }
  901. else {
  902. let data = {
  903. FileId: base.FileId,
  904. copytofileid: unicld.copyToSelectedFileId,
  905. sheetIndex: base.getSheetIndex(),
  906. requestId: Unibase.Apps.Collaboration.Components.Common.Download.Instance().requestId + 1,
  907. };
  908. Unibase.Apps.Collaboration.DocumentManager.Instance().CopySheetInToExistingWorkbook(data).then((res) => {
  909. Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading();
  910. if (res.errors) {
  911. }
  912. else {
  913. }
  914. });
  915. }
  916. }
  917. else {
  918. unicld.moveToFolderElement.firstElementChild.click();
  919. }
  920. }
  921. }
  922. if (e.target.parentElement.id === "DocumentViewer_currencyformat") {
  923. for (let i = this.cellRowStart; i <= this.cellRowEnd; i++) {
  924. for (let j = this.cellColStart; j <= this.cellColEnd; j++) {
  925. var cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  926. cellInfo["format"] = "$#,##0.00";
  927. this.ssObj.biz.setCell(i, j, sheet, cellInfo);
  928. }
  929. }
  930. }
  931. if (e.target.parentElement.id === "DocumentViewer_percentageformat") {
  932. for (let i = this.cellRowStart; i <= this.cellRowEnd; i++) {
  933. for (let j = this.cellColStart; j <= this.cellColEnd; j++) {
  934. var cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  935. cellInfo["format"] = ".00%";
  936. this.ssObj.biz.setCell(i, j, sheet, cellInfo);
  937. }
  938. }
  939. }
  940. if (e.target.classList.contains("biz-ss-fileshare-btn")) {
  941. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(['apps/collaboration/components/old_unicloud.js', 'platform/apps/managers/appmanager.js', 'platform/apps/enums/appconfigurationtypes.js'], () => {
  942. Unibase.Apps.Collaboration.Components.UniCloud.Instance().share(this.FileId, "file", 0);
  943. });
  944. }
  945. if (importDialog.length > 0) {
  946. this.selectFileEffectInDialog(e);
  947. if (e.target.id == "importfile-drive-cancel-btn") {
  948. this.ribbon.ssImportDialougObj.hide();
  949. setTimeout(() => {
  950. if (this.ribbon.ssImportDialougObj)
  951. this.ribbon.ssImportDialougObj.destroy();
  952. this.ribbon.ssImportDialougObj = null;
  953. }, 1000);
  954. }
  955. else if (e.target.id == "importfile-drive-select-btn") {
  956. this.isDriveImport = true;
  957. let obj = {
  958. name: this.ribbon.driveSelectedLiElement.textContent.trim(),
  959. fileid: this.ribbon.driveSelectedFileId,
  960. };
  961. let importObj = {
  962. upload: false,
  963. existingfileid: this.ribbon.driveSelectedFileId,
  964. FileId: this.FileId,
  965. filedata: "",
  966. filetype: "",
  967. filename: "",
  968. FilePath: null,
  969. RefId: 0,
  970. };
  971. this.ribbon.spreadsheetImportedFileData = importObj;
  972. this.ribbon.spreadsheetImportedReplaceFileData = importObj;
  973. this.ribbon.importedFile = { files: [obj] };
  974. this.ribbon.ssImportDialougObj.destroy();
  975. this.ribbon.ssimportedFileDataDailog();
  976. }
  977. }
  978. if (resizeDialog) {
  979. if (e.target.classList.contains("e-dlg-closeicon-btn") || e.target.classList.contains("e-icon-dlg-close")) {
  980. this.dialogue.hideResizeDialog();
  981. }
  982. }
  983. if (selectedTab) {
  984. let selectedTabText = selectedTab.querySelector(".e-tab-text").textContent;
  985. if (selectedTabText && e.which == 3)
  986. selectedTab ? (this.selectedSheetName = selectedTab.textContent) : (this.selectedSheetName = null);
  987. else
  988. this.selectedSheetName = null;
  989. }
  990. }
  991. viewOnlyMouseDown(e) {
  992. let fullscreenDialog = document.getElementsByClassName("biz-ss-menubar-fullscreen");
  993. let requestAcessDialog = e.target.closest(".biz-ss-requestaccess-dialog");
  994. if (fullscreenDialog.length > 0) {
  995. if (e.target.classList.contains("biz-ss-menubarfullscreen-dismiss"))
  996. this.dialogue.hideSsMenubarFullscreenDialog();
  997. }
  998. else if (this.viewOnlyDialog) {
  999. var viewonlydialog = ej.base.closest(e.target, '.biz-ss-viewonly-dialog');
  1000. if (!viewonlydialog) {
  1001. this.viewOnlyDialog.hide();
  1002. this.viewOnlyDialog.destroy();
  1003. }
  1004. }
  1005. if (this.requestAccessObj && !requestAcessDialog) {
  1006. this.hideRequestAccess();
  1007. }
  1008. }
  1009. checkCellObjHasValue(cell) {
  1010. if (!cell)
  1011. return false;
  1012. else if (cell && cell.value != null && cell.value != undefined && cell.value.toString() != "" && cell.value.toString() != " ")
  1013. return true;
  1014. else
  1015. return false;
  1016. }
  1017. selectFileEffectInDialog(e) {
  1018. let unicld = Unibase.Apps.Collaboration.Components.UniCloud.Instance();
  1019. let moveToList = e.target.closest(".copyto_list");
  1020. let moveToFileList = e.target.closest(".copyto_file");
  1021. let moveTofolder = e.target.closest(".copyto_folder");
  1022. let driveSelectBtn = document.getElementById("importfile-drive-select-btn");
  1023. let copyToSelectBtn = document.getElementById("copyto_select_btn");
  1024. if (moveToList) {
  1025. if (document.getElementsByClassName("copyto_select")[0])
  1026. document.getElementsByClassName("copyto_select")[0].classList.remove("copyto_select");
  1027. let copyto = e.target.closest(".copyto_list");
  1028. copyto.classList.add("copyto_select");
  1029. unicld.copyToSelectedFileId = 0;
  1030. if (moveToFileList) {
  1031. let fileid = Number(moveToFileList.id.split("_")[2]);
  1032. unicld.copyToSelectedFileId = fileid;
  1033. this.ribbon.driveSelectedFileId = fileid;
  1034. this.ribbon.driveSelectedLiElement = moveToFileList;
  1035. if (driveSelectBtn)
  1036. driveSelectBtn.classList.remove("disabled");
  1037. else
  1038. copyToSelectBtn.classList.remove("disabled");
  1039. }
  1040. if (driveSelectBtn && driveSelectBtn.classList.contains("disabled"))
  1041. driveSelectBtn.classList.remove("disabled");
  1042. else if (driveSelectBtn && driveSelectBtn.classList.contains("e-disabled"))
  1043. driveSelectBtn.classList.remove("e-disabled");
  1044. }
  1045. if (moveTofolder) {
  1046. unicld.moveToFolderElement = moveTofolder;
  1047. (driveSelectBtn) && driveSelectBtn.classList.add("e-disabled");
  1048. if (driveSelectBtn)
  1049. driveSelectBtn.classList.add("disabled");
  1050. else
  1051. copyToSelectBtn.classList.add("disabled");
  1052. }
  1053. }
  1054. addUtilFn() {
  1055. this.ssObj.biz.getRange = () => { return this.ssObj.getActiveSheet().selectedRange; };
  1056. this.ssObj.biz.getIndexes = () => { return this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.ssObj.biz.getRange())); };
  1057. this.ssObj.biz.setCell = (rowIdx, colIdx, sheet, cellObj) => {
  1058. this.ssObj.clipboardModule.setCell(rowIdx, colIdx, sheet, cellObj, false, false, false);
  1059. };
  1060. this.ssObj.biz.getCell = (rowIdx, colIdx, sheet) => {
  1061. return ej.spreadsheet.getCell(rowIdx, colIdx, sheet);
  1062. };
  1063. this.ssObj.biz.isRowAvailable = (rowIdx, activeSheet) => {
  1064. if (activeSheet.rows[rowIdx]) {
  1065. return true;
  1066. }
  1067. return false;
  1068. };
  1069. this.ssObj.biz.getActiveSheet = () => {
  1070. if (this.ssObj.biz.sheetIndex > -1) {
  1071. return this.ssObj.sheets[this.ssObj.biz.sheetIndex];
  1072. }
  1073. else {
  1074. return this.ssObj.getActiveSheet();
  1075. }
  1076. };
  1077. this.ssObj.biz.isRowsSelected = (indexes) => {
  1078. if (!indexes) {
  1079. indexes = this.ssObj.biz.getIndexes();
  1080. }
  1081. let colStart = indexes[1];
  1082. let colEnd = indexes[3];
  1083. let colCount = this.ssObj.getActiveSheet().colCount - 1;
  1084. for (var i = indexes[0]; i <= indexes[2]; i++) {
  1085. if (!(colStart === 0 && colEnd === colCount))
  1086. return false;
  1087. }
  1088. return true;
  1089. };
  1090. this.ssObj.biz.isColsSelected = (indexes) => {
  1091. if (!indexes) {
  1092. indexes = this.ssObj.biz.getIndexes();
  1093. }
  1094. let rowStart = indexes[0];
  1095. let rowEnd = indexes[2];
  1096. let rowCount = this.ssObj.getActiveSheet().rowCount - 1;
  1097. for (var i = indexes[1]; i <= indexes[3]; i++) {
  1098. if (!(rowStart === 0 && rowEnd === rowCount))
  1099. return false;
  1100. }
  1101. return true;
  1102. };
  1103. this.ssObj.biz.getSheetIndexByname = (name) => {
  1104. let len = this.ssObj.sheets.length;
  1105. for (let i = 0; i < len; i++) {
  1106. if (this.ssObj.sheets[i].name == name) {
  1107. return i;
  1108. }
  1109. }
  1110. return -1;
  1111. };
  1112. this.ssObj.biz.getSheetByName = (name) => {
  1113. let len = this.ssObj.sheets.length;
  1114. for (let i = 0; i < len; i++) {
  1115. if (this.ssObj.sheets[i].name == name) {
  1116. return this.ssObj.sheets[i];
  1117. }
  1118. }
  1119. };
  1120. }
  1121. getIndexesFromAddress(range) {
  1122. return this.swapRange(ej.spreadsheet.getIndexesFromAddress(range));
  1123. }
  1124. getSheetIndex(sheet) {
  1125. sheet = sheet ? sheet : this.ssObj.biz.getActiveSheet();
  1126. let len = this.ssObj.sheets.length;
  1127. for (let i = 0; i < len; i++) {
  1128. if (this.ssObj.sheets[i].name == sheet.name) {
  1129. return i;
  1130. }
  1131. }
  1132. return -1;
  1133. }
  1134. getCellsFromIndexes(range, customRange) {
  1135. let cells = [];
  1136. let sheet = this.ssObj.getActiveSheet();
  1137. let k = 0;
  1138. for (let i = range[0]; i <= range[2]; i++) {
  1139. for (let j = range[1]; j <= (!customRange ? range[3] : range[1] + customRange[k].length); j++) {
  1140. cells.push(JSON.parse(JSON.stringify(ej.spreadsheet.getCell(i, j, sheet))));
  1141. }
  1142. k++;
  1143. }
  1144. return cells;
  1145. }
  1146. setCellObjects(range, cells, customRange) {
  1147. let sheet = this.ssObj.getActiveSheet();
  1148. let k = 0;
  1149. for (let i = range[0]; i <= range[2]; i++) {
  1150. for (let j = range[1]; j <= (!customRange ? range[3] : range[1] + customRange[k].length); j++) {
  1151. let obj = cells.shift();
  1152. let cell = ej.spreadsheet.getCell(i, j, sheet);
  1153. if (cell && cell.image && cell.image[0]) {
  1154. document.getElementById(cell.image[0].id).remove();
  1155. }
  1156. if (obj) {
  1157. this.ssObj.biz.setCell(i, j, sheet, obj);
  1158. }
  1159. else {
  1160. this.ssObj.biz.setCell(i, j, sheet, undefined);
  1161. delete sheet.rows[i].cells[j];
  1162. }
  1163. }
  1164. k++;
  1165. }
  1166. }
  1167. generateSheetName(names, name) {
  1168. let splitJoin;
  1169. if (names.indexOf(name) < 0)
  1170. return name;
  1171. if (name.lastIndexOf(" (") > -1)
  1172. splitJoin = name.substr(0, name.lastIndexOf(" ("));
  1173. else
  1174. splitJoin = name;
  1175. let i = 2;
  1176. while (names.indexOf(splitJoin + '(' + i + ")") > -1)
  1177. i++;
  1178. return name + ' (' + i + ')';
  1179. }
  1180. clearCell(sheet, rowIdx, colIdx) {
  1181. this.ssObj.biz.setCell(rowIdx, colIdx, sheet, {});
  1182. delete sheet.rows[rowIdx].cells[colIdx];
  1183. }
  1184. updateCell(sheet, rowIdx, colIdx, cellObj) {
  1185. this.ssObj.biz.setCell(rowIdx, colIdx, sheet, cellObj);
  1186. }
  1187. clearRow(sheet, rowIdx) {
  1188. if (this.ssObj.biz.isRowAvailable(rowIdx, sheet) && sheet.rows[rowIdx].cells) {
  1189. let len = sheet.rows[rowIdx].cells.length;
  1190. for (let j = 0; j < len; j++) {
  1191. this.ssObj.biz.setCell(rowIdx, j, sheet, {});
  1192. }
  1193. }
  1194. delete sheet.rows[rowIdx];
  1195. }
  1196. updateRow(sheet, rowIdx, rowObj) {
  1197. for (var j = 0; rowObj && rowObj.cells && j <= rowObj.cells.length; j++) {
  1198. let cell = rowObj.cells[j];
  1199. cell && this.ssObj.biz.setCell(rowIdx, j, sheet, cell);
  1200. }
  1201. rowObj && (sheet.rows[rowIdx] = rowObj);
  1202. }
  1203. swapRange(cells) {
  1204. if (cells[0] > cells[2])
  1205. this.swap(cells, 0, 2);
  1206. if (cells[1] > cells[3])
  1207. this.swap(cells, 1, 3);
  1208. return cells;
  1209. }
  1210. swap(array, x, y) {
  1211. if (x == y)
  1212. return;
  1213. let tmp = array[x];
  1214. array[x] = array[y];
  1215. array[y] = tmp;
  1216. }
  1217. generateHeaderText(colIndex) {
  1218. if (this.hederText[colIndex]) {
  1219. return this.hederText[colIndex];
  1220. }
  1221. let text = this.generateText(colIndex);
  1222. this.hederText[colIndex] = text;
  1223. return text;
  1224. }
  1225. generateText(colIndex) {
  1226. let alphabet = "Z";
  1227. if (colIndex / 26 > 1)
  1228. return this.generateText((colIndex % 26 === 0) ? (colIndex / 26 - 1) : Math.floor(colIndex / 26)) + String.fromCharCode((colIndex % 26) === 0 ? alphabet.charCodeAt(alphabet) : 64 + (colIndex % 26));
  1229. else
  1230. return String.fromCharCode(64 + (colIndex));
  1231. }
  1232. updateProps() {
  1233. this.element = document.getElementById('DocumentViewer');
  1234. this.ribbon = Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance();
  1235. this.dialogue = Unibase.Apps.Collaboration.Components.Sheets.Dialogue.Instance();
  1236. this.autofill = Unibase.Apps.Collaboration.Components.Sheets.Autofill.Instance();
  1237. this.formatpainter = Unibase.Apps.Collaboration.Components.Sheets.FormatPainter.Instance();
  1238. this.spellchecker = Unibase.Apps.Collaboration.Components.Sheets.SpellChecker.Instance();
  1239. this.util = Unibase.Apps.Collaboration.Components.Common.Util.Instance();
  1240. this.download = Unibase.Apps.Collaboration.Components.Common.Download.Instance();
  1241. this.fullscreen = Unibase.Apps.Collaboration.Components.Fullscreen.Instance();
  1242. this.ssSettings = {
  1243. contextMenuBeforeOpen: this.cmenuBfOpen.bind(this),
  1244. contextMenuItemSelect: this.cmenuSelect.bind(this),
  1245. actionComplete: this.actionComplete.bind(this),
  1246. beforeCellRender: this.bfCellRender.bind(this),
  1247. beforeSelect: this.beforeSelect.bind(this),
  1248. actionBegin: this.actionBegin.bind(this),
  1249. cellEdit: this.cellEdit.bind(this),
  1250. sortComplete: this.sortComplete.bind(this),
  1251. openComplete: this.openComplete.bind(this),
  1252. cellSave: this.cellSave.bind(this),
  1253. dataBound: this.dataBound.bind(this),
  1254. beforeCellSave: this.beforeCellSave.bind(this),
  1255. created: this.ssCreated.bind(this),
  1256. sheets: this.filedata,
  1257. allowSave: true,
  1258. saveUrl: _appsettings.server_url() + '/apis/v4/unibase/collaboration/documents/spreadsheetdownload',
  1259. };
  1260. }
  1261. beforeSelect(args) {
  1262. let ele = document.getElementById("DocumentViewer_edit");
  1263. if (ele)
  1264. ele.textContent = "";
  1265. this.isCtrlA = false;
  1266. }
  1267. bfCellRender(args) {
  1268. if (this.openJSON) {
  1269. this.processCustomResponse();
  1270. this.openJSON = false;
  1271. }
  1272. if (this.showFormula) {
  1273. let value = '';
  1274. if (args.cell && args.cell.value) {
  1275. value = args.cell.value;
  1276. }
  1277. if (args.cell.formula && args.cell.formula.length) {
  1278. value = args.cell.formula;
  1279. }
  1280. args.element.innerHTML = value;
  1281. }
  1282. if (args && args.cell && args.cell.image && args.cell.image.length > 0) {
  1283. let sheet = this.ssObj.getActiveSheet();
  1284. let sheetName = this.setSheetNameForInCell(sheet.name);
  1285. (sheet["pictures"] == undefined) && (sheet["pictures"] = []);
  1286. args.cell.image.forEach((img) => {
  1287. if ((!img.id.includes(sheetName)) && (!sheet.pictures.find(x => x.imageId == img.id)))
  1288. sheet.pictures.push({ imageId: img.id, row: args.rowIndex, col: args.colIndex });
  1289. });
  1290. }
  1291. }
  1292. setSheetNameForInCell(currentSheetName) {
  1293. currentSheetName = currentSheetName.replaceAll("(", "");
  1294. currentSheetName = currentSheetName.replaceAll(")", "");
  1295. if (currentSheetName.includes(" "))
  1296. return currentSheetName.split(" ").join("-");
  1297. else
  1298. return currentSheetName;
  1299. }
  1300. beforeCellSave(args) {
  1301. this.isInitial = false;
  1302. this.prevFormulaRange = "";
  1303. this.f2Edit = false;
  1304. this.prevFormulaRange = "";
  1305. this.formulaActiveCell = "";
  1306. if (args.value && args.value.length && args.value.length && args.value[0] === '=' && this.lastKeyEvent.keyCode === 13) {
  1307. let popup = document.body.querySelector('#' + this.ssObj.element.id + '_ac_popup');
  1308. if (popup && popup.classList.contains('e-popup-open')) {
  1309. args.cancel = true;
  1310. this.ssObj.formulaModule.triggerKeyDownEvent(13);
  1311. this.ssObj.formulaModule.hidePopUp();
  1312. popup.classList.remove('e-popup-open');
  1313. popup.classList.add('e-popup-close');
  1314. }
  1315. }
  1316. this.removeCopyIndicator();
  1317. }
  1318. cellEdit(args) {
  1319. this.isInitial = false;
  1320. var indexes = this.ssObj.biz.getIndexes();
  1321. let sheet = this.ssObj.biz.getActiveSheet();
  1322. let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet);
  1323. if (cellInfo && cellInfo.image && cellInfo.image[0] && cellInfo.image[0].id.startsWith("biz_image_in_cell")) {
  1324. document.getElementById(cellInfo.image[0].id).style.display = "none";
  1325. }
  1326. if (this.autofillDrag) {
  1327. this.ssObj.endEdit();
  1328. this.autofillDrag = false;
  1329. }
  1330. }
  1331. sortComplete(args) {
  1332. debugger;
  1333. }
  1334. cellSave(args) {
  1335. var indexes = this.ssObj.biz.getIndexes();
  1336. let sheet = this.ssObj.biz.getActiveSheet();
  1337. let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet);
  1338. if (cellInfo && cellInfo.value && cellInfo.value != "") {
  1339. if (cellInfo.image && cellInfo.image.length > 0) {
  1340. document.getElementById(cellInfo.image[0].id).remove();
  1341. cellInfo.image = [];
  1342. this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: indexes[0], cell: indexes[1], cellinfo: cellInfo }] }, this, true);
  1343. }
  1344. }
  1345. else if (cellInfo && cellInfo.image && cellInfo.image.length > 0) {
  1346. document.getElementById(cellInfo.image[cellInfo.image.length - 1].id).style.display = "";
  1347. }
  1348. if (this.showFormula) {
  1349. let value = '';
  1350. if (args.value) {
  1351. value = args.value;
  1352. }
  1353. if (args.formula && args.formula.length) {
  1354. value = args.formula;
  1355. }
  1356. args.element.innerHTML = value;
  1357. }
  1358. this.removeCopyIndicator();
  1359. }
  1360. openComplete() {
  1361. setTimeout(() => { this.addImageClassToAllImages(); }, 3000);
  1362. }
  1363. ssCreated() {
  1364. this.openJSON = true;
  1365. this.removeSheetIndexProp(this.filedata.Workbook);
  1366. this.ssObj.openFromJson({ file: this.filedata });
  1367. this.container.addEventListener('fullscreenchange', this.fullScreenHandler.bind(this));
  1368. (this.ssObj.enableContextMenu) && this.ssObj.contextMenuModule.contextMenuInstance.addEventListener('beforeItemRender', this.cmenubfrender.bind(this));
  1369. document.getElementsByClassName("e-formula-bar-panel")[0].firstElementChild.lastElementChild.remove();
  1370. this.ssObj.element.querySelector('.e-sheet-tab').ej2_instances[0].addEventListener('selected', this.tabSelected.bind(this));
  1371. this.focusDocumentViewer();
  1372. this.setFileNameElementWidth();
  1373. this.ssObj.addEventListener("dialogBeforeOpen", this.dialogOpenHandler.bind(this));
  1374. }
  1375. removeSheetIndexProp(workbook) {
  1376. if (workbook.sheets && workbook.sheets.length > 0) {
  1377. for (var i = 0; i < workbook.sheets.length; i++)
  1378. (workbook.sheets[i] && workbook.sheets[i].index) && (delete workbook.sheets[i].index);
  1379. }
  1380. }
  1381. processCustomResponse() {
  1382. if (this.customresult.richtexts && this.customresult.richtexts.sheets.length) {
  1383. let rc = this.customresult.richtexts;
  1384. for (let i = 0; i < rc.sheets.length; i++) {
  1385. let idx = this.ssObj.biz.getSheetIndexByname(this.customresult.richtexts.sheets[i].name);
  1386. this.ssObj.sheets[idx].richtexts = { rows: rc.sheets[0].rows };
  1387. }
  1388. }
  1389. }
  1390. autoSave(args) {
  1391. if (!(args.action == "import" || args.action == "gotoSheets") && !this.isInitial) {
  1392. Unibase.Apps.Collaboration.Components.Common.Download.Instance().saveDocumentFile(this.FileId, "Excel", null, args, this).then(function () { });
  1393. }
  1394. }
  1395. cmenubfrender(args) {
  1396. let ele = document.createElement("span");
  1397. ele.classList.add("e-badge");
  1398. ele.classList.add("biz-contextmenu-badges");
  1399. let indexes = this.ssObj.biz.getIndexes();
  1400. let sheet = this.ssObj.biz.getActiveSheet();
  1401. if (args.item.text === "Filter") {
  1402. if (this.ssObj.filterCollection) {
  1403. let sheetsWithFilter = this.ssObj.filterCollection.map(x => x.sheetIndex);
  1404. if (sheetsWithFilter.includes(this.getSheetIndex())) {
  1405. if (args.element.classList.contains("e-disabled")) {
  1406. args.element.classList.add("e-disabled");
  1407. }
  1408. }
  1409. }
  1410. }
  1411. else if (args.item.text === "Clear validation") {
  1412. for (var i = indexes[0]; i <= indexes[2]; i++) {
  1413. for (var j = indexes[1]; j <= indexes[3]; j++) {
  1414. let cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  1415. if (cellInfo && !cellInfo.validation) {
  1416. args.element.classList.add("e-disabled");
  1417. i = indexes[2] + 1;
  1418. j = indexes[3] + 1;
  1419. }
  1420. }
  1421. }
  1422. }
  1423. else if (args.item.text === "Cut") {
  1424. ele.textContent = "Ctrl+X";
  1425. }
  1426. else if (args.item.text === "Copy") {
  1427. ele.textContent = "Ctrl+C";
  1428. }
  1429. else if (args.item.text === "Paste") {
  1430. ele.textContent = "Ctrl+V";
  1431. }
  1432. else if (args.item.text === "Values") {
  1433. ele.textContent = "Ctrl+Shift+V";
  1434. }
  1435. else if (args.item.text === "Hyperlink") {
  1436. ele.textContent = "Ctrl+K";
  1437. }
  1438. if (args && args.element && !args.element.classList.contains("e-separator") && args.element.id !== "DocumentViewer_cmenu_colorpallet")
  1439. args.element.append(ele);
  1440. if (args.item.text === "Move Right") {
  1441. let idx = this.ssObj.biz.getSheetIndexByname((this.selectedSheetName || sheet.name));
  1442. if (idx === this.ssObj.sheets.length - 1)
  1443. args.element.classList.add("e-disabled");
  1444. }
  1445. if (args.item.text === "Move Left") {
  1446. let idx = this.ssObj.biz.getSheetIndexByname((this.selectedSheetName || sheet.name));
  1447. if (idx === 0)
  1448. args.element.classList.add("e-disabled");
  1449. }
  1450. }
  1451. cmenuSelect(args) {
  1452. let id = this.ssObj.element.id + '_cmenu_';
  1453. let sheets = this.ssObj.sheets;
  1454. let idx = this.getSheetIndex();
  1455. let range = this.ssObj.biz.getRange();
  1456. let i1, i2;
  1457. switch (args.item.id) {
  1458. case id + 'insertrowabove':
  1459. case id + 'insertrow':
  1460. this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_row_above' } });
  1461. break;
  1462. case id + 'insertrowbelow':
  1463. this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_row_below' } });
  1464. break;
  1465. case id + 'insertcolright':
  1466. this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_column_after' } });
  1467. break;
  1468. case id + 'insertcolleft':
  1469. case id + 'insertcolumn':
  1470. this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_column_before' } });
  1471. break;
  1472. case id + 'shiftright':
  1473. this.formatpainter.insertShiftRight(range);
  1474. this.download.ssAutoSave({ action: "insertCell" }, this, true);
  1475. break;
  1476. case id + 'shiftdown':
  1477. this.formatpainter.insertShiftDown(range);
  1478. break;
  1479. case id + 'deleterow':
  1480. this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_delete_row' } });
  1481. break;
  1482. case id + 'deletecolumn':
  1483. this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_delete_column' } });
  1484. break;
  1485. case id + 'shiftleft':
  1486. this.formatpainter.deleteShiftLeft(range);
  1487. break;
  1488. case id + 'shiftup':
  1489. this.formatpainter.deleteShiftUp(range);
  1490. break;
  1491. case id + 'deletevalue':
  1492. this.ssObj.editModule.editingHandler('delete');
  1493. break;
  1494. case id + 'datvalidation':
  1495. this.ssObj.notify('initiatedatavalidation', null);
  1496. break;
  1497. case id + 'highlightinvaliddata':
  1498. this.ssObj.addInvalidHighlight();
  1499. break;
  1500. case id + 'clearhighlight':
  1501. this.ssObj.removeInvalidHighlight();
  1502. break;
  1503. case id + 'clearvalidation':
  1504. this.ssObj.notify('removeDataValidation', null);
  1505. break;
  1506. case id + 'delete_sheet':
  1507. args.item.id = "skipped";
  1508. this.formatpainter.renderConfirmDlg();
  1509. break;
  1510. case id + 'biz_insert':
  1511. this.ssObj.element.querySelector('.e-add-sheet-tab').click();
  1512. break;
  1513. case id + 'existingspreadsheet':
  1514. break;
  1515. case id + 'newspreadsheet':
  1516. Unibase.Apps.Collaboration.DocumentManager.Instance().CopySheetToNewSpreadsheet({ FileId: this.FileId, sheetIndex: this.getSheetIndex() }).then((res) => {
  1517. });
  1518. break;
  1519. case id + 'removefilter':
  1520. this.ssObj.applyFilter();
  1521. let sortingBtn = document.getElementById("DocumentViewer_sorting");
  1522. sortingBtn.firstElementChild.style.color = "";
  1523. break;
  1524. case id + 'changecolor':
  1525. break;
  1526. case id + 'insertnote':
  1527. this.formatpainter.insertNote();
  1528. break;
  1529. case id + 'clearnotes':
  1530. this.formatpainter.clearComment();
  1531. break;
  1532. case id + 'resizecolumns':
  1533. case id + 'resizecolumn':
  1534. case id + 'resizerows':
  1535. case id + 'resizerow':
  1536. this.dialogue.renderResizeDialog();
  1537. break;
  1538. }
  1539. }
  1540. cmenuBfOpen(args) {
  1541. let target = this.ssObj.contextMenuModule.getTarget(args.event.target);
  1542. let id = this.ssObj.element.id + '_cmenu_';
  1543. let ins = this.ssObj.contextMenuModule.contextMenuInstance;
  1544. let data = this.ssObj.contextMenuModule.getDataSource(target);
  1545. let spt = this.ssObj.biz.getRange().split(':');
  1546. let stCol = spt[0].replace(/[0-9]/g, '');
  1547. let endCol = spt[1].replace(/[0-9]/g, '');
  1548. let stRow = spt[0].match(/\d+$/)[0];
  1549. let endRow = spt[1].match(/\d+$/)[0];
  1550. let indexes = this.ssObj.biz.getIndexes();
  1551. let isRowsSelected = this.ssObj.biz.isRowsSelected(indexes);
  1552. let isColsSelected = this.ssObj.biz.isColsSelected(indexes);
  1553. let row = (indexes[2] - indexes[0] + 1);
  1554. let col = (indexes[3] - indexes[1] + 1);
  1555. let sheet = this.ssObj.biz.getActiveSheet();
  1556. let range = this.ssObj.getActiveSheet().selectedRange;
  1557. let count = (range.match(/:/g) || []).length;
  1558. let ranges;
  1559. let dataValidationItems = [{ text: 'Data validation', iconCss: '', id: id + 'datvalidation' },
  1560. { text: 'Highlight invalid data', iconCss: '', id: id + 'highlightinvaliddata' },
  1561. { text: 'Clear highlight', iconCss: '', id: id + 'clearhighlight' },
  1562. { text: 'Clear validation', cssClass: "e-disabled", iconCss: '', id: id + 'clearvalidation' },];
  1563. switch (target) {
  1564. case 'Content':
  1565. if (count <= 1) {
  1566. data.push({ separator: true });
  1567. if (isRowsSelected) {
  1568. data.push({ text: 'Insert ' + row + ' above', iconCss: '', id: id + 'insertrowabove' });
  1569. data.push({ text: 'Insert ' + row + ' below', iconCss: '', id: id + 'insertrowbelow' });
  1570. }
  1571. else {
  1572. !isColsSelected && data.push({ text: 'Insert ' + row + ' row' + (row > 1 ? 's' : ''), iconCss: '', id: id + 'insertrow' });
  1573. }
  1574. if (isColsSelected) {
  1575. data.push({ text: 'Insert ' + col + ' left', iconCss: '', id: id + 'insertcolleft' });
  1576. data.push({ text: 'Insert ' + col + ' right', iconCss: '', id: id + 'insertcolright' });
  1577. }
  1578. else {
  1579. !isRowsSelected && data.push({ text: 'Insert ' + col + ' column' + (col > 1 ? 's' : ''), iconCss: '', id: id + 'insertcolumn' });
  1580. }
  1581. data.push({ text: 'Insert cells', iconCss: '', id: id + 'insertcells', items: [{ text: 'Shift right', iconCss: '', id: id + 'shiftright' }, { text: 'Shift down', iconCss: '', id: id + 'shiftdown' }] });
  1582. data.push({ separator: true });
  1583. !isColsSelected && data.push({ text: row > 1 ? 'Delete selected rows' : 'Delete row', iconCss: '', id: id + 'deleterow' });
  1584. !isRowsSelected && data.push({ text: stCol === endCol ? 'Delete column ' + stCol : 'Delete columns ' + stCol + ' - ' + endCol, iconCss: '', id: id + 'deletecolumn' });
  1585. data.push({ text: 'Delete cells', iconCss: '', id: id + 'deletecells', items: [{ text: 'Shift left', iconCss: '', id: id + 'shiftleft' }, { text: 'Shift up', iconCss: '', id: id + 'shiftup' }] });
  1586. data.push({ separator: true });
  1587. data.push({ text: 'Insert note', iconCss: '', id: id + 'insertnote' });
  1588. if (sheet.comments && sheet.comments.rows[indexes[0]] && sheet.comments.rows[indexes[0]].cells[indexes[1]]) {
  1589. data.push({ text: 'Clear notes', iconCss: '', id: id + 'clearnotes' });
  1590. }
  1591. }
  1592. data.push({ text: 'Validations', iconCss: '', id: id + 'datvalidation', items: dataValidationItems });
  1593. data.find(x => x.text == "Filter").items.splice(2, 0, { text: "Remove filter", id: id + "removefilter" });
  1594. break;
  1595. case 'ColumnHeader':
  1596. data.splice(5, 1);
  1597. if (isColsSelected) {
  1598. data.splice(5, 0, { text: 'Insert ' + col + ' left', iconCss: '', id: id + 'insertcolleft' });
  1599. data.splice(6, 0, { text: 'Insert ' + col + ' right', iconCss: '', id: id + 'insertcolright' });
  1600. if (range.includes(" "))
  1601. data.splice(9, 0, { text: 'Resize selected columns', iconCss: '', id: id + 'resizecolumns' });
  1602. else if (col > 1) {
  1603. let cols = this.generateText((indexes[1] + 1)) + " - " + this.generateText((indexes[3] + 1));
  1604. data.splice(9, 0, { text: 'Resize Columns ' + cols, iconCss: '', id: id + 'resizecolumns' });
  1605. }
  1606. else
  1607. data.splice(9, 0, { text: 'Resize Column', iconCss: '', id: id + 'resizecolumn' });
  1608. }
  1609. else
  1610. data.splice(5, 0, { text: 'Insert ' + col + ' column' + (col > 1 ? 's' : ''), iconCss: '', id: id + 'insertcolumn' });
  1611. data.splice(data.length - 1, 0, { text: 'Clear column' + (col > 1 ? 's' : ''), iconCss: '', id: id + 'deletevalue' });
  1612. data.push({ separator: true });
  1613. data.push({ text: 'Validations', iconCss: '', id: id + 'datvalidation', items: dataValidationItems });
  1614. break;
  1615. case 'RowHeader':
  1616. data.splice(5, 1);
  1617. if (isRowsSelected) {
  1618. data.splice(5, 0, { text: 'Insert ' + row + ' above', iconCss: '', id: id + 'insertrowabove' });
  1619. data.splice(6, 0, { text: 'Insert ' + row + ' below', iconCss: '', id: id + 'insertrowbelow' });
  1620. if (range.includes(" "))
  1621. data.splice(10, 0, { text: 'Resize selected rows', iconCss: '', id: id + 'resizerows' });
  1622. else if (row > 1)
  1623. data.splice(10, 0, { text: 'Resize rows ' + (indexes[0] + 1) + " - " + (indexes[2] + 1), iconCss: '', id: id + 'resizerows' });
  1624. else
  1625. data.splice(10, 0, { text: 'Resize row ', iconCss: '', id: id + 'resizerow' });
  1626. }
  1627. else
  1628. data.splice(5, 0, { text: 'Insert ' + row + ' row' + (row > 1 ? 's' : ''), iconCss: '', id: id + 'insertrow' });
  1629. data.splice(data.length - 1, 0, { text: 'Clear row' + (row > 1 ? 's' : ''), iconCss: '', id: id + 'deletevalue' });
  1630. data.push({ separator: true });
  1631. data.push({ text: 'Validations', iconCss: '', id: id + 'datvalidation', items: dataValidationItems });
  1632. break;
  1633. case 'Footer':
  1634. data[0].id = this.ssObj.element.id + '_cmenu_biz_insert';
  1635. data.push({
  1636. text: 'Copy to', iconCss: '', id: id + 'copyto', items: [{ text: "New Spreadsheet", iconCss: '', id: id + 'newspreadsheet' },
  1637. { text: "Existing Spreadsheet", iconCss: '', id: id + 'existingspreadsheet' }]
  1638. });
  1639. data.push({ text: 'Change Color', iconCss: '', id: id + 'changecolor', items: [{ id: id + 'colorpallet' }] });
  1640. break;
  1641. }
  1642. if (target.length) {
  1643. ins.items = data;
  1644. ins.dataBind();
  1645. if (target === 'footer') {
  1646. }
  1647. if (target === 'Content') {
  1648. }
  1649. }
  1650. if (args.items && args.items[0] && args.items[0].id == id + "colorpallet") {
  1651. document.getElementById(id + "colorpallet").appendChild(this.changecolor);
  1652. args.element.style.height = "225px";
  1653. let top = window.innerHeight - 400;
  1654. args.element.style.top = args.element.style.top + top + "px";
  1655. args.element.style.borderRadius = "5px";
  1656. }
  1657. }
  1658. tabSelected() {
  1659. this.updateSheetIcon();
  1660. }
  1661. colourpicker() {
  1662. this.changecolor = document.createElement("div");
  1663. this.changecolor.setAttribute("id", "changecolor_" + this.FileId);
  1664. document.body.appendChild(this.changecolor);
  1665. this.ModalHtml = ` <div id ="colorpalettecointiner"><div class='list-group' id='colourpalette'><button id="biz-ss-colorpalletreset" style="border: none;text-align: left;font-weight: 400;padding: 0px;cursor: pointer;" onclick="Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().sheetColorChange('0')"><span><i class="la la-tint-slash"></i></span>Reset</button></div></div>`;
  1666. $("#changecolor_" + this.FileId).html(this.ModalHtml);
  1667. var palette = [
  1668. '000000', '434343', '666666', '999999', 'b7b7b7', 'cccccc', 'd9d9d9', 'efefef', 'f3f3f3', 'ffffff',
  1669. '980000', 'ff0000', 'ff9900', 'ffff00', '00ff00', '00ffff', '4a86e8', '0000ff', '9900ff', 'ff00ff',
  1670. 'e6b8af', 'f4cccc', 'fce5cd', 'fff2cc', 'd9ead3', 'd0e0e3', 'c9daf8', 'cfe2f3', 'd9d2e9', 'ead1dc',
  1671. 'dd7e6b', 'ea9999', 'f9cb9c', 'ffe599', 'b6d7a8', 'a2c4c9', 'a4c2f4', '9fc5e8', 'b4a7d6', 'd5a6bd',
  1672. 'cc4125', 'e06666', 'f6b26b', 'ffd966', '93c47d', '76a5af', '6d9eeb', '6fa8dc', '8e7cc3', 'c27ba0',
  1673. 'a61c00', 'cc0000', 'e69138', 'f1c232', '6aa84f', '45818e', '3c78d8', '3d85c6', '674ea7', 'a64d79',
  1674. '85200c', '990000', 'b45f06', 'bf9000', '38761d', '134f5c', '1155cc', '0b5394', '351c75', '741b47',
  1675. '5b0f00', '660000', '783f04', '7f6000', '274e13', '0c343d', '1c4587', '073763', '20124d', '4c1130',
  1676. ];
  1677. var k = 0;
  1678. var html = "";
  1679. var html1 = "";
  1680. for (let i = 0; i < 8; i++) {
  1681. html = `<div id="biz-ss-colorpallet-` + i + `" class="list-group" style="display: flex;flex-direction: row;">`;
  1682. $("#colourpalette").append(html);
  1683. var rowcount = 10;
  1684. let j = 0;
  1685. for (j; j < rowcount; j++) {
  1686. html1 = `<span class="colorpalettegrid border rounded-circle" role="gridcell" id="id_` + palette[k] + `" aria-label="` + palette[k] + `" style="background-color:#` + palette[k] + `;width: 20px;height: 20px;"" onclick="Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().sheetColorChange('` + palette[k] + `')"></span>`;
  1687. $("#biz-ss-colorpallet-" + i).append(html1);
  1688. k++;
  1689. }
  1690. $("#biz-ss-colorpallet-" + i).append("</div>");
  1691. }
  1692. }
  1693. updatePadding(isAdd) {
  1694. let active = this.ssObj.element.querySelector('.e-sheet-tab').querySelector('.biz-dd-active');
  1695. if (active) {
  1696. let parent = active.parentElement;
  1697. isAdd ? parent.classList.add('biz-dd-parent') : parent.classList.remove('biz-dd-parent');
  1698. }
  1699. }
  1700. updateSheetIcon() {
  1701. let sheets = this.ssObj.sheets;
  1702. let activeSheet = this.ssObj.getActiveSheet();
  1703. let sheetsElem = this.ssObj.element.querySelector('.e-sheet-tab').querySelectorAll('.e-text-wrap');
  1704. for (let i = 0; i < sheets.length; i++) {
  1705. if (sheetsElem[i] && !sheetsElem[i].querySelectorAll('.biz-dd-wrap').length) {
  1706. let wrap = ej.base.createElement('div', { className: 'biz-dd-wrap' });
  1707. let icon = ej.base.createElement('span', { className: 'e-icons biz-dd-icon' });
  1708. wrap.appendChild(icon);
  1709. sheetsElem[i].appendChild(wrap);
  1710. }
  1711. let wrap = sheetsElem[i].querySelector('.biz-dd-wrap');
  1712. wrap.classList.remove('biz-dd-active');
  1713. if (activeSheet.name === sheetsElem[i].querySelector('.e-tab-text').innerText) {
  1714. wrap.classList.add('biz-dd-active');
  1715. }
  1716. }
  1717. }
  1718. dataBound(args) {
  1719. if (this.isInitial) {
  1720. this.reqCount++;
  1721. if (this.reqCount == 2)
  1722. this.isInitial = false;
  1723. }
  1724. setTimeout(() => {
  1725. this.ssObj.sheetTabsModule.refreshSheetTab();
  1726. this.sheetColorRender();
  1727. }, 50);
  1728. this.updateSheetIcon();
  1729. this.formatpainter.updateEdgesOnBound();
  1730. }
  1731. actionBegin(args) {
  1732. this.prevFormulaRange = "";
  1733. this.formulaActiveCell = "";
  1734. this.isFormula = false;
  1735. if (args.action === "filter") {
  1736. this.sortingBtn = document.getElementById("DocumentViewer_sorting");
  1737. this.sortingBtn.firstElementChild.style.color = "rgb(12 143 11)";
  1738. }
  1739. else if (args.action === 'renameSheet') {
  1740. let active = this.ssObj.element.querySelector('.e-sheet-tab').querySelector('.biz-dd-active');
  1741. this.updatePadding(true);
  1742. active.remove();
  1743. }
  1744. else if (args.action === 'beforeInsertImage') {
  1745. var indexes = this.ssObj.biz.getIndexes();
  1746. let sheet = this.ssObj.biz.getActiveSheet();
  1747. this.oldCellInfo = Object.assign({}, ej.spreadsheet.getCell(indexes[0], indexes[1], sheet));
  1748. }
  1749. else if (args.action === 'clipboard') {
  1750. (args.args && args.args.eventArgs && args.args.eventArgs.copiedInfo && args.args.eventArgs.copiedInfo.isCut) && this.removeInCellImage(args.args.eventArgs.pastedRange);
  1751. }
  1752. }
  1753. actionComplete(args) {
  1754. this.prevFormulaRange = "";
  1755. this.formulaActiveCell = "";
  1756. args.action === 'cellSave' && (this.f2Edit = false, this.isFormula = false);
  1757. if (args.eventArgs && args.eventArgs.modelType && (args.eventArgs.modelType == "Sheet" || args.eventArgs.modelType == "Row" || args.eventArgs.modelType == "Column") && (args.action == "insert" || args.action == "delete")) {
  1758. args.eventArgs.sheet = [];
  1759. this.focusDocumentViewer();
  1760. }
  1761. if (args.action == "resizeToFit") {
  1762. this.ribbon.imageInCell = true;
  1763. }
  1764. if (args.action !== 'import' && Unibase.Apps.Collaboration.Components.Documents.Instance()._openedfile.signalrData != JSON.stringify(args)) {
  1765. var onlineStatus = (window.navigator.onLine ? 'on' : 'off') + 'line';
  1766. window.addEventListener('online', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'inline-block');
  1767. window.addEventListener('online', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "none");
  1768. window.addEventListener('offline', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'none');
  1769. window.addEventListener('offline', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "inline-block");
  1770. try {
  1771. Unibase.Apps.Collaboration.Hubs.UniDocHub.Instance(_appsettings.dochub_url()).
  1772. getConnection().
  1773. invoke("ChangeDoc", Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().FileId, JSON.stringify(args));
  1774. }
  1775. catch (_a) {
  1776. }
  1777. }
  1778. if (args.eventArgs && args.eventArgs.modelType && args.eventArgs.modelType == "Row" && args.action == "delete") {
  1779. this.removeInCellImage("", [args.eventArgs.startIndex, 0, args.eventArgs.endIndex, this.ssObj.biz.getActiveSheet().usedRange.colIndex]);
  1780. }
  1781. if (args.eventArgs && args.eventArgs.modelType && args.eventArgs.modelType == "Column" && args.action == "delete") {
  1782. this.removeInCellImage("", [0, args.eventArgs.startIndex, this.ssObj.biz.getActiveSheet().usedRange.rowIndex, args.eventArgs.endIndex]);
  1783. }
  1784. if (args.action === 'renameSheet') {
  1785. this.updateSheetIcon();
  1786. this.updatePadding(false);
  1787. this.sheetColorRender();
  1788. }
  1789. if (args.action === 'moveSheet') {
  1790. this.ssObj.sheets[args.position].index = args.position;
  1791. this.ssObj.sheets[args.sheetIndexes[0]].index = args.sheetIndexes[0];
  1792. var data = {
  1793. FileId: this.FileId,
  1794. PreviousSheetIndex: args.sheetIndexes[0],
  1795. PresentSheetIndex: args.position,
  1796. };
  1797. Unibase.Apps.Collaboration.DocumentManager.Instance().updateSheetColorIndex(data).then((res) => {
  1798. this.customresult = res.result;
  1799. this.sheetColorRender();
  1800. });
  1801. this.focusDocumentViewer();
  1802. }
  1803. if (args.action === 'insert') {
  1804. if (args.eventArgs.insertType === "Row") {
  1805. this.ssObj.insertRow(args.eventArgs.index, args.eventArgs.index);
  1806. }
  1807. if (args.eventArgs.insertType === "Column") {
  1808. this.ssObj.insertColumn([{ index: args.eventArgs.index, width: 95 }], args.eventArgs.index);
  1809. }
  1810. }
  1811. if (args.action == "insertImage") {
  1812. this.actionInsertImage(args);
  1813. }
  1814. if (args.action === "imageRefresh" && args && args.eventArgs && args.eventArgs.id) {
  1815. this.imageRefresh(args);
  1816. }
  1817. if (args.action === "resize" && !this.isResizing) {
  1818. this.resizeImagesOnActionResize(args);
  1819. this.isResizing = true;
  1820. this.adjustRowsAndColumnWidth(args);
  1821. this.isResizing = false;
  1822. }
  1823. if (args.action === "cellDelete")
  1824. this.removeInCellImage(args.eventArgs.address.split("!")[1]);
  1825. if (args.action === "format") {
  1826. setTimeout(() => {
  1827. this.setIncellImageHeightOnFontChange(args);
  1828. }, 100);
  1829. }
  1830. if (args.action === 'resize' || (args.action === 'format' && args.eventArgs.style && args.eventArgs.style.fontSize)) {
  1831. if (args.eventArgs.isCol) {
  1832. let size = parseInt(args.eventArgs.width) - parseInt(args.eventArgs.oldWidth);
  1833. this.formatpainter.refreshEdges(false, undefined, args.eventArgs.index, size);
  1834. }
  1835. else if (args.eventArgs.isCol === false) {
  1836. let size = parseInt(args.eventArgs.height) - parseInt(args.eventArgs.oldHeight);
  1837. this.formatpainter.refreshEdges(false, args.eventArgs.index, undefined, size);
  1838. }
  1839. else {
  1840. this.formatpainter.refreshEdges(false);
  1841. }
  1842. }
  1843. if (args.action === 'clipboard') {
  1844. this.removeCopyIndicator();
  1845. this.clipboardBizImages(args);
  1846. (args.eventArgs && args.eventArgs.copiedInfo && args.eventArgs.copiedInfo.isCut) && (this.removeInCellImage(args.eventArgs.pastedRange.split("!")[1]));
  1847. }
  1848. if (args.action === "gotoSheet") {
  1849. this.sortingBtn = document.getElementById("DocumentViewer_sorting");
  1850. this.sortingBtn.firstElementChild.style.color = "";
  1851. if ((this.ssObj.filterCollection) && this.ssObj.filterCollection.find(x => x.sheetIndex === args.eventArgs.currentSheetIndex)) {
  1852. this.sortingBtn.firstElementChild.style.color = "rgb(12 143 11)";
  1853. }
  1854. setTimeout(() => { this.addImageClassToAllImages(); }, 1000);
  1855. this.focusDocumentViewer();
  1856. }
  1857. if (args.action === "filter" && !this.isInitial) {
  1858. this.updateFilters(args);
  1859. }
  1860. if (args.action == "import") {
  1861. this.updateFilterIcon();
  1862. }
  1863. this.removeCopyIndicator();
  1864. args.action == "gotoSheet" && (setTimeout(() => { this.addImageClassToAllImages(); }, 1000));
  1865. (this.ribbon.imageInCell) ? (this.ribbon.imageInCell = false) : this.autoSave(args);
  1866. }
  1867. updateFilterIcon() {
  1868. setTimeout(() => {
  1869. this.sortingBtn = document.getElementById("DocumentViewer_sorting");
  1870. if (this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) {
  1871. this.sortingBtn.firstElementChild.style.color = "rgb(12 143 11)";
  1872. }
  1873. else {
  1874. this.sortingBtn.firstElementChild.style.color = "";
  1875. }
  1876. });
  1877. }
  1878. focusDocumentViewer() {
  1879. setTimeout(() => {
  1880. document.getElementById("DocumentViewer").focus();
  1881. }, 100);
  1882. }
  1883. removeInCellImage(range, indexes) {
  1884. let rangeIndexes;
  1885. if (!indexes) {
  1886. rangeIndexes = ej.spreadsheet.getIndexesFromAddress(range);
  1887. }
  1888. else {
  1889. rangeIndexes = indexes;
  1890. }
  1891. let sheet = this.ssObj.biz.getActiveSheet();
  1892. let sheetName = this.setSheetNameForInCell(sheet.name);
  1893. for (var i = rangeIndexes[0]; i <= rangeIndexes[2]; i++) {
  1894. for (var j = rangeIndexes[1]; j <= rangeIndexes[3]; j++) {
  1895. let idEndswith = sheetName + "_" + i + "_" + j;
  1896. let cell = ej.spreadsheet.getCell(i, j, sheet);
  1897. if (cell && cell.image && cell.image[0] && cell.image[0].id.startsWith("biz_image_in_cell")) {
  1898. let img = document.getElementById(cell.image[0].id);
  1899. if (img)
  1900. img.remove();
  1901. }
  1902. else if (document.querySelector(`[id$= ${idEndswith}]`)) {
  1903. let img = document.querySelector(`[id$= ${idEndswith}]`);
  1904. if (img)
  1905. img.remove();
  1906. }
  1907. }
  1908. }
  1909. }
  1910. removeCopyIndicator() {
  1911. if (document.getElementsByClassName("e-copy-indicator")[0])
  1912. document.getElementsByClassName("e-copy-indicator")[0].style.display = "none";
  1913. if (document.getElementsByClassName("e-formularef-indicator")[0])
  1914. document.getElementsByClassName("e-formularef-indicator")[0].remove();
  1915. }
  1916. updateFilters(args) {
  1917. this.ribbon.imageInCell = true;
  1918. let sheetIdx = this.getSheetIndex();
  1919. if (args.eventArgs.filterOptions) {
  1920. let collection = {
  1921. sheetIdx: sheetIdx, column: [], criteria: [], dataType: [], filterRange: args.eventArgs.range,
  1922. hasFilter: true, predicates: [], value: []
  1923. };
  1924. this.download.ssAutoSave({ action: "applyFilter", collection: collection }, this, true);
  1925. }
  1926. else if (args.eventArgs.predicates) {
  1927. let cols = args.eventArgs.predicates.map(x => x.field);
  1928. let collection = {
  1929. sheetIdx: sheetIdx,
  1930. column: cols.map(this.lettersToNumber),
  1931. criteria: args.eventArgs.predicates.map(x => x.operator),
  1932. dataType: args.eventArgs.predicates.map(x => x.type),
  1933. filterRange: args.eventArgs.range,
  1934. hasFilter: true,
  1935. predicates: args.eventArgs.predicates.map(x => x.predicate),
  1936. value: args.eventArgs.predicates.map(x => x.value),
  1937. };
  1938. this.download.ssAutoSave({ action: "updateFilter", collection: collection }, this, true);
  1939. if (this.ssObj.sheets[sheetIdx] && this.ssObj.sheets[sheetIdx].rows) {
  1940. for (var i = 0; i < this.ssObj.sheets[sheetIdx].rows.length; i++) {
  1941. if (this.ssObj.sheets[sheetIdx].rows[i] && this.ssObj.sheets[sheetIdx].rows[i].hidden && this.ssObj.sheets[sheetIdx].rows[i].cells) {
  1942. for (var j = 0; j < this.ssObj.sheets[sheetIdx].rows[i].cells.length; j++) {
  1943. if (this.ssObj.sheets[sheetIdx].rows[i].cells[j] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id.startsWith("biz_image_in_cell")) {
  1944. let img = document.getElementById(this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id);
  1945. if (img)
  1946. img.style.display = "none";
  1947. }
  1948. }
  1949. }
  1950. else if (this.ssObj.sheets[sheetIdx].rows[i].cells) {
  1951. for (var j = 0; j < this.ssObj.sheets[sheetIdx].rows[i].cells.length; j++) {
  1952. if (this.ssObj.sheets[sheetIdx].rows[i].cells[j] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id.startsWith("biz_image_in_cell")) {
  1953. let img = document.getElementById(this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id);
  1954. img.style.display = "";
  1955. }
  1956. }
  1957. }
  1958. }
  1959. }
  1960. }
  1961. else if (!args.eventArgs.filterOptions && !args.eventArgs.predicates) {
  1962. if (this.ssObj.sheets[sheetIdx] && this.ssObj.sheets[sheetIdx].rows) {
  1963. for (var i = 0; i < this.ssObj.sheets[sheetIdx].rows.length; i++) {
  1964. if (this.ssObj.sheets[sheetIdx].rows[i] && this.ssObj.sheets[sheetIdx].rows[i].hidden && this.ssObj.sheets[sheetIdx].rows[i].hidden == false && this.ssObj.sheets[sheetIdx].rows[i].cells) {
  1965. for (var j = 0; j < this.ssObj.sheets[sheetIdx].rows[i].cells.length; j++) {
  1966. if (this.ssObj.sheets[sheetIdx].rows[i].cells[j] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id.startsWith("biz_image_in_cell")) {
  1967. let img = document.getElementById(this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id);
  1968. img.style.display = "";
  1969. }
  1970. }
  1971. }
  1972. }
  1973. }
  1974. this.download.ssAutoSave({ action: "removeFilter", sheetIndex: this.getSheetIndex() }, this, true);
  1975. }
  1976. }
  1977. setIncellImageHeightOnFontChange(args) {
  1978. if (args.eventArgs && args.eventArgs.style && args.eventArgs.style.fontSize) {
  1979. let indexes = this.ssObj.biz.getIndexes();
  1980. let sheetIdx = this.getSheetIndex();
  1981. let sheet = this.ssObj.biz.getActiveSheet();
  1982. let freezeRow = this.ssObj.frozenRowCount(sheet);
  1983. let freezeCol = this.ssObj.frozenColCount(sheet);
  1984. let changedValues = [];
  1985. let remainingRowsImglist = [];
  1986. if (sheet.rows[indexes[0]].cells) {
  1987. let currentRowImageslist = [];
  1988. for (var i = indexes[0]; i <= indexes[2]; i++) {
  1989. currentRowImageslist = currentRowImageslist.concat(sheet.rows[i].cells.filter(x => x && x.image).map(x => x && x.image[0]));
  1990. }
  1991. currentRowImageslist.forEach(x => {
  1992. if ((x && x.id && x.id).startsWith("biz_image_in_cell")) {
  1993. let currentrow = Number(x.id.split("_")[5]);
  1994. let currentcol = Number(x.id.split("_")[6]);
  1995. let height = (this.ssObj.sheets[sheetIdx].rows[currentrow].height || 19);
  1996. let cellPstn = ej.spreadsheet.getCellPosition(sheet, [currentrow, currentcol], freezeRow, freezeCol);
  1997. if (document.getElementById(x.id)) {
  1998. (document.getElementById(x.id).style.top = cellPstn.top + "px");
  1999. document.getElementById(x.id).style.height = height + "px";
  2000. }
  2001. let cell = ej.spreadsheet.getCell(currentrow, currentcol, sheet);
  2002. cell.image[0].height = height - 2;
  2003. this.setImageSize("top", cell.image[0]);
  2004. this.setImageSize("left", cell.image[0]);
  2005. changedValues.push({ row: currentrow, cell: currentcol, cellinfo: cell });
  2006. }
  2007. });
  2008. }
  2009. for (let i = indexes[2] + 1; i < sheet.rows.length; i++) {
  2010. let list = sheet.rows[i] && sheet.rows[i].cells && sheet.rows[i].cells.filter(x => x && x.image).map(x => x && x.image[0]);
  2011. (list) && (remainingRowsImglist = remainingRowsImglist.concat(list));
  2012. }
  2013. remainingRowsImglist.forEach(x => {
  2014. if ((x && x.id && x.id).startsWith("biz_image_in_cell")) {
  2015. let row = parseInt(x.id.split("_")[5]);
  2016. let col = parseInt(x.id.split("_")[6]);
  2017. let cell = ej.spreadsheet.getCell(row, col, sheet);
  2018. let cellPstn = ej.spreadsheet.getCellPosition(sheet, [row, col], freezeRow, freezeCol);
  2019. if (document.getElementById(x.id))
  2020. (document.getElementById(x.id).style.top = cellPstn.top + "px");
  2021. cell.image[0].top = cellPstn.top;
  2022. this.setImageSize("top", cell.image[0]);
  2023. this.setImageSize("left", cell.image[0]);
  2024. changedValues.push({ row: row, cell: col, cellinfo: cell });
  2025. }
  2026. });
  2027. this.ribbon.imageInCell = true;
  2028. changedValues.length > 0 && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true);
  2029. }
  2030. }
  2031. setColumnIncellImageSize(range) {
  2032. let sheet = this.ssObj.biz.getActiveSheet();
  2033. let changedValuesArray = [];
  2034. let indexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(range));
  2035. for (var i = 0; i <= sheet.usedRange.rowIndex; i++) {
  2036. for (var j = indexes[1]; j <= sheet.usedRange.colIndex; j++) {
  2037. changedValuesArray = changedValuesArray.concat(this.performImageResize(sheet, i, j));
  2038. }
  2039. }
  2040. return changedValuesArray;
  2041. }
  2042. setRowIncellImageSize(range) {
  2043. let sheet = this.ssObj.biz.getActiveSheet();
  2044. let changedValuesArray = [];
  2045. let indexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(range));
  2046. for (var i = indexes[0]; i <= sheet.usedRange.rowIndex; i++) {
  2047. for (var j = 0; j <= sheet.usedRange.colIndex; j++) {
  2048. changedValuesArray = changedValuesArray.concat(this.performImageResize(sheet, i, j));
  2049. }
  2050. }
  2051. return changedValuesArray;
  2052. }
  2053. performImageResize(sheet, row, col) {
  2054. let changedValuesArray = [];
  2055. let cell = ej.spreadsheet.getCell(row, col, sheet);
  2056. if (cell && cell.image && cell.image.find(x => x.id.startsWith("biz_image_in_cell"))) {
  2057. let imageModel = cell.image.find(x => x.id.startsWith("biz_image_in_cell"));
  2058. let imgIdx = cell.image.indexOf(imageModel);
  2059. let height = (sheet.rows[row].height || 19) - 2;
  2060. let width = (sheet.columns[col].width || 64) - 1;
  2061. let cellPstn = ej.spreadsheet.getCellPosition(sheet, [row, col], sheet.frozenRows, sheet.frozenColumns);
  2062. if (document.getElementById(imageModel.id)) {
  2063. document.getElementById(imageModel.id).style.top = cellPstn.top + "px";
  2064. document.getElementById(imageModel.id).style.left = cellPstn.left + "px";
  2065. document.getElementById(imageModel.id).style.height = height + "px";
  2066. document.getElementById(imageModel.id).style.width = width + "px";
  2067. }
  2068. cell.image[0].top = cellPstn.top;
  2069. cell.image[0].left = cellPstn.left;
  2070. cell.image[0].height = height;
  2071. cell.image[0].width = width;
  2072. this.setImageSize("top", cell.image[0]);
  2073. this.setImageSize("left", cell.image[0]);
  2074. changedValuesArray.push({ row: row, cell: col, cellinfo: cell });
  2075. }
  2076. return changedValuesArray;
  2077. }
  2078. imageRefresh(args) {
  2079. let sheet = this.ssObj.getActiveSheet();
  2080. let idSplit = args.eventArgs.id.split("_");
  2081. let row = args.eventArgs.currentRowIdx;
  2082. let col = args.eventArgs.currentColIdx;
  2083. let cellInfo = ej.spreadsheet.getCell(row, col, sheet);
  2084. let sheetName = this.setSheetNameForInCell(sheet.name);
  2085. let curretImg = cellInfo.image.find(x => x.id == args.eventArgs.id);
  2086. if (cellInfo && cellInfo.image && curretImg) {
  2087. let newImgId;
  2088. if (curretImg.id.includes(sheetName)) {
  2089. for (var i = 0; i < 3; i++)
  2090. idSplit.pop();
  2091. }
  2092. else if (!curretImg.id.includes(sheetName)) {
  2093. if (sheet.pictures) {
  2094. let index = sheet.pictures.findIndex(x => x.imageId == args.eventArgs.id);
  2095. (index != -1) && (sheet.pictures.splice(index, 1));
  2096. }
  2097. }
  2098. newImgId = idSplit.join("_") + "_" + sheetName + "_" + row + "_" + col;
  2099. let ele = document.getElementById(args.eventArgs.id);
  2100. (ele) && (ele.id = newImgId);
  2101. cellInfo.image[0].id = newImgId;
  2102. cellInfo.image[0].left = args.eventArgs.currentLeft;
  2103. cellInfo.image[0].top = args.eventArgs.currentTop;
  2104. cellInfo.image[0].height = parseInt(ele.style.height);
  2105. cellInfo.image[0].width = parseInt(ele.style.width);
  2106. this.setImageSize("top", cellInfo.image[0]);
  2107. this.setImageSize("left", cellInfo.image[0]);
  2108. this.setImageSize("height", cellInfo.image[0]);
  2109. this.setImageSize("width", cellInfo.image[0]);
  2110. let changedValues = [{
  2111. row: args.eventArgs.prevRowIdx, cell: args.eventArgs.prevColIdx,
  2112. cellInfo: ej.spreadsheet.getCell(args.eventArgs.prevRowIdx, args.eventArgs.prevColIdx, sheet)
  2113. }, { row: row, cell: col, cellInfo: cellInfo }];
  2114. this.ribbon.imageInCell = true;
  2115. (changedValues.length > 0) && this.download.ssAutoSave({ action: "imageRefresh", changedValues: changedValues }, this, true);
  2116. }
  2117. }
  2118. clipboardBizImages(args) {
  2119. let sheetName;
  2120. let sheetIdx = this.getSheetIndex();
  2121. let sheet = this.ssObj.biz.getActiveSheet();
  2122. let freezeRow = this.ssObj.frozenRowCount(sheet);
  2123. let freezeCol = this.ssObj.frozenColCount(sheet);
  2124. let changedValues = [];
  2125. let pastedRange;
  2126. if (args.action == "cellDrag") {
  2127. pastedRange = args.pastedCellIdxs;
  2128. }
  2129. else {
  2130. pastedRange = this.ssObj.biz.getIndexes(args.eventArgs.pastedRange.split("!")[1]);
  2131. }
  2132. for (var i = pastedRange[0]; i <= pastedRange[2]; i++) {
  2133. for (var j = pastedRange[1]; j <= pastedRange[3]; j++) {
  2134. let cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  2135. sheetName = this.setSheetNameForInCell(sheet.name);
  2136. if (cellInfo && cellInfo.image && cellInfo.image[0].id.startsWith("biz_image_in_cell_")) {
  2137. let cellPstn = ej.spreadsheet.getCellPosition(sheet, [i, j], freezeRow, freezeCol);
  2138. let img = cellInfo.image[0];
  2139. let height, width;
  2140. height = (this.ssObj.sheets[sheetIdx].rows[i].height || 19) - 1;
  2141. width = (this.ssObj.sheets[sheetIdx].columns[j].width || 64) - 1;
  2142. if (args.eventArgs.copiedInfo.isCut) {
  2143. let ele = document.getElementById(cellInfo.image[0].id);
  2144. img.id = "biz_image_in_cell_" + sheetName + "_" + i + "_" + j;
  2145. ele.id = img.id;
  2146. ele.style.height = height + "px";
  2147. ele.style.width = width + "px";
  2148. ele.style.top = cellPstn.top + "px";
  2149. ele.style.left = cellPstn.left + "px";
  2150. }
  2151. else {
  2152. let prevEle = document.getElementById(cellInfo.image[0].id);
  2153. var div = document.createElement("div");
  2154. div.id = "biz_image_in_cell_" + sheetName + "_" + i + "_" + j;
  2155. div.style.top = cellPstn.top + "px";
  2156. div.style.left = cellPstn.left + "px";
  2157. div.style.height = height + "px";
  2158. div.style.width = width + "px";
  2159. div.style.backgroundImage = "url(" + cellInfo.image[0].src + ")";
  2160. div.classList.add('e-ss-overlay');
  2161. div.classList.add('biz_image_in_cell');
  2162. prevEle.after(div);
  2163. img.id = div.id;
  2164. }
  2165. img.left = cellPstn.left;
  2166. img.top = cellPstn.top;
  2167. img.width = width;
  2168. img.height = height;
  2169. this.setImageSize("top", img);
  2170. this.setImageSize("left", img);
  2171. cellInfo.image[0] = img;
  2172. changedValues.push({ row: i, cell: j, cellinfo: cellInfo });
  2173. this.ribbon.imageInCell = true;
  2174. }
  2175. }
  2176. }
  2177. if (changedValues.length > 0) {
  2178. this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true);
  2179. }
  2180. }
  2181. actionInsertImage(args) {
  2182. let sheetIdx = (args.sheetIndex) ? args.sheetIndex : this.getSheetIndex();
  2183. var indexes = (args.indexes) ? args.indexes : this.ssObj.biz.getIndexes();
  2184. let sheet = this.ssObj.biz.getActiveSheet();
  2185. let cellInfo = (args.cellInfo) ? args.cellInfo : ej.spreadsheet.getCell(indexes[0], indexes[1], sheet);
  2186. if (args.origin == "biz") {
  2187. this.ssObj.biz.setCell(indexes[0], indexes[1], sheet, cellInfo);
  2188. this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: indexes[0], cell: indexes[1], cellinfo: cellInfo }] }, this, true);
  2189. return;
  2190. }
  2191. let sheetName = this.setSheetNameForInCell(sheet.name);
  2192. let img = cellInfo.image.find(x => x.id == args.eventArgs.id);
  2193. let ele = document.getElementById(args.eventArgs.id);
  2194. if (this.ribbon.imageInCell) {
  2195. if (cellInfo.image && cellInfo.image.find(x => x.id.startsWith("biz_image_in_cell"))) {
  2196. let prevImgInCell = cellInfo.image.find(x => x.id.startsWith("biz_image_in_cell"));
  2197. document.getElementById(prevImgInCell.id).remove();
  2198. let prevImgIndex = cellInfo.image.indexOf(prevImgInCell);
  2199. if (~prevImgIndex)
  2200. cellInfo.image.splice(prevImgIndex, 1);
  2201. }
  2202. img.id = "biz_image_in_cell_" + sheetName + "_" + indexes[0] + "_" + indexes[1];
  2203. let height, width;
  2204. height = (this.ssObj.sheets[sheetIdx].rows[indexes[0]].height || 19) - 1;
  2205. ele.style.height = height + "px";
  2206. img.height = height;
  2207. width = (this.ssObj.sheets[sheetIdx].columns[indexes[1]].width || 64) - 1;
  2208. ele.style.width = width + "px";
  2209. img.width = width;
  2210. cellInfo.value = "";
  2211. ele.classList.add("biz_image_in_cell");
  2212. }
  2213. else {
  2214. img.id = "spreadsheet_overlay_picture_" + sheetName + "_" + indexes[0] + "_" + indexes[1];
  2215. }
  2216. this.setImageSize("top", img);
  2217. this.setImageSize("left", img);
  2218. ele.id = img.id;
  2219. cellInfo.image[(cellInfo.image.length) - 1] = img;
  2220. this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: indexes[0], cell: indexes[1], cellinfo: cellInfo }] }, this, true);
  2221. let args_undoredo = { indexes: indexes, range: this.ssObj.biz.getRange(), cellInfo: cellInfo, action: 'insertimage', origin: 'biz', sheetIndex: sheetIdx };
  2222. (this.ribbon.imageInCell) && this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'bizImageInCell', options: args_undoredo, oldCells: this.oldCellInfo } });
  2223. this.oldCellInfo = {};
  2224. this.ribbon.imageInCell = true;
  2225. this.bizSignalr(args_undoredo);
  2226. setTimeout(() => {
  2227. const index = this.ssObj.undoredoModule.undoCollection.indexOf(this.ssObj.undoredoModule.undoCollection.filter(x => x.name == "bizAction").pop());
  2228. this.ssObj.undoredoModule.undoCollection.splice(index + 1, 1);
  2229. }, 500);
  2230. }
  2231. setImageSize(direction, img) {
  2232. if (img[direction] % 1 != 0) {
  2233. if (parseInt(img[direction].toString().split(".")[1]) < 50) {
  2234. img[direction] = parseInt(img[direction].toString().split(".")[0]);
  2235. }
  2236. else {
  2237. img[direction] = parseInt(img[direction].toString().split(".")[0]) + 1;
  2238. }
  2239. }
  2240. else {
  2241. img[direction] = parseInt(img[direction]);
  2242. }
  2243. }
  2244. resizeImagesOnActionResize(args) {
  2245. let sheet = this.ssObj.biz.getActiveSheet();
  2246. if (args.eventArgs.isCol) {
  2247. if (sheet.rows && sheet.rows.length > 0) {
  2248. let changedValues = [];
  2249. let availableRows = sheet.rows.length;
  2250. for (var i = 0; i < availableRows; i++) {
  2251. let cellInfo = ej.spreadsheet.getCell(i, args.eventArgs.index, sheet);
  2252. if (cellInfo && cellInfo.image && cellInfo.image.length > 0 && cellInfo.image[0].id.startsWith("biz_image_in_cell")) {
  2253. document.getElementById(cellInfo.image[0].id).style.width = args.eventArgs.width;
  2254. cellInfo.image[0].width = parseInt(args.eventArgs.width);
  2255. changedValues.push({ row: i, cell: args.eventArgs.index, cellinfo: cellInfo });
  2256. }
  2257. }
  2258. for (var i = 0; i < availableRows; i++) {
  2259. for (var j = args.eventArgs.index + 1; j < sheet.columns.length; j++) {
  2260. let cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  2261. if (cellInfo && cellInfo.image && cellInfo.image.length > 0 && cellInfo.image[0].id.startsWith("biz_image_in_cell")) {
  2262. let previousWidth = cellInfo.image[0].left;
  2263. let changedWidth = Number(args.eventArgs.width.split("p")[0]) - Number(args.eventArgs.oldWidth.split("p")[0]);
  2264. let changedWidthWithoutDecimal = parseInt(changedWidth.toString().split(".")[0]);
  2265. if (changedWidth % 1 != 0) {
  2266. if (parseInt(changedWidth.toString().split(".")[1]) > 50) {
  2267. if (Math.sign(changedWidth) === -1) {
  2268. changedWidth = changedWidthWithoutDecimal - 1;
  2269. }
  2270. else if (Math.sign(changedWidth) === 1) {
  2271. changedWidth = changedWidthWithoutDecimal + 1;
  2272. }
  2273. }
  2274. }
  2275. let newWidth = previousWidth + changedWidth;
  2276. if (document.getElementById(cellInfo.image[0].id)) {
  2277. document.getElementById(cellInfo.image[0].id).style.left = newWidth + 'px';
  2278. }
  2279. cellInfo.image[0].left = newWidth;
  2280. changedValues.push({ row: i, cell: j, cellinfo: cellInfo });
  2281. }
  2282. }
  2283. }
  2284. changedValues.length > 0 && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true);
  2285. }
  2286. }
  2287. else {
  2288. let changedValues = [];
  2289. let remainingRowsImglist = [];
  2290. if (sheet.rows[args.eventArgs.index]) {
  2291. if (sheet.rows[args.eventArgs.index].cells) {
  2292. let currentRowImageslist = sheet.rows[args.eventArgs.index].cells.filter(x => x && x.image).map(x => x && x.image[0]);
  2293. currentRowImageslist.forEach(x => {
  2294. if ((x && x.id && x.id).startsWith("biz_image_in_cell")) {
  2295. document.getElementById(x.id).style.height = parseInt(args.eventArgs.height) - 2 + "px";
  2296. let col = parseInt(x.id.split("_")[6]);
  2297. let row = args.eventArgs.index;
  2298. let cell = ej.spreadsheet.getCell(row, col, sheet);
  2299. cell.image[0].height = parseInt(args.eventArgs.height) - 2;
  2300. changedValues.push({ row: row, cell: col, cellinfo: cell });
  2301. }
  2302. });
  2303. }
  2304. }
  2305. for (var i = parseInt(args.eventArgs.index) + 1; i < sheet.rows.length; i++) {
  2306. let list = sheet.rows[i] && sheet.rows[i].cells && sheet.rows[i].cells.filter(x => x && x.image).map(x => x && x.image[0]);
  2307. (list) && (remainingRowsImglist = remainingRowsImglist.concat(list));
  2308. }
  2309. remainingRowsImglist.forEach(x => {
  2310. if ((x && x.id && x.id).startsWith("biz_image_in_cell")) {
  2311. let row = parseInt(x.id.split("_")[5]);
  2312. let col = parseInt(x.id.split("_")[6]);
  2313. let cell = ej.spreadsheet.getCell(row, col, sheet);
  2314. let previousHeight = cell.image[0].top;
  2315. let changedHeight = Number(args.eventArgs.height.split("p")[0]) - Number(args.eventArgs.oldHeight.split("p")[0]);
  2316. let changedHeightWithoutDecimal = parseInt(changedHeight.toString().split(".")[0]);
  2317. if (changedHeight % 1 != 0) {
  2318. if (parseInt(changedHeight.toString().split(".")[1]) > 50) {
  2319. if (Math.sign(changedHeight) === -1) {
  2320. changedHeight = changedHeightWithoutDecimal - 1;
  2321. }
  2322. else if (Math.sign(changedHeight) === 1) {
  2323. changedHeight = changedHeightWithoutDecimal + 1;
  2324. }
  2325. }
  2326. }
  2327. let newHeight = previousHeight + changedHeight;
  2328. if (document.getElementById(x.id)) {
  2329. (document.getElementById(x.id).style.top = newHeight + "px");
  2330. }
  2331. cell.image[0].top = newHeight;
  2332. changedValues.push({ row: row, cell: col, cellinfo: cell });
  2333. }
  2334. });
  2335. changedValues.length > 0 && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true);
  2336. }
  2337. }
  2338. addImageClassToAllImages() {
  2339. let elements = document.querySelectorAll("[id^=biz_image_in_cell]");
  2340. elements.forEach(ele => ele.classList.add("biz_image_in_cell"));
  2341. }
  2342. bizSignalr(args) {
  2343. var onlineStatus = (window.navigator.onLine ? 'on' : 'off') + 'line';
  2344. window.addEventListener('online', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'inline-block');
  2345. window.addEventListener('online', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "none");
  2346. window.addEventListener('offline', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'none');
  2347. window.addEventListener('offline', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "inline-block");
  2348. try {
  2349. Unibase.Apps.Collaboration.Hubs.UniDocHub.Instance(_appsettings.dochub_url()).
  2350. getConnection().
  2351. invoke("ChangeDoc", Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().FileId, JSON.stringify(args));
  2352. }
  2353. catch (_a) {
  2354. }
  2355. }
  2356. refreshHeight() {
  2357. var rootHeight = this.element.parentElement.parentElement.offsetHeight;
  2358. var rbnHeight = this.ribbonElem.offsetHeight;
  2359. this.element.parentElement.style.height = (rootHeight - rbnHeight) + 'px';
  2360. }
  2361. adjustRowsAndColumnWidth(args) {
  2362. return __awaiter(this, void 0, void 0, function* () {
  2363. var indexes;
  2364. var type;
  2365. var newSize;
  2366. var oldSize;
  2367. var size;
  2368. let spltedrange = this.ssObj.getActiveSheet().selectedRange;
  2369. if (args.indexes != null) {
  2370. indexes = args.indexes;
  2371. }
  2372. else {
  2373. indexes = this.ssObj.biz.getIndexes();
  2374. }
  2375. if (args.undo) {
  2376. let rowstart = args.eventArgs.range[0];
  2377. let colstart = args.eventArgs.range[1];
  2378. let rowend = args.eventArgs.range[2];
  2379. let colend = args.eventArgs.range[3];
  2380. if (args.eventArgs.width) {
  2381. for (let i = colstart; i <= colend; i++)
  2382. yield this.dialogue.setColWidth(args.eventArgs.width[i].width, i);
  2383. }
  2384. if (args.eventArgs.height) {
  2385. for (let j = rowstart; j <= rowend; j++)
  2386. yield this.dialogue.setRowHeight(args.eventArgs.height[j].height, j);
  2387. }
  2388. }
  2389. else if (spltedrange.includes(" ") || (indexes[3] - indexes[1] > 0) || (indexes[2] - indexes[0] > 0)) {
  2390. if (args.eventArgs.width) {
  2391. type = "Column";
  2392. newSize = args.eventArgs.width;
  2393. oldSize = this.ssObj.getActiveSheet().columns;
  2394. size = args.eventArgs.width.replace(/[^0-9]/g, "");
  2395. if (parseInt(size) <= 30) {
  2396. args.eventArgs.width = '30px';
  2397. }
  2398. }
  2399. if (args.eventArgs.height) {
  2400. type = "Row";
  2401. newSize = args.eventArgs.height;
  2402. oldSize = this.ssObj.getActiveSheet().rows;
  2403. size = args.eventArgs.height.replace(/[^0-9]/g, "");
  2404. if (parseInt(size) <= 21) {
  2405. args.eventArgs.height = '21px';
  2406. }
  2407. }
  2408. this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'resize', eventArgs: { index: args.eventArgs.index, newSize: newSize, type: type, sheetIdx: args.eventArgs.sheetIdx, oldSize: oldSize, range: indexes } } });
  2409. var array = spltedrange.split(" ");
  2410. for (let i = 0; i < array.length; i++) {
  2411. var splitedrange = ej.spreadsheet.getIndexesFromAddress(array[i]);
  2412. let rowstart = splitedrange[0];
  2413. let colstart = splitedrange[1];
  2414. let rowend = splitedrange[2];
  2415. let colend = splitedrange[3];
  2416. if (args.eventArgs.width) {
  2417. for (let i = colstart; i <= colend; i++)
  2418. yield this.dialogue.setColWidth(args.eventArgs.width, i);
  2419. }
  2420. if (args.eventArgs.height) {
  2421. for (let j = rowstart; j <= rowend; j++)
  2422. yield this.dialogue.setRowHeight(args.eventArgs.height, j);
  2423. }
  2424. if (!args.indexes) {
  2425. args.origin = "biz";
  2426. args.indexes = indexes;
  2427. this.bizSignalr(args);
  2428. this.autoSave(args);
  2429. }
  2430. }
  2431. this.ribbon.imageInCell = true;
  2432. setTimeout(() => {
  2433. const index = this.ssObj.undoredoModule.undoCollection.indexOf(this.ssObj.undoredoModule.undoCollection.filter(x => x.name == "bizAction").pop());
  2434. this.ssObj.undoredoModule.undoCollection.splice(index + 1, 1);
  2435. }, 500);
  2436. }
  2437. });
  2438. }
  2439. fileNameChange() {
  2440. var tempfilename = $(".biz-ss-filename").val();
  2441. var data = {
  2442. Title: tempfilename,
  2443. Id: this.FileId,
  2444. Type: "File",
  2445. };
  2446. Unibase.Apps.Collaboration.DocumentManager.Instance().renameFileTitle(data);
  2447. }
  2448. renderPopup(callback) {
  2449. Unibase.Apps.Collaboration.Components.Documents.Instance().loadForm(0, this.FileId, 0, callback, this.documentGroup);
  2450. }
  2451. renderMenuBar() {
  2452. let containers = document.body.getElementsByClassName('_bizgaze_popup_container');
  2453. this.container = containers[containers.length - 1];
  2454. this.container.insertBefore(this.util.createElement("div", 'class', 'biz-ss-ribbon'), this.container.firstElementChild);
  2455. this.util.appendChildren('DocumentViewer', 0);
  2456. this.util.appendChildren('biz-ss-ribbon', 0, this.util.createElement("div", 'class', 'biz-ss-sheetlogo'), this.util.createElement("div", 'class', 'biz-ss-tooolbar'), this.util.createElement("div", 'class', 'biz-ss-userdetails e-ribbon e-collapsed'), this.util.createElement("div", 'class', 'biz-ss-username-wrapper'));
  2457. this.util.appendChildren('biz-ss-sheetlogo', 0, this.util.createElement("img", 'class', 'biz-ss-logo'));
  2458. this.util.appendChildren('biz-ss-tooolbar', 0, this.util.createElement("div", 'class', 'biz-ss-fileinfo'), this.util.createElement("div", 'class', 'biz-ss-fileshare-wrapper'), this.util.createElement("div", 'class', 'biz-ss-onlineusers'), this.util.createElement("div", 'class', 'biz-ss-toolbarmenu'));
  2459. this.util.appendChildren('biz-ss-fileshare-wrapper', 0, this.util.createElement("div", 'class', 'biz-ss-fileshare'));
  2460. this.util.appendChildren('biz-ss-onlineusers', 0, this.util.createElement("div", 'class', 'biz-ss-onlineusersintials d-flex flex-row text-white mx-35 pull-right'));
  2461. this.util.appendChildren('biz-ss-fileshare', 0, this.util.createElement("button", 'class', 'biz-ss-fileshare-btn'));
  2462. this.util.appendChildren('biz-ss-fileinfo', 0, this.util.createElement("input", 'class', 'biz-ss-filename'), this.util.createElement('div', 'class', 'biz-ss-starred'), this.util.createElement('div', 'class', 'biz-ss-autosave'));
  2463. this.util.appendChildren('biz-ss-starred', 0, this.util.createElement("span", 'id', 'biz-ss-star'), this.util.createElement("i", 'class', 'fa fa-star-o text-light font-7 biz_ss_star_icon_' + this.FileId));
  2464. this.util.appendChildren('biz-ss-autosave', 0, this.util.createElement("img", 'class', 'biz-ss-saveicon biz-ss-cloudsave'), this.util.createElement("img", 'class', 'biz-ss-saveicon biz-ss-cloudoff'), this.util.createElement("div", 'class', 'biz-ss-cloudloading e-icons'), this.util.createElement('div', 'class', 'biz-ss-saving'));
  2465. this.util.appendChildren('biz-ss-userdetails', 0, this.util.createElement("div", 'class', 'biz-ss-userinitial'));
  2466. this.util.appendChildren('biz-ss-toolbarmenu', 0, this.util.createElement("ul", 'id', 'menu'), this.util.createElement("input", 'class', 'biz-ss-lastedited'));
  2467. document.getElementsByClassName("biz-ss-logo")[0].setAttribute('src', 'imgs/BizgazeSheetsIcon.svg');
  2468. document.getElementsByClassName("biz-ss-cloudsave")[0].setAttribute('src', 'imgs/cloud-computing.svg');
  2469. document.getElementsByClassName("biz-ss-cloudsave")[0].setAttribute('title', 'See document status');
  2470. document.getElementsByClassName("biz-ss-cloudoff")[0].setAttribute('src', 'imgs/cloud-off.svg');
  2471. document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "none";
  2472. let htmlelement = document.getElementsByClassName('biz-ss-filename')[0];
  2473. this.util.addAttributes(htmlelement, {
  2474. 'value': this.FileName,
  2475. 'type': 'text'
  2476. });
  2477. let attributesforautosave = {
  2478. 'type': 'span'
  2479. };
  2480. this.userInitial = document.getElementsByClassName("biz-ss-userinitial")[0];
  2481. let identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  2482. if (!identity.photoUrl) {
  2483. this.userInitial.textContent += identity.name.trim().slice(0, 1);
  2484. this.userInitial.classList.add('biz-ss-initial-text');
  2485. }
  2486. else {
  2487. this.userInitial.classList.add('biz-ss-initial-img');
  2488. this.userInitial.style.backgroundImage = "url(" + identity.photoUrl + ")";
  2489. }
  2490. if (!this.newUpload) {
  2491. if (this.lastEditedTime != 0) {
  2492. if (this.unibaseusername === this.username) {
  2493. let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0];
  2494. this.util.addAttributes(htmlelementlastedited, {
  2495. 'value': 'last edit was made ' + this.lastEditedTime + ' ' + this.timePeriod + ' ago',
  2496. 'type': 'span'
  2497. });
  2498. }
  2499. else {
  2500. let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0];
  2501. this.util.addAttributes(htmlelementlastedited, {
  2502. 'value': 'last edit was made ' + this.lastEditedTime + ' ' + this.timePeriod + ' ago by ' + this.username,
  2503. 'type': 'span'
  2504. });
  2505. }
  2506. }
  2507. else {
  2508. if (this.unibaseusername === this.username) {
  2509. let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0];
  2510. this.util.addAttributes(htmlelementlastedited, {
  2511. 'value': 'last edit was made seconds ago ',
  2512. 'type': 'span'
  2513. });
  2514. }
  2515. else {
  2516. let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0];
  2517. this.util.addAttributes(htmlelementlastedited, {
  2518. 'value': 'last edit was made seconds ago by ' + this.username,
  2519. 'type': 'span'
  2520. });
  2521. }
  2522. }
  2523. }
  2524. let htmlelementforautosave = document.getElementsByClassName('biz-ss-saving')[0];
  2525. this.util.addAttributes(htmlelementforautosave, attributesforautosave);
  2526. document.getElementsByClassName('biz-ss-lastedited')[0].setAttribute('disabled', "");
  2527. document.getElementsByClassName('biz-ss-saving')[0].style.display = 'none';
  2528. document.getElementsByClassName('biz-ss-saving')[0].innerText = 'Saving...';
  2529. document.getElementsByClassName("biz-ss-fileshare-btn")[0].style.backgroundColor = "#049503";
  2530. var shareBtn = new ej.buttons.Button({ cssClass: `e-primary`, content: `Share`, iconCss: 'biz-ss-fileshare-icon icon-ss-lockopen' });
  2531. shareBtn.appendTo(".biz-ss-fileshare-btn");
  2532. document.getElementsByClassName("biz-ss-userinitial")[0].setAttribute("title", identity.name.trim());
  2533. let color = this.util.colorHash(identity.name.trim());
  2534. document.getElementsByClassName("biz-ss-userinitial")[0].style.backgroundColor = color.hex;
  2535. this.ribbonElem = document.body.getElementsByClassName('biz-ss-ribbon')[0];
  2536. }
  2537. editDetails() {
  2538. if (this.FileId != 0) {
  2539. Unibase.Apps.Collaboration.DocumentManager.Instance().lastEdit(this.FileId).then((response) => {
  2540. this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  2541. this.unibaseusername = this.identity.name;
  2542. this.lastEditedTime = response.result.Lastedittime;
  2543. this.username = response.result.LastUpdatedByName;
  2544. this.timePeriod = response.result.TimePeriod;
  2545. if (this.unibaseusername === this.username && this.lastEditedTime === 0) {
  2546. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  2547. element.value = "last edit was made seconds ago";
  2548. }
  2549. else if (this.unibaseusername === this.username && this.lastEditedTime !== 0) {
  2550. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  2551. element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago";
  2552. }
  2553. else {
  2554. let element = (document.getElementsByClassName('biz-ss-lastedited')[0]);
  2555. element.value = "last edit was made seconds ago by " + this.username;
  2556. }
  2557. });
  2558. }
  2559. clearInterval(this.intr);
  2560. clearInterval(this.intrhour);
  2561. this.initSetInterval();
  2562. }
  2563. windowKeydown(e) {
  2564. if (e.keyCode === 116)
  2565. (this.fileurl) && (window.location.href = window.origin + "#/documents/" + this.fileurl + "/Excel/0");
  2566. this.ctrl_Shift_S(e);
  2567. }
  2568. keyDown(e) {
  2569. let sheet = this.ssObj.biz.getActiveSheet();
  2570. let indexes = this.ssObj.biz.getIndexes();
  2571. let editDiv = document.getElementById("DocumentViewer_edit");
  2572. this.lastKeyEvent = e;
  2573. this.cellRowStart = indexes[0];
  2574. this.cellColStart = indexes[1];
  2575. this.cellRowEnd = indexes[2];
  2576. this.cellColEnd = indexes[3];
  2577. let sheetIdx = this.getSheetIndex();
  2578. let availableRows = sheet.rows.length;
  2579. let availableCols = sheet.columns.length;
  2580. let indexesToInitiateFormula = [];
  2581. let prevFormulaIndexes = [];
  2582. let cellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart, sheet);
  2583. let evtobj = window.event ? event : e;
  2584. if (document.getElementById("DocumentViewer_text_align"))
  2585. var textAlign = document.getElementById("DocumentViewer_text_align").ej2_instances[0];
  2586. if (document.getElementById("DocumentViewer_vertical_align"))
  2587. var verticalAlign = document.getElementById("DocumentViewer_vertical_align").ej2_instances[0];
  2588. let popup = document.body.querySelector('#' + this.ssObj.element.id + '_ac_popup');
  2589. if (editDiv && editDiv.textContent) {
  2590. if (this.ssObj.isEdit && editDiv.textContent.startsWith("=")) {
  2591. this.isFormula = true;
  2592. if (!popup) {
  2593. if (!evtobj.ctrlKey && !evtobj.shiftKey) {
  2594. if (e.keyCode == 37) {
  2595. if (this.prevFormulaRange) {
  2596. this.setFormlaActiveCell(this.prevFormulaRange);
  2597. prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange);
  2598. if (prevFormulaIndexes[3] == 0)
  2599. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1);
  2600. else
  2601. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1]) + (prevFormulaIndexes[0] + 1);
  2602. }
  2603. else {
  2604. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2605. if (prevFormulaIndexes[3] >= 0) {
  2606. let formulaRange = "";
  2607. if (prevFormulaIndexes[3] == 0)
  2608. formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1);
  2609. else
  2610. formulaRange = this.generateHeaderText(prevFormulaIndexes[1]) + (prevFormulaIndexes[0] + 1);
  2611. this.prevFormulaRange = formulaRange;
  2612. }
  2613. }
  2614. this.formulaActiveCell = this.prevFormulaRange;
  2615. }
  2616. else if (e.keyCode == 39) {
  2617. if (this.prevFormulaRange) {
  2618. this.setFormlaActiveCell(this.prevFormulaRange);
  2619. prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange);
  2620. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 2) + (prevFormulaIndexes[0] + 1);
  2621. }
  2622. else {
  2623. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2624. let formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 2) + (prevFormulaIndexes[0] + 1);
  2625. this.prevFormulaRange = formulaRange;
  2626. }
  2627. this.formulaActiveCell = this.prevFormulaRange;
  2628. }
  2629. else if (e.keyCode == 38) {
  2630. if (this.prevFormulaRange) {
  2631. this.setFormlaActiveCell(this.prevFormulaRange);
  2632. prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange);
  2633. if (prevFormulaIndexes[2] == 0)
  2634. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1);
  2635. else
  2636. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0]);
  2637. }
  2638. else {
  2639. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2640. let formulaRange = "";
  2641. if (prevFormulaIndexes[2] == 0)
  2642. formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1);
  2643. else
  2644. formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0]);
  2645. this.prevFormulaRange = formulaRange;
  2646. }
  2647. this.formulaActiveCell = this.prevFormulaRange;
  2648. }
  2649. else if (e.keyCode == 40) {
  2650. if (this.prevFormulaRange) {
  2651. this.setFormlaActiveCell(this.prevFormulaRange);
  2652. prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange);
  2653. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 2);
  2654. }
  2655. else {
  2656. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2657. let formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 2);
  2658. this.prevFormulaRange = formulaRange;
  2659. }
  2660. this.formulaActiveCell = this.prevFormulaRange;
  2661. }
  2662. }
  2663. if ((!evtobj.ctrlKey && evtobj.shiftKey)) {
  2664. if (e.keyCode == 40) {
  2665. if (this.prevFormulaRange) {
  2666. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2667. if (this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[0] + 1))
  2668. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 2);
  2669. else
  2670. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 2) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1);
  2671. }
  2672. else {
  2673. this.formulaActiveCell = sheet.activeCell;
  2674. this.prevFormulaRange = this.formulaActiveCell + ":" + this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 2);
  2675. }
  2676. }
  2677. else if (e.keyCode == 39) {
  2678. if (this.prevFormulaRange) {
  2679. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2680. if (this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[2] + 1))
  2681. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 2) + (prevFormulaIndexes[2] + 1);
  2682. else
  2683. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 2) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1);
  2684. }
  2685. else {
  2686. this.formulaActiveCell = sheet.activeCell;
  2687. this.prevFormulaRange = this.formulaActiveCell + ":" + this.generateHeaderText(this.cellColEnd + 2) + (this.cellRowEnd + 1);
  2688. }
  2689. }
  2690. else if (e.keyCode == 38) {
  2691. if (this.prevFormulaRange) {
  2692. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2693. if ((this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[0] + 1)) && (prevFormulaIndexes[2] - prevFormulaIndexes[0] > 0))
  2694. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2]);
  2695. else
  2696. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0]) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1);
  2697. }
  2698. else {
  2699. this.formulaActiveCell = sheet.activeCell;
  2700. this.prevFormulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart) + ":" + this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1);
  2701. }
  2702. }
  2703. else if (e.keyCode == 37) {
  2704. if (this.prevFormulaRange) {
  2705. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2706. if (this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[2] + 1))
  2707. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3]) + (prevFormulaIndexes[2] + 1);
  2708. else
  2709. this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1]) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1);
  2710. }
  2711. else {
  2712. this.formulaActiveCell = sheet.activeCell;
  2713. this.prevFormulaRange = this.generateHeaderText(this.cellColStart) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1);
  2714. }
  2715. }
  2716. }
  2717. if ((evtobj.ctrlKey && evtobj.shiftKey)) {
  2718. let newIndexes;
  2719. let activeCellIndexes;
  2720. if (e.keyCode == 40) {
  2721. if (this.prevFormulaRange) {
  2722. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2723. let args = {
  2724. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2725. availableCols: availableCols
  2726. };
  2727. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2728. activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell);
  2729. newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]);
  2730. this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]);
  2731. }
  2732. else {
  2733. this.formulaActiveCell = sheet.activeCell;
  2734. let args = {
  2735. evtobj: evtobj, indexes: indexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2736. availableCols: availableCols
  2737. };
  2738. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2739. let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]);
  2740. this.prevFormulaRange = formulaRange;
  2741. }
  2742. }
  2743. else if (e.keyCode == 39) {
  2744. if (this.prevFormulaRange) {
  2745. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2746. let args = {
  2747. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2748. availableCols: availableCols
  2749. };
  2750. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2751. activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell);
  2752. newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]);
  2753. this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]);
  2754. }
  2755. else {
  2756. this.formulaActiveCell = sheet.activeCell;
  2757. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2758. let args = {
  2759. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2760. availableCols: availableCols
  2761. };
  2762. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2763. let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]);
  2764. this.prevFormulaRange = formulaRange;
  2765. }
  2766. }
  2767. else if (e.keyCode == 38) {
  2768. if (this.prevFormulaRange) {
  2769. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2770. let args = {
  2771. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2772. availableCols: availableCols
  2773. };
  2774. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2775. activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell);
  2776. newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]);
  2777. this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]);
  2778. }
  2779. else {
  2780. this.formulaActiveCell = sheet.activeCell;
  2781. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2782. if (prevFormulaIndexes[0] > 0) {
  2783. let args = {
  2784. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2785. availableCols: availableCols
  2786. };
  2787. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2788. let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]);
  2789. this.prevFormulaRange = formulaRange;
  2790. }
  2791. }
  2792. }
  2793. else if (e.keyCode == 37) {
  2794. if (this.prevFormulaRange) {
  2795. prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange));
  2796. let args = {
  2797. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2798. availableCols: availableCols
  2799. };
  2800. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2801. activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell);
  2802. newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]);
  2803. this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]);
  2804. }
  2805. else {
  2806. this.formulaActiveCell = sheet.activeCell;
  2807. prevFormulaIndexes = this.ssObj.biz.getIndexes();
  2808. if (prevFormulaIndexes[2] > 0) {
  2809. let args = {
  2810. evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows,
  2811. availableCols: availableCols
  2812. };
  2813. indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args);
  2814. let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]);
  2815. this.prevFormulaRange = formulaRange;
  2816. }
  2817. }
  2818. }
  2819. }
  2820. if ((e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40) && this.isFormula) {
  2821. if (editDiv.textContent.includes("(")) {
  2822. let formula = editDiv.textContent.split("(");
  2823. editDiv.textContent = formula[0] + "(" + this.prevFormulaRange;
  2824. }
  2825. else
  2826. editDiv.textContent = "=" + this.prevFormulaRange;
  2827. let col = { formulaSheetIdx: sheetIdx, name: "initiateFormulaReference", range: this.prevFormulaRange };
  2828. this.ssObj.selectionModule.initiateFormulaSelection(col);
  2829. setTimeout(() => {
  2830. let range = document.createRange();
  2831. var el = this.ssObj.element.querySelector('#' + this.ssObj.element.id + '_edit');
  2832. ;
  2833. var selection = window.getSelection();
  2834. range = document.createRange();
  2835. selection.removeAllRanges();
  2836. range.selectNodeContents(el);
  2837. range.collapse(false);
  2838. selection.addRange(range);
  2839. el.focus();
  2840. }, 0);
  2841. }
  2842. }
  2843. }
  2844. else {
  2845. this.isFormula = false;
  2846. }
  2847. }
  2848. else {
  2849. this.isFormula = false;
  2850. }
  2851. if (evtobj.ctrlKey && evtobj.shiftKey && !this.isFormula && !this.ssObj.isEdit) {
  2852. if (evtobj.keyCode == 76) {
  2853. e.preventDefault();
  2854. e.stopImmediatePropagation();
  2855. textAlign.trigger('select', { item: textAlign.items[0] });
  2856. }
  2857. if (evtobj.keyCode == 69) {
  2858. e.preventDefault();
  2859. e.stopImmediatePropagation();
  2860. textAlign.trigger('select', { item: textAlign.items[1] });
  2861. }
  2862. if (evtobj.keyCode == 82) {
  2863. e.preventDefault();
  2864. textAlign.trigger('select', { item: textAlign.items[2] });
  2865. }
  2866. if (evtobj.keyCode == 84) {
  2867. e.preventDefault();
  2868. e.stopImmediatePropagation();
  2869. verticalAlign.trigger('select', { item: verticalAlign.items[0] });
  2870. }
  2871. if (evtobj.keyCode == 77) {
  2872. e.preventDefault();
  2873. verticalAlign.trigger('select', { item: verticalAlign.items[1] });
  2874. }
  2875. if (evtobj.keyCode == 66) {
  2876. e.preventDefault();
  2877. e.stopImmediatePropagation();
  2878. verticalAlign.trigger('select', { item: verticalAlign.items[2] });
  2879. }
  2880. }
  2881. if (e.keyCode == 113) {
  2882. if (this.ssObj.isEdit)
  2883. this.f2Edit = true;
  2884. }
  2885. if (e.keyCode == 113 && e.shiftKey) {
  2886. e.preventDefault();
  2887. this.formatpainter.insertNote();
  2888. }
  2889. if (this.ssObj.isEdit) {
  2890. if (!this.isFormula && !this.f2Edit && !evtobj.shiftKey && !evtobj.ctrlKey && (e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40)) {
  2891. var val = document.getElementsByClassName("e-spreadsheet-edit")[0].innerText;
  2892. if (cellInfo == null) {
  2893. cellInfo = {};
  2894. }
  2895. cellInfo["value"] = val;
  2896. this.ssObj.biz.setCell(this.cellRowStart, this.cellColStart, sheet, cellInfo);
  2897. this.ssObj.endEdit();
  2898. this.f2Edit = false;
  2899. }
  2900. }
  2901. if (!evtobj.shiftKey && evtobj.ctrlKey && (e.keyCode == 68 || e.keyCode == 82 || e.keyCode == 13)) {
  2902. e.preventDefault();
  2903. let args = {
  2904. origin: 'biz', action: 'shortcuts', range: indexes, e: e, evtobj: evtobj, sheet: sheet, sheetIndex: this.getSheetIndex()
  2905. };
  2906. this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'shortcuts', options: args, oldCells: this.getCellsFromIndexes(args.range) } });
  2907. this.shortcuts(args);
  2908. Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().bizSignalr(args);
  2909. this.download.ssAutoSave({ action: 'shortcuts' }, this, true);
  2910. }
  2911. this.clearFindReplace();
  2912. }
  2913. viewOnlyKeyDown(e) {
  2914. let sheet = this.ssObj.biz.getActiveSheet();
  2915. let indexes = this.ssObj.biz.getIndexes();
  2916. let availableRows = sheet.rows.length;
  2917. let availableCols = sheet.columns.length;
  2918. let evtobj = window.event ? event : e;
  2919. let activeCell = sheet.activeCell;
  2920. let sheetIdx = this.getSheetIndex();
  2921. let selectedIndex = [];
  2922. let fullscreenDialog = document.getElementById("menubar-fullscreen-container");
  2923. if (evtobj.ctrlKey && evtobj.shiftKey && !this.isFormula && !this.ssObj.isEdit) {
  2924. let keyPressArgs = {
  2925. evtobj: evtobj, indexes: indexes, activeCell: activeCell, availableCols: availableCols,
  2926. availableRows: availableRows
  2927. };
  2928. selectedIndex = this.getIndexesOnCtrlShifArrows(keyPressArgs);
  2929. }
  2930. if (fullscreenDialog && e.keyCode == 27)
  2931. this.dialogue.hideSsMenubarFullscreenDialog();
  2932. if (evtobj.ctrlKey && e.keyCode == 65 && !this.ssObj.isEdit)
  2933. this.ctrlA_Function();
  2934. if (e.keyCode == 122) {
  2935. e.preventDefault();
  2936. this.openFullscreen(this.container);
  2937. }
  2938. if (evtobj.keyCode == 37 || evtobj.keyCode == 39 || evtobj.keyCode == 38 || evtobj.keyCode == 40) {
  2939. this.ssObj.selectRange(this.ssObj.sheets[sheetIdx].activeCell + ":" + this.generateHeaderText(selectedIndex[0]) + (selectedIndex[1]));
  2940. }
  2941. this.ctrl_Shift_S(e);
  2942. }
  2943. ctrl_Shift_S(e) {
  2944. if (e.keyCode == 83 && ((e.ctrlKey && !e.shiftKey) || (e.ctrlKey && e.shiftKey))) {
  2945. e.preventDefault();
  2946. e.stopImmediatePropagation();
  2947. }
  2948. }
  2949. ctrlA_Function() {
  2950. if (!this.isCtrlA) {
  2951. this.isCtrlA = true;
  2952. for (var i = this.cellRowStart; i <= this.cellRowEnd; i++) {
  2953. for (var j = this.cellColStart; j <= this.cellColEnd; j++)
  2954. this.checksForCellsWithValues([i, j]);
  2955. }
  2956. if ((this.selectedIndexes[0] !== this.cellRowStart || this.selectedIndexes[1] !== this.cellColStart || this.selectedIndexes[2] !== this.cellRowEnd || this.selectedIndexes[3] !== this.cellColEnd)) {
  2957. this.ssObj.selectRange(this.generateHeaderText(this.selectedIndexes[1] + 1) + (this.selectedIndexes[0] + 1) + ":" + this.generateHeaderText(this.selectedIndexes[3] + 1) + (this.selectedIndexes[2] + 1));
  2958. this.isCtrlA = true;
  2959. }
  2960. else
  2961. this.ctrlA_Function();
  2962. this.checkedIndexes = [];
  2963. this.selectedIndexes = [null, null, null, null];
  2964. }
  2965. else {
  2966. this.isCtrlA = false;
  2967. var elem = document.body.querySelector('.e-selectall');
  2968. var pos = elem.getBoundingClientRect();
  2969. this.ssObj.selectionModule.mouseDownHandler({ target: elem, shiftKey: false, ctrlKey: false, type: 'mousedown', clientY: pos.top, clientX: pos.left });
  2970. this.checkedIndexes = [];
  2971. this.selectedIndexes = [null, null, null, null];
  2972. }
  2973. }
  2974. getIndexesOnCtrlShifArrows(args) {
  2975. let nextCellInfo;
  2976. let cellInfo;
  2977. let selectedIndex = [];
  2978. let sheet = this.ssObj.biz.getActiveSheet();
  2979. this.cellRowStart = args.indexes[0];
  2980. this.cellColStart = args.indexes[1];
  2981. this.cellRowEnd = args.indexes[2];
  2982. this.cellColEnd = args.indexes[3];
  2983. if (args.evtobj.keyCode == 40) {
  2984. args.evtobj.preventDefault();
  2985. args.evtobj.stopImmediatePropagation();
  2986. if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) {
  2987. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd + 1, this.cellColStart, sheet);
  2988. for (var i = this.cellRowEnd + 1; i < 10000000; i++) {
  2989. for (var j = this.cellColStart; j <= this.cellColStart; j++) {
  2990. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  2991. if (j == this.cellColStart) {
  2992. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo)) || (i >= args.availableRows || j >= args.availableCols))) {
  2993. selectedIndex.push(this.cellColEnd + 1, i, i, j, this.cellRowEnd, this.cellColEnd);
  2994. i = 10000000;
  2995. }
  2996. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  2997. selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd);
  2998. i = 10000000;
  2999. }
  3000. }
  3001. }
  3002. }
  3003. }
  3004. else if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) {
  3005. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart + 1, this.cellColStart, sheet);
  3006. for (var i = this.cellRowStart + 1; i < 10000000; i++) {
  3007. for (var j = this.cellColStart; j <= this.cellColStart; j++) {
  3008. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3009. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo)) || (i >= args.availableRows || j >= args.availableCols))) {
  3010. selectedIndex.push(this.cellColEnd + 1, i, i, j, this.cellRowEnd, this.cellColEnd);
  3011. i = 10000000;
  3012. }
  3013. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3014. selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd);
  3015. i = 10000000;
  3016. }
  3017. }
  3018. }
  3019. }
  3020. else if (args.activeCell === this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) {
  3021. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart + 1, this.cellColEnd, sheet);
  3022. for (var i = this.cellRowStart + 1; i < 10000000; i++) {
  3023. for (var j = this.cellColEnd; j <= this.cellColEnd; j++) {
  3024. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3025. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo)) || (i >= args.availableRows || j >= args.availableCols))) {
  3026. selectedIndex.push(this.cellColStart + 1, i, i, j, this.cellRowEnd, this.cellColEnd);
  3027. i = 10000000;
  3028. }
  3029. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3030. selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd);
  3031. i = 10000000;
  3032. }
  3033. }
  3034. }
  3035. }
  3036. else {
  3037. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd + 1, this.cellColEnd, sheet);
  3038. for (let i = this.cellRowEnd + 1; i < 10000000; i++) {
  3039. for (let j = this.cellColEnd; j <= this.cellColEnd; j++) {
  3040. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3041. if (j == this.cellColEnd) {
  3042. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3043. selectedIndex.push(this.cellColStart + 1, i, i, j, this.cellRowEnd, this.cellColEnd);
  3044. i = 10000000;
  3045. }
  3046. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3047. selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd);
  3048. i = 10000000;
  3049. }
  3050. }
  3051. }
  3052. }
  3053. }
  3054. }
  3055. else if (args.evtobj.keyCode == 38) {
  3056. args.evtobj.preventDefault();
  3057. args.evtobj.stopImmediatePropagation();
  3058. if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) {
  3059. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd - 1, this.cellColStart, sheet);
  3060. for (let i = this.cellRowEnd - 1; i < 1000000000; i--) {
  3061. for (let j = this.cellColStart; j <= this.cellColStart; j++) {
  3062. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3063. if (j == this.cellColStart) {
  3064. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3065. selectedIndex.push(this.cellColEnd + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd);
  3066. i = 1000000001;
  3067. }
  3068. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3069. selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd);
  3070. i = 1000000001;
  3071. }
  3072. else if (i == -1) {
  3073. selectedIndex.push(this.cellColEnd + 1, 1);
  3074. i = 1000000001;
  3075. }
  3076. }
  3077. }
  3078. }
  3079. }
  3080. else if (args.activeCell == this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) {
  3081. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart - 1, this.cellColStart, sheet);
  3082. for (let i = this.cellRowStart - 1; i < 1000000000; i--) {
  3083. for (let j = this.cellColStart; j <= this.cellColStart; j++) {
  3084. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3085. if (j == this.cellColStart) {
  3086. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3087. selectedIndex.push(this.cellColEnd + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd);
  3088. i = 1000000001;
  3089. }
  3090. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3091. selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd);
  3092. i = 1000000001;
  3093. }
  3094. else if (i == -1) {
  3095. selectedIndex.push(this.cellColEnd + 1, 1);
  3096. i = 1000000001;
  3097. }
  3098. }
  3099. }
  3100. }
  3101. }
  3102. else if (args.activeCell == this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) {
  3103. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart - 1, this.cellColEnd, sheet);
  3104. for (let i = this.cellRowStart - 1; i < 1000000000; i--) {
  3105. for (let j = this.cellColEnd; j <= this.cellColEnd; j++) {
  3106. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3107. if (j == this.cellColEnd) {
  3108. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3109. selectedIndex.push(this.cellColStart + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd);
  3110. i = 1000000001;
  3111. }
  3112. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3113. selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd);
  3114. i = 1000000001;
  3115. }
  3116. else if (i == -1) {
  3117. selectedIndex.push(this.cellColStart + 1, 1);
  3118. i = 1000000001;
  3119. }
  3120. }
  3121. }
  3122. }
  3123. }
  3124. else {
  3125. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd - 1, this.cellColEnd, sheet);
  3126. for (let i = this.cellRowEnd - 1; i < 1000000000; i--) {
  3127. for (let j = this.cellColEnd; j <= this.cellColEnd; j++) {
  3128. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3129. if (j == this.cellColEnd) {
  3130. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3131. selectedIndex.push(this.cellColStart + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd);
  3132. i = 1000000001;
  3133. }
  3134. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3135. selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd);
  3136. i = 1000000001;
  3137. }
  3138. else if (i == -1) {
  3139. selectedIndex.push(this.cellColStart + 1, 1);
  3140. i = 1000000001;
  3141. }
  3142. }
  3143. }
  3144. }
  3145. }
  3146. }
  3147. else if (args.evtobj.keyCode == 39) {
  3148. args.evtobj.preventDefault();
  3149. args.evtobj.stopImmediatePropagation();
  3150. if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) {
  3151. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColEnd + 1, sheet);
  3152. for (let i = this.cellRowStart; i <= this.cellRowStart; i++) {
  3153. for (let j = this.cellColEnd + 1; j < 1000000000 + 1; j++) {
  3154. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3155. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3156. selectedIndex.push(j, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j);
  3157. j = 1000000001;
  3158. }
  3159. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3160. selectedIndex.push(j + 1, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j);
  3161. j = 1000000001;
  3162. }
  3163. }
  3164. }
  3165. }
  3166. else if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) {
  3167. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColEnd + 1, sheet);
  3168. for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) {
  3169. for (let j = this.cellColEnd + 1; j < 1000000000 + 1; j++) {
  3170. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3171. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3172. selectedIndex.push(j, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j);
  3173. j = 1000000001;
  3174. }
  3175. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3176. selectedIndex.push(j + 1, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j);
  3177. j = 1000000001;
  3178. }
  3179. }
  3180. }
  3181. }
  3182. else if (args.activeCell === this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) {
  3183. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColStart + 1, sheet);
  3184. for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) {
  3185. for (let j = this.cellColStart + 1; j < 1000000000 + 1; j++) {
  3186. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3187. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3188. selectedIndex.push(j, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j);
  3189. j = 1000000001;
  3190. }
  3191. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3192. selectedIndex.push(j + 1, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j);
  3193. j = 1000000001;
  3194. }
  3195. }
  3196. }
  3197. }
  3198. else {
  3199. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart + 1, sheet);
  3200. for (let i = this.cellRowStart; i <= this.cellRowStart; i++) {
  3201. for (let j = this.cellColStart + 1; j < 1000000000 + 1; j++) {
  3202. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3203. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3204. selectedIndex.push(j, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j);
  3205. j = 1000000001;
  3206. }
  3207. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3208. selectedIndex.push(j + 1, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j);
  3209. j = 1000000001;
  3210. }
  3211. }
  3212. }
  3213. }
  3214. }
  3215. else if (args.evtobj.keyCode == 37) {
  3216. args.evtobj.preventDefault();
  3217. args.evtobj.stopImmediatePropagation();
  3218. if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) {
  3219. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColEnd - 1, sheet);
  3220. for (let i = this.cellRowStart; i <= this.cellRowStart; i++) {
  3221. for (let j = this.cellColEnd - 1; j < 1000000000; j--) {
  3222. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3223. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3224. selectedIndex.push(j + 2, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3225. j = 1000000001;
  3226. }
  3227. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3228. selectedIndex.push(j + 1, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3229. j = 1000000001;
  3230. }
  3231. else if (j == -1) {
  3232. selectedIndex.push(1, this.cellRowEnd + 1);
  3233. j = 1000000001;
  3234. }
  3235. }
  3236. }
  3237. }
  3238. else if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) {
  3239. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColEnd - 1, sheet);
  3240. for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) {
  3241. for (let j = this.cellColEnd - 1; j < 1000000000; j--) {
  3242. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3243. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3244. selectedIndex.push(j + 2, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3245. j = 1000000001;
  3246. }
  3247. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3248. selectedIndex.push(j + 1, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3249. j = 1000000001;
  3250. }
  3251. else if (j == -1) {
  3252. selectedIndex.push(1, this.cellRowStart + 1);
  3253. j = 1000000001;
  3254. }
  3255. }
  3256. }
  3257. }
  3258. else if (args.activeCell === this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) {
  3259. nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColStart - 1, sheet);
  3260. for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) {
  3261. for (let j = this.cellColStart - 1; j < 1000000000; j--) {
  3262. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3263. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3264. selectedIndex.push(j + 2, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3265. j = 1000000001;
  3266. }
  3267. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3268. selectedIndex.push(j + 1, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3269. j = 1000000001;
  3270. }
  3271. else if (j == -1) {
  3272. selectedIndex.push(1, this.cellRowStart + 1);
  3273. j = 1000000001;
  3274. }
  3275. }
  3276. }
  3277. }
  3278. else {
  3279. nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart - 1, sheet);
  3280. for (let i = this.cellRowStart; i <= this.cellRowStart; i++) {
  3281. for (let j = this.cellColStart - 1; j < 1000000000; j--) {
  3282. cellInfo = ej.spreadsheet.getCell(i, j, sheet);
  3283. if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3284. selectedIndex.push(j + 2, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3285. j = 1000000001;
  3286. }
  3287. else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) {
  3288. selectedIndex.push(j + 1, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1);
  3289. j = 1000000001;
  3290. }
  3291. else if (j == -1) {
  3292. selectedIndex.push(1, this.cellRowEnd + 1);
  3293. j = 1000000001;
  3294. }
  3295. }
  3296. }
  3297. }
  3298. }
  3299. return selectedIndex;
  3300. }
  3301. checksForCellsWithValues(indexes) {
  3302. if (this.checkedIndexes.findIndex((x) => x[0] == indexes[0] && x[1] == indexes[1]) === -1) {
  3303. this.checkedIndexes.push(indexes);
  3304. let sheet = this.ssObj.getActiveSheet();
  3305. let cellInfoDown = ej.spreadsheet.getCell(indexes[0] + 1, indexes[1], sheet);
  3306. let cellInfoUp = ej.spreadsheet.getCell(indexes[0] - 1, indexes[1], sheet);
  3307. let cellInfoLeft = ej.spreadsheet.getCell(indexes[0], indexes[1] - 1, sheet);
  3308. let cellInfoRight = ej.spreadsheet.getCell(indexes[0], indexes[1] + 1, sheet);
  3309. if (this.selectedIndexes[0] == null || this.selectedIndexes[2] == null) {
  3310. this.selectedIndexes[0] = indexes[0];
  3311. this.selectedIndexes[2] = indexes[0];
  3312. }
  3313. if (this.selectedIndexes[1] == null || this.selectedIndexes[3] == null) {
  3314. this.selectedIndexes[1] = indexes[1];
  3315. this.selectedIndexes[3] = indexes[1];
  3316. }
  3317. if (this.selectedIndexes[0] > indexes[0])
  3318. this.selectedIndexes[0] = indexes[0];
  3319. if (this.selectedIndexes[2] < indexes[0])
  3320. this.selectedIndexes[2] = indexes[0];
  3321. if (this.selectedIndexes[1] > indexes[1])
  3322. this.selectedIndexes[1] = indexes[1];
  3323. if (this.selectedIndexes[3] < indexes[1])
  3324. this.selectedIndexes[3] = indexes[1];
  3325. if (this.checkCellObjHasValue(cellInfoDown))
  3326. this.checksForCellsWithValues([indexes[0] + 1, indexes[1]]);
  3327. if (this.checkCellObjHasValue(cellInfoUp))
  3328. this.checksForCellsWithValues([indexes[0] - 1, indexes[1]]);
  3329. if (this.checkCellObjHasValue(cellInfoLeft))
  3330. this.checksForCellsWithValues([indexes[0], indexes[1] - 1]);
  3331. if (this.checkCellObjHasValue(cellInfoRight))
  3332. this.checksForCellsWithValues([indexes[0], indexes[1] + 1]);
  3333. }
  3334. }
  3335. setFormlaActiveCell(prevFormula) {
  3336. if (prevFormula.includes(":")) {
  3337. let singeRange = prevFormula.split(":")[0];
  3338. this.formulaActiveCell = singeRange;
  3339. }
  3340. else
  3341. this.formulaActiveCell = prevFormula;
  3342. }
  3343. keyUp(e) {
  3344. if (e.keyCode == 113) {
  3345. if (this.ssObj.isEdit)
  3346. this.f2Edit = true;
  3347. }
  3348. }
  3349. bodyDblClick(e) {
  3350. let importDialog = document.getElementsByClassName("biz-ss-import-dialog");
  3351. if (this.ssObj.isEdit)
  3352. this.f2Edit = true;
  3353. if (importDialog.length > 0) {
  3354. if (e.target.classList.contains("copyto_folder")) {
  3355. debugger;
  3356. let folderid = Number(e.target.id.split("_")[2]);
  3357. let foldername = e.target.firstElementChild.textContent.trim();
  3358. Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance().getFolderItems(folderid, foldername, true);
  3359. }
  3360. }
  3361. }
  3362. shortcuts(args) {
  3363. var range = args.range;
  3364. this.cellRowStart = range[0];
  3365. this.cellColStart = range[1];
  3366. this.cellRowEnd = range[2];
  3367. this.cellColEnd = range[3];
  3368. var cellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart, args.sheet);
  3369. if (args.evtobj.ctrlKey && args.e.keyCode == 13 && !args.evtobj.shiftKey) {
  3370. args.e.preventDefault();
  3371. args.e.stopImmediatePropagation();
  3372. args.e.stopPropagation();
  3373. for (var i = this.cellRowStart; i <= this.cellRowEnd; i++) {
  3374. for (var j = this.cellColStart; j <= this.cellColEnd; j++)
  3375. this.ssObj.biz.setCell(i, j, args.sheet, cellInfo);
  3376. }
  3377. }
  3378. }
  3379. scroll(selectedIndex) {
  3380. let sheet = this.ssObj.getActiveSheet();
  3381. let freezeRow = this.ssObj.frozenRowCount(sheet);
  3382. let freezeCol = this.ssObj.frozenColCount(sheet);
  3383. var cellPosition = ej.spreadsheet.getCellPosition(sheet, [selectedIndex[2], selectedIndex[3]], freezeRow, freezeCol);
  3384. let verticalElem = this.ssObj.element.querySelector('.e-main-panel');
  3385. if (!(cellPosition.top > verticalElem.scrollTop && cellPosition.top < verticalElem.scrollTop + verticalElem.offsetHeight) ||
  3386. verticalElem.offsetHeight + verticalElem.scrollTop < ej.spreadsheet.getCellPosition(this.ssObj.getActiveSheet(), [selectedIndex[2], selectedIndex[3]], freezeRow, freezeCol).top) {
  3387. verticalElem.scrollTop = cellPosition.top - verticalElem.offsetHeight + 20;
  3388. }
  3389. cellPosition = ej.spreadsheet.getCellPosition(sheet, [selectedIndex[4], selectedIndex[5]], freezeRow, freezeCol);
  3390. let horizontalElem = this.ssObj.getScrollElement();
  3391. if (!(cellPosition.left > horizontalElem.scrollLeft && cellPosition.left < horizontalElem.scrollLeft + horizontalElem.offsetWidth) || horizontalElem.offsetWidth + horizontalElem.scrollLeft < ej.spreadsheet.getCellPosition(this.ssObj.getActiveSheet(), [selectedIndex[4], selectedIndex[5]], freezeRow, freezeCol).left) {
  3392. horizontalElem.scrollLeft = cellPosition.left - horizontalElem.offsetWidth + 20;
  3393. }
  3394. }
  3395. openFullscreen(elem) {
  3396. if (elem.requestFullscreen) {
  3397. elem.requestFullscreen();
  3398. }
  3399. else if (elem.webkitRequestFullscreen) {
  3400. elem.webkitRequestFullscreen();
  3401. }
  3402. else if (elem.msRequestFullscreen) {
  3403. elem.msRequestFullscreen();
  3404. }
  3405. }
  3406. setHeightOnFullScreenChange() {
  3407. let sheetPannelElement = document.getElementById("DocumentViewer_sheet_panel");
  3408. var menubarHeight = this.element.parentElement.previousElementSibling.offsetHeight;
  3409. var footerHeight = this.element.parentElement.nextElementSibling.offsetHeight;
  3410. var toolbarHeight = sheetPannelElement.previousElementSibling.previousElementSibling.offsetHeight;
  3411. var sheetTabPannelHeight = sheetPannelElement.nextElementSibling.offsetHeight;
  3412. var formulaPannelHeight = sheetPannelElement.previousElementSibling.offsetHeight;
  3413. var totalHeight = menubarHeight + footerHeight + formulaPannelHeight + sheetTabPannelHeight + toolbarHeight;
  3414. this.element.parentElement.style.height = (window.innerHeight - menubarHeight - footerHeight) + 'px';
  3415. sheetPannelElement.style.height = (window.innerHeight - totalHeight) + 'px';
  3416. }
  3417. setViewonly() {
  3418. this.ssObj["allowEditing"] = false;
  3419. this.ssObj["allowResizing"] = false;
  3420. this.ssObj["enableContextMenu"] = false;
  3421. this.ssObj["allowAutoFill"] = false;
  3422. document.getElementsByClassName("biz-ss-fileshare-icon")[0].classList.remove("icon-ss-lockopen");
  3423. document.getElementsByClassName("biz-ss-fileshare-icon")[0].classList.add("icon-ss-lockclose");
  3424. this.ribbon.ssMenubarObj.enableItems(["Import", "Make A Copy", "Edit", "Insert", "Format", "Formulas",
  3425. "Data", "Freeze Panes", "Freeze Rows", "Freeze Columns", "Tools"], false);
  3426. document.getElementById("DocumentViewer_sheet_tab_panel").firstElementChild.setAttribute("disabled", "true");
  3427. document.getElementById("DocumentViewer_ribbon").classList.add("biz-ss-toolbar-wrapper");
  3428. document.getElementById("biz-ss-viewonly-btn").addEventListener("click", () => {
  3429. if (!(document.getElementById("viewonly-container"))) {
  3430. this.viewOnlyDialog = new ej.popups.Dialog({
  3431. header: "",
  3432. content: `<div id='viewonly-container'>
  3433. <p>you can only view this document. To make changes, ask the owner for edit access</p>
  3434. </div>`,
  3435. width: '240px',
  3436. height: '135px',
  3437. buttons: [{
  3438. click: this.processAccessDailog.bind(this),
  3439. buttonModel: { content: 'Request Edit Access', isPrimary: true }
  3440. }],
  3441. position: { X: 12, Y: 95 },
  3442. cssClass: "biz-ss-viewonly-dialog",
  3443. });
  3444. this.viewOnlyDialog.appendTo('#dialog');
  3445. }
  3446. });
  3447. }
  3448. getElem() {
  3449. var div = document.createElement('button');
  3450. div.setAttribute("id", "biz-ss-viewonly-btn");
  3451. let button = new ej.buttons.Button();
  3452. button.appendTo(div);
  3453. div.innerHTML = 'View Only';
  3454. return div;
  3455. }
  3456. initialLoad() {
  3457. let getRibbonItemsFn = this.ssObj.ribbonModule.getRibbonItems.bind(this.ssObj.ribbonModule);
  3458. this.ssObj.ribbonModule.getRibbonItems = () => {
  3459. let items = getRibbonItemsFn();
  3460. let home = items[0].content;
  3461. let item = { template: this.getElem(), cssClass: 'biz-ss-viewonly-wrapper', id: this.ssObj.element.id + '_viewonly', tooltipText: "View Only" };
  3462. home.splice(items[0].content.length, 0, item);
  3463. return items;
  3464. };
  3465. }
  3466. performBizUndoRedo(args, isForce) {
  3467. let undoredoModule = this.ssObj.undoredoModule;
  3468. let data;
  3469. if (!isForce) {
  3470. data = args.isUndo ? undoredoModule.undoCollection[undoredoModule.undoCollection.length - 1] : undoredoModule.redoCollection[undoredoModule.redoCollection.length - 1];
  3471. }
  3472. else {
  3473. data = args.isUndo ? undoredoModule.undoCollection.pop() : undoredoModule.redoCollection.pop();
  3474. }
  3475. if (data && data.action == "resize") {
  3476. var k = data;
  3477. data = [];
  3478. data.args = k;
  3479. }
  3480. if (!(data && data.args)) {
  3481. return;
  3482. }
  3483. switch (data.args.action) {
  3484. case 'autofill':
  3485. if (args.isUndo) {
  3486. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3487. this.setCellObjects(data.args.options.fillRange, oldCells);
  3488. }
  3489. else {
  3490. this.autofill.applyAutofill(data.args.options, data.args.direction);
  3491. }
  3492. break;
  3493. case 'formatpaint':
  3494. if (args.isUndo) {
  3495. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3496. this.setCellObjects(data.args.options.destIndexes, oldCells);
  3497. }
  3498. else {
  3499. this.formatpainter.applyFormatPaint(data.args.options.srcRange, data.args.options.destRange, data.args.options.srcSheetIndex);
  3500. }
  3501. break;
  3502. case 'trim':
  3503. if (args.isUndo) {
  3504. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3505. this.setCellObjects(data.args.range, oldCells);
  3506. }
  3507. else {
  3508. this.ribbon.processTrim(data.args.range);
  3509. }
  3510. break;
  3511. case 'removeDuplicates':
  3512. if (args.isUndo) {
  3513. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3514. this.setCellObjects(data.args.options.indexes, oldCells);
  3515. }
  3516. else {
  3517. this.dialogue.removeDuplicate(data.args.options.range, data.args.options.header, data.args.options.colSelected);
  3518. }
  3519. break;
  3520. case 'splittext':
  3521. if (args.isUndo) {
  3522. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3523. this.setCellObjects(data.args.range, oldCells, data.args.stValues);
  3524. }
  3525. else {
  3526. this.formatpainter.applySplitText(data.args.range, data.args.stValues);
  3527. }
  3528. break;
  3529. case 'shiftcells':
  3530. if (args.isUndo) {
  3531. let dragCells = JSON.parse(JSON.stringify(data.args.dragCells));
  3532. let dropCells = JSON.parse(JSON.stringify(data.args.dropCells));
  3533. this.setCellObjects(data.args.options.ranges, dragCells);
  3534. this.setCellObjects(data.args.options.dropRange, dropCells);
  3535. }
  3536. else {
  3537. let dragCells = JSON.parse(JSON.stringify(data.args.dragCells));
  3538. this.setCellObjects(data.args.options.ranges, []);
  3539. this.setCellObjects(data.args.options.dropRange, dragCells);
  3540. }
  3541. break;
  3542. case 'deleteshiftup':
  3543. if (args.isUndo) {
  3544. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3545. this.formatpainter.applyInsertShiftDown(data.args.range, data);
  3546. this.setCellObjects(data.args.indexes, oldCells);
  3547. }
  3548. else {
  3549. this.formatpainter.applyDeleteShiftUp(data.args.range, data);
  3550. }
  3551. break;
  3552. case 'deleteshiftleft':
  3553. if (args.isUndo) {
  3554. let oldCells = JSON.parse(JSON.stringify(data.args.oldCells));
  3555. this.formatpainter.applyInsertShiftRight(data.args.range);
  3556. this.setCellObjects(data.args.indexes, oldCells);
  3557. }
  3558. else {
  3559. this.formatpainter.applyDeleteShiftLeft(data.args.range);
  3560. }
  3561. break;
  3562. case 'insertshiftdown':
  3563. if (args.isUndo) {
  3564. this.formatpainter.applyDeleteShiftUp(data.args.range, data);
  3565. }
  3566. else {
  3567. this.formatpainter.applyInsertShiftDown(data.args.range, data);
  3568. }
  3569. break;
  3570. case 'insertshiftright':
  3571. if (args.isUndo) {
  3572. this.formatpainter.applyDeleteShiftLeft(data.args.range);
  3573. }
  3574. else {
  3575. this.formatpainter.applyInsertShiftRight(data.args.range);
  3576. }
  3577. break;
  3578. case 'shortcuts':
  3579. if (args.isUndo) {
  3580. let oldCells = [...data.args.oldCells];
  3581. this.setCellObjects(data.args.options.range, oldCells);
  3582. }
  3583. else {
  3584. this.shortcuts(data.args.options);
  3585. }
  3586. break;
  3587. case 'bizImageInCell':
  3588. if (args.isUndo) {
  3589. let oldCells = data.args.oldCells;
  3590. oldCells ? "" : oldCells = {};
  3591. let idxs = data.args.options.indexes;
  3592. this.setCellObjects(idxs, [oldCells]);
  3593. this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: idxs[0], cell: idxs[1], cellinfo: oldCells }] }, this, true);
  3594. }
  3595. else {
  3596. this.actionInsertImage(data.args.options);
  3597. }
  3598. break;
  3599. case 'resize':
  3600. if (args.isUndo) {
  3601. let oldData;
  3602. if (data.args.eventArgs.type === "Column") {
  3603. oldData = { args: { undo: true, eventArgs: { index: data.args.eventArgs.index, width: data.args.eventArgs.oldSize, sheetIdx: data.args.eventArgs.sheetIdx, oldWidth: data.args.eventArgs.newSize, range: data.args.eventArgs.range }, action: 'resize', name: 'actionComplete' } };
  3604. }
  3605. if (data.args.eventArgs.type === "Row") {
  3606. oldData = { args: { undo: true, eventArgs: { index: data.args.eventArgs.index, height: data.args.eventArgs.oldSize, sheetIdx: data.args.eventArgs.sheetIdx, oldHeight: data.args.eventArgs.newSize, range: data.args.eventArgs.range }, action: 'resize', name: 'actionComplete' } };
  3607. }
  3608. this.adjustRowsAndColumnWidth(oldData.args);
  3609. }
  3610. else {
  3611. this.adjustRowsAndColumnWidth(data.args);
  3612. }
  3613. break;
  3614. case 'spell':
  3615. if (args.isUndo) {
  3616. let oldCells = [...data.args.oldCells];
  3617. this.setCellObjects(data.args.options.indexes, oldCells);
  3618. }
  3619. else {
  3620. this.adjustRowsAndColumnWidth(data.args);
  3621. }
  3622. break;
  3623. }
  3624. let args1 = { origin: 'biz', action: 'undoredo', sheetIndex: this.getSheetIndex(), isUndo: args.isUndo };
  3625. !isForce && Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().bizSignalr(args1);
  3626. }
  3627. addFormatsToToolbar() {
  3628. let getRibbonItemsFn = this.ssObj.ribbonModule.getRibbonItems.bind(this.ssObj.ribbonModule);
  3629. this.ssObj.ribbonModule.getRibbonItems = () => {
  3630. let items = getRibbonItemsFn();
  3631. let home = items[0].content;
  3632. let item = [{ prefixIcon: "icon-ss-currency", cssClass: 'biz-ss-currencyformat', id: this.ssObj.element.id + '_currencyformat', tooltipText: "Format as currency" },
  3633. { prefixIcon: "icon-ss-percentage", cssClass: 'biz-ss-percentageformat', id: this.ssObj.element.id + '_percentageformat', tooltipText: "Format as percentage" },
  3634. { template: this.ribbon.getFormulaBtnDdb(), id: this.ssObj.element.id + '_sumformula', tooltipText: "Sum Function", }];
  3635. home.splice(8, 0, item[0], item[1]);
  3636. home.splice(items[0].content.length - 1, 0, item[2]);
  3637. let sortingBtn = home.find(x => x.id == "DocumentViewer_sorting").template.ej2_instances[0];
  3638. sortingBtn.addEventListener('select', this.sortingBtnSelect.bind(this));
  3639. sortingBtn.addEventListener('beforeItemRender', this.sortingBtnBfRender.bind(this));
  3640. let sort = items[0].content.find(x => x.id == "DocumentViewer_sorting");
  3641. sort.template.firstElementChild.classList.remove('e-sort-filter-icon');
  3642. sort.template.firstElementChild.classList.add('biz-sort-filter-icon');
  3643. return items;
  3644. };
  3645. }
  3646. sortingBtnBfRender(args) {
  3647. if (args.item.text === "Filter") {
  3648. if (this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) {
  3649. var child = args.element.firstElementChild;
  3650. args.element.innerHTML = child.outerHTML + "Remove Filter";
  3651. args.element.firstElementChild.classList.remove("e-filter-apply");
  3652. args.element.firstElementChild.classList.add("e-filter-clear");
  3653. }
  3654. }
  3655. }
  3656. sortingBtnBeforeOpen(args) {
  3657. if (this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) {
  3658. (args.element.lastElementChild.classList.contains("e-disabled")) && args.element.lastElementChild.classList.remove("e-disabled");
  3659. }
  3660. else {
  3661. !(args.element.lastElementChild.classList.contains("e-disabled")) && args.element.lastElementChild.classList.add("e-disabled");
  3662. }
  3663. }
  3664. sortingBtnSelect(args) {
  3665. if (this.ssObj.filterCollection) {
  3666. if (args.item.text === "Filter") {
  3667. setTimeout(() => {
  3668. if (!this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) {
  3669. this.sortingBtn = document.getElementById("DocumentViewer_sorting");
  3670. this.sortingBtn.firstElementChild.style.color = "";
  3671. }
  3672. }, 500);
  3673. }
  3674. }
  3675. }
  3676. processAccessDailog() {
  3677. this.viewOnlyDialog.hide();
  3678. this.viewOnlyDialog.destroy();
  3679. this.renderAccessDailog();
  3680. }
  3681. renderAccessDailog() {
  3682. this.requestAccessObj = new ej.popups.Dialog({
  3683. header: "Ask the owner to access for edit",
  3684. content: `<div id='requestaccess-container'>
  3685. <textarea id="requestaccess-textarea"> </textarea>
  3686. </div>`,
  3687. width: '400px',
  3688. buttons: [{
  3689. click: this.hideRequestAccess.bind(this),
  3690. buttonModel: { content: 'cancel' }
  3691. },
  3692. {
  3693. click: this.hideRequestAccess.bind(this),
  3694. buttonModel: { content: 'send', isPrimary: true }
  3695. }],
  3696. cssClass: "biz-ss-requestaccess-dialog",
  3697. target: this.container,
  3698. isModal: true,
  3699. });
  3700. this.requestAccessObj.appendTo('#dialog');
  3701. var textareaObj = new ej.inputs.TextBox({
  3702. placeholder: 'Enter your message',
  3703. floatLabelType: 'Auto',
  3704. rows: 4,
  3705. });
  3706. textareaObj.appendTo('#requestaccess-textarea');
  3707. textareaObj.element.setAttribute("rows", "4");
  3708. }
  3709. hideRequestAccess() {
  3710. this.requestAccessObj.hide();
  3711. this.requestAccessObj.destroy();
  3712. }
  3713. lettersToNumber(letters) {
  3714. let base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;
  3715. for (i = 0, j = letters.length - 1; i < letters.length; i += 1, j -= 1) {
  3716. result += Math.pow(base.length, j) * (base.indexOf(letters[i]) + 1);
  3717. }
  3718. return result;
  3719. }
  3720. static Instance() {
  3721. if (this.instance === undefined) {
  3722. this.instance = new Base();
  3723. }
  3724. return this.instance;
  3725. }
  3726. }
  3727. Sheets.Base = Base;
  3728. })(Sheets = Components.Sheets || (Components.Sheets = {}));
  3729. })(Components = Collaboration.Components || (Collaboration.Components = {}));
  3730. })(Collaboration = Apps.Collaboration || (Apps.Collaboration = {}));
  3731. })(Apps = Unibase.Apps || (Unibase.Apps = {}));
  3732. })(Unibase || (Unibase = {}));