From ed28a85db6f63fa939de10f17197e3af0fcb9f27 Mon Sep 17 00:00:00 2001 From: Peter Savchenko Date: Sat, 25 Nov 2017 12:14:06 +0300 Subject: [PATCH] New project structure (#214) --- codex-editor.css => build/codex-editor.css | 0 codex-editor.js => build/codex-editor.js | 0 codex-editor.js.map | 1 - example.html => example/example.html | 0 {plugins => example/plugins}/code/code.css | 0 {plugins => example/plugins}/code/code.js | 0 {plugins => example/plugins}/embed/embed.css | 0 {plugins => example/plugins}/embed/embed.js | 0 .../plugins}/embed/loading.gif | Bin .../plugins}/header/header.css | 0 {plugins => example/plugins}/header/header.js | 0 {plugins => example/plugins}/image/image.css | 0 {plugins => example/plugins}/image/image.js | 0 .../plugins}/instagram/instagram.css | 0 .../plugins}/instagram/instagram.js | 0 .../plugins}/instagram/loading.gif | Bin {plugins => example/plugins}/link/link.css | 0 {plugins => example/plugins}/link/link.js | 0 {plugins => example/plugins}/list/list.css | 0 {plugins => example/plugins}/list/list.js | 0 .../plugins}/paragraph/paragraph.css | 0 .../plugins}/paragraph/paragraph.js | 0 .../plugins}/quote/img/codex.png | Bin .../plugins}/quote/img/upload.png | Bin {plugins => example/plugins}/quote/quote.css | 0 {plugins => example/plugins}/quote/quote.js | 0 .../plugins}/raw/raw-icon-black.svg | 0 .../plugins}/raw/raw-icon-white.svg | 0 {plugins => example/plugins}/raw/raw.css | 0 {plugins => example/plugins}/raw/raw.js | 0 .../plugins}/twitter/twitter.css | 0 .../plugins}/twitter/twitter.js | 0 fonts/codex_editor/codex-editor.eot | Bin 15700 -> 0 bytes fonts/codex_editor/codex-editor.svg | 72 --- fonts/codex_editor/codex-editor.ttf | Bin 15516 -> 0 bytes fonts/codex_editor/codex-editor.woff | Bin 9488 -> 0 bytes fonts/codex_editor/codex-editor.woff2 | Bin 8176 -> 0 bytes icons.css | 63 --- plugins/attaches/attaches.css | 130 ------ plugins/attaches/attaches.js | 430 ------------------ plugins/attaches/cross.svg | 7 - plugins/attaches/file-icon-black.svg | 1 - plugins/attaches/file-icon-white.svg | 1 - server/index.php | 95 ---- .../codex_editor => src/assets}/icon-hash.svg | 0 .../codex_editor => src/assets}/icon-plus.svg | 0 codex.js => src/codex.js | 0 src/styles/main.css | 0 48 files changed, 800 deletions(-) rename codex-editor.css => build/codex-editor.css (100%) rename codex-editor.js => build/codex-editor.js (100%) delete mode 100644 codex-editor.js.map rename example.html => example/example.html (100%) rename {plugins => example/plugins}/code/code.css (100%) rename {plugins => example/plugins}/code/code.js (100%) rename {plugins => example/plugins}/embed/embed.css (100%) rename {plugins => example/plugins}/embed/embed.js (100%) rename {plugins => example/plugins}/embed/loading.gif (100%) rename {plugins => example/plugins}/header/header.css (100%) rename {plugins => example/plugins}/header/header.js (100%) rename {plugins => example/plugins}/image/image.css (100%) rename {plugins => example/plugins}/image/image.js (100%) rename {plugins => example/plugins}/instagram/instagram.css (100%) rename {plugins => example/plugins}/instagram/instagram.js (100%) rename {plugins => example/plugins}/instagram/loading.gif (100%) rename {plugins => example/plugins}/link/link.css (100%) rename {plugins => example/plugins}/link/link.js (100%) rename {plugins => example/plugins}/list/list.css (100%) rename {plugins => example/plugins}/list/list.js (100%) rename {plugins => example/plugins}/paragraph/paragraph.css (100%) rename {plugins => example/plugins}/paragraph/paragraph.js (100%) rename {plugins => example/plugins}/quote/img/codex.png (100%) rename {plugins => example/plugins}/quote/img/upload.png (100%) rename {plugins => example/plugins}/quote/quote.css (100%) rename {plugins => example/plugins}/quote/quote.js (100%) rename {plugins => example/plugins}/raw/raw-icon-black.svg (100%) rename {plugins => example/plugins}/raw/raw-icon-white.svg (100%) rename {plugins => example/plugins}/raw/raw.css (100%) rename {plugins => example/plugins}/raw/raw.js (100%) rename {plugins => example/plugins}/twitter/twitter.css (100%) rename {plugins => example/plugins}/twitter/twitter.js (100%) delete mode 100755 fonts/codex_editor/codex-editor.eot delete mode 100755 fonts/codex_editor/codex-editor.svg delete mode 100755 fonts/codex_editor/codex-editor.ttf delete mode 100755 fonts/codex_editor/codex-editor.woff delete mode 100755 fonts/codex_editor/codex-editor.woff2 delete mode 100644 icons.css delete mode 100644 plugins/attaches/attaches.css delete mode 100644 plugins/attaches/attaches.js delete mode 100644 plugins/attaches/cross.svg delete mode 100644 plugins/attaches/file-icon-black.svg delete mode 100644 plugins/attaches/file-icon-white.svg delete mode 100644 server/index.php rename {fonts/codex_editor => src/assets}/icon-hash.svg (100%) rename {fonts/codex_editor => src/assets}/icon-plus.svg (100%) rename codex.js => src/codex.js (100%) create mode 100644 src/styles/main.css diff --git a/codex-editor.css b/build/codex-editor.css similarity index 100% rename from codex-editor.css rename to build/codex-editor.css diff --git a/codex-editor.js b/build/codex-editor.js similarity index 100% rename from codex-editor.js rename to build/codex-editor.js diff --git a/codex-editor.js.map b/codex-editor.js.map deleted file mode 100644 index 229e585c..00000000 --- a/codex-editor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap b300a85287826b8d9e89","webpack:///./codex.js","webpack:///./src/modules/dom.js","webpack:///./src/modules/core.js","webpack:///./src/modules/ui.js"],"names":["modules","require","module","exports","config","moduleInstances","Promise","resolve","then","configuration","init","start","console","log","catch","error","constructModules","configureModules","forEach","Module","name","state","getModulesDiff","moduleName","prepareDecorator","prepare","holderId","placeholder","sanitizer","p","b","a","hideToolbar","el","classList","properties","element","document","createElement","className","add","property","selector","querySelector","querySelectorAll","Editor","ui","wrapper","msg","type","args","window","e","settings","url","XMLHTTP","XMLHttpRequest","ActiveXObject","encodedString","isFormData","prop","async","data","test","encodeURIComponent","withCredentials","responseContext","beforeSendResult","beforeSend","call","open","isFormData_","setRequestHeader","progress","upload","onprogress","bind","onreadystatechange","readyState","status","success","responseText","send","BLOCK_CLASSNAME","BLOCK_CONTENT","BLOCK_STRETCHED","BLOCK_HIGHLIGHTED","SETTINGS_ITEM","CSS_","editorWrapper","editorZone","reject","dom","make","redactor","toolbar","makeToolBar_","appendChild","editor","nodes","holder","addTools_","makeInlineToolbar_","addInlineToolbarTools_","makeNotificationHolder_","bindEvents_","core"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,W;;;;;;;;;;;;ACnWAF,QAAOC,OAAP;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAyBI;;;;;;;;;AAzBJ,8BAkCS8B,EAlCT,EAkCaC,SAlCb,EAkCwBC,UAlCxB,EAkCoC;;AAE5B,iBAAIC,UAAUC,SAASC,aAAT,CAAuBL,EAAvB,CAAd;;AAEAC,uBAAUhB,OAAV,CAAkB,UAAUqB,SAAV,EAAqB;;AAEnCH,yBAAQF,SAAR,CAAkBM,GAAlB,CAAsBD,SAAtB;AAEH,cAJD;;AAMA,kBAAIE,QAAJ,IAAgBN,UAAhB,EAA4B;;AAExBC,yBAAQK,QAAR,GAAmBN,WAAWM,QAAX,CAAnB;AAEH;;AAED,oBAAOL,OAAP;AAEH;;AAED;;;;;;;;;;;AAtDJ;AAAA;AAAA,gCAgEkC;AAAA,iBAAzBH,EAAyB,uEAApBI,QAAoB;AAAA,iBAAVK,QAAU;;;AAE1B,oBAAOT,GAAGU,aAAH,CAAiBD,QAAjB,CAAP;AAEH;;AAED;;;;;;;;;;AAtEJ;AAAA;AAAA,mCA+EqC;AAAA,iBAAzBT,EAAyB,uEAApBI,QAAoB;AAAA,iBAAVK,QAAU;;;AAE7B,oBAAOT,GAAGW,gBAAH,CAAoBF,QAApB,CAAP;AAEH;AAnFL;AAAA;;;AAaI;;;;;;AAbJ,2BAmBcG,MAnBd,EAmBsB;;AAEd,kBAAKA,MAAL,GAAcA,MAAd;AAEH;AAvBL;AAAA;;;AAEI;;;;AAFJ,6BAMsB;;AAEd,oBAAO,KAAP;AAEH;AAVL;;AAAA;AAAA,K;;;;;;;;;;;;ACAA;;;;;;AAMA3C,QAAOC,OAAP;AAAA;AAAA;;;AAEI;;;;AAFJ,6BAMsB;;AAEd,oBAAO,MAAP;AAEH;AAVL;AAAA;;;AAYI;AAZJ,6BAa8B;;AAEtB,oBAAO,aAAP;AAEH;;AAID;;;;;;;AArBJ;;AA2BI,mBAAYC,MAAZ,EAAoB;AAAA;;AAEhB;;AAEA,cAAKyC,MAAL,GAAc,IAAd;;AAEA;;;AAGA;;AAEA;AACA;AAEH;;AAED;;;;;;;;AA3CJ;AAAA;;;AAuDI;;;;;;AAvDJ,mCA6Dc;;AAEN;;AAEAjC,qBAAQC,GAAR,CAAY,oBAAZ;;AAEA;;;AAGAD,qBAAQC,GAAR,CAAY,KAAKgC,MAAL,CAAYC,EAAZ,CAAeC,OAA3B;;AAGA;;AAEA;;;;;;;;;;AAoBH;;AAED;;;;;;;;AAjGJ;AAAA;AAAA,6BAwGQC,GAxGR,EAwGaC,IAxGb,EAwGmBC,IAxGnB,EAwGyB;;AAEjBD,oBAAOA,QAAQ,KAAf;;AAEA,iBAAI,CAACC,IAAL,EAAW;;AAEPA,wBAAQF,OAAO,WAAf;AACAA,uBAAO,yBAAP;AAEH,cALD,MAKO;;AAEHA,uBAAO,0BAA0BA,GAAjC;AAEH;;AAED,iBAAG;;AAEC,qBAAK,aAAaG,MAAb,IAAuBA,OAAOvC,OAAP,CAAgBqC,IAAhB,CAA5B,EAAqD;;AAEjD,yBAAKC,IAAL,EAAYC,OAAOvC,OAAP,CAAgBqC,IAAhB,EAAwBD,GAAxB,EAA6BE,IAA7B,EAAZ,KACKC,OAAOvC,OAAP,CAAgBqC,IAAhB,EAAwBD,GAAxB;AAER;AAEJ,cATD,CASE,OAAMI,CAAN,EAAS;AACP;AACH;AAEJ;;AAED;;;;;;;;AAtIJ;AAAA;AAAA,8BA6ISC,QA7IT,EA6ImB;;AAEX,iBAAI,CAACA,QAAD,IAAa,CAACA,SAASC,GAA3B,EAAgC;;AAE5B;AAEH;;AAED,iBAAIC,UAAUJ,OAAOK,cAAP,GAAwB,IAAIA,cAAJ,EAAxB,GAA+C,IAAIC,aAAJ,CAAkB,mBAAlB,CAA7D;AAAA,iBACIC,aADJ;AAAA,iBAEIC,UAFJ;AAAA,iBAGIC,IAHJ;;AAMAP,sBAASQ,KAAT,GAA2B,IAA3B;AACAR,sBAASJ,IAAT,GAA2BI,SAASJ,IAAT,IAAiB,KAA5C;AACAI,sBAASS,IAAT,GAA2BT,SAASS,IAAT,IAAiB,EAA5C;AACAT,sBAAS,cAAT,IAA2BA,SAAS,cAAT,KAA4B,iCAAvD;;AAEA,iBAAIA,SAASJ,IAAT,IAAiB,KAAjB,IAA0BI,SAASS,IAAvC,EAA6C;;AAEzCT,0BAASC,GAAT,GAAe,KAAKS,IAAL,CAAUV,SAASC,GAAnB,IAA0BD,SAASC,GAAT,GAAe,GAAf,GAAqBD,SAASS,IAAxD,GAA+DT,SAASC,GAAT,GAAe,GAAf,GAAqBD,SAASS,IAA5G;AAEH,cAJD,MAIO;;AAEHJ,iCAAgB,EAAhB;AACA,sBAAIE,IAAJ,IAAYP,SAASS,IAArB,EAA2B;;AAEvBJ,sCAAkBE,OAAO,GAAP,GAAaI,mBAAmBX,SAASS,IAAT,CAAcF,IAAd,CAAnB,CAAb,GAAuD,GAAzE;AAEH;AAEJ;;AAED,iBAAIP,SAASY,eAAb,EAA8B;;AAE1BV,yBAAQU,eAAR,GAA0B,IAA1B;AAEH;;AAED;;;;AAIA,iBAAIC,wBAAJ;AAAA,iBACIC,yBADJ;;AAGA,iBAAI,OAAOd,SAASe,UAAhB,KAA+B,UAAnC,EAA+C;;AAE3CD,oCAAmBd,SAASe,UAAT,CAAoBC,IAApB,EAAnB;;AAEA,qBAAIF,qBAAqB,KAAzB,EAAgC;;AAE5B;AAEH;AAEJ;;AAEDZ,qBAAQe,IAAR,CAAcjB,SAASJ,IAAvB,EAA6BI,SAASC,GAAtC,EAA2CD,SAASQ,KAApD;;AAEA;;;AAGAF,0BAAaY,YAAYlB,SAASS,IAArB,CAAb;;AAEA,iBAAI,CAACH,UAAL,EAAiB;;AAEb,qBAAIN,SAASJ,IAAT,KAAkB,MAAtB,EAA8B;;AAE1BM,6BAAQiB,gBAAR,CAAyB,cAAzB,EAAyCnB,SAAS,cAAT,CAAzC;AAEH,kBAJD,MAIO;;AAEHE,6BAAQiB,gBAAR,CAAyB,cAAzB,EAAyC,mCAAzC;AAEH;AAEJ;;AAEDjB,qBAAQiB,gBAAR,CAAyB,kBAAzB,EAA6C,gBAA7C;;AAEAN,+BAAkBC,oBAAoBZ,OAAtC;;AAEA,iBAAI,OAAOF,SAASoB,QAAhB,KAA6B,UAAjC,EAA6C;;AAEzClB,yBAAQmB,MAAR,CAAeC,UAAf,GAA4BtB,SAASoB,QAAT,CAAkBG,IAAlB,CAAuBV,eAAvB,CAA5B;AAEH;;AAEDX,qBAAQsB,kBAAR,GAA6B,YAAY;;AAErC,qBAAItB,QAAQuB,UAAR,KAAuB,CAA3B,EAA8B;;AAE1B,yBAAIvB,QAAQwB,MAAR,KAAmB,GAAvB,EAA4B;;AAExB,6BAAI,OAAO1B,SAAS2B,OAAhB,KAA4B,UAAhC,EAA4C;;AAExC3B,sCAAS2B,OAAT,CAAiBX,IAAjB,CAAsBH,eAAtB,EAAuCX,QAAQ0B,YAA/C;AAEH;AAEJ,sBARD,MAQO;;AAEH,6BAAI,OAAO5B,SAAStC,KAAhB,KAA0B,UAA9B,EAA0C;;AAEtCsC,sCAAStC,KAAT,CAAesD,IAAf,CAAoBH,eAApB,EAAqCX,QAAQ0B,YAA7C,EAA2D1B,QAAQwB,MAAnE;AAEH;AAEJ;AAEJ;AAEJ,cAxBD;;AA0BA,iBAAIpB,UAAJ,EAAgB;;AAEZ;AACAJ,yBAAQ2B,IAAR,CAAa7B,SAASS,IAAtB;AAEH,cALD,MAKO;;AAEH;AACAP,yBAAQ2B,IAAR,CAAaxB,aAAb;AAEH;;AAED,oBAAOH,OAAP;AAEH;AA/QL;AAAA;AAAA,2BAiDcV,MAjDd,EAiDsB;;AAEd,kBAAKA,MAAL,GAAcA,MAAd;AAEH;AArDL;;AAAA;AAAA;AAkRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,W;;;;;;;;;;;;ACrbA;;;;;AAKA,KAAIN,YAAY;;AAEZ;;;AAGA4C,sBAAkB,UALN;;AAOZ;;;AAGAC,oBAAgB,mBAVJ;;AAYZ;;;AAGAC,sBAAkB,qBAfN;;AAiBZ;;;AAGAC,wBAAoB,mBApBR;;AAsBZ;;;AAGAC,oBAAgB;AAzBJ,EAAhB;;AA4BA,KAAIC,OAAO;AACPC,oBAAgB,cADT;AAEPC,iBAAgB;AAFT,EAAX;;AAKAxF,QAAOC,OAAP;AAAA;AAAA;;;AAEI;;;;AAFJ,6BAMsB;;AAEd,oBAAO,IAAP;AAEH;AAVL;;AAYI,iBAAY0C,MAAZ,EAAoB;AAAA;;AAEhB,cAAKE,OAAL,GAAe,IAAf;;AAEA;AACA;AACA;;AAIH;;AAGD;;;;;;;;AAzBJ;AAAA;;;AAqCI;;;;;AArCJ,mCA0Cc;;AAINnC,qBAAQC,GAAR,CAAY,kBAAZ;;AAEA,kBAAKkC,OAAL,GAAeV,SAASC,aAAT,CAAuB,KAAvB,CAAf;;AAEA;;AAEA,oBAAO,IAAIhC,OAAJ,CAAY,UAAUC,OAAV,EAAmBoF,MAAnB,EAA2B;;AAE1C,qBAAI5C,UAAW,KAAK/C,OAAL,CAAa4F,GAAb,CAAiBC,IAAjB,CAAsB,KAAtB,EAA6B,CAAEL,KAAKC,aAAP,CAA7B,EAAqD,EAArD,CAAf;AAAA,qBACIK,WAAW,KAAK9F,OAAL,CAAa4F,GAAb,CAAiBC,IAAjB,CAAsB,KAAtB,EAA6B,CAAEL,KAAKE,UAAP,CAA7B,EAAkD,EAAlD,CADf;AAAA,qBAEIK,UAAWC,cAFf;;AAIAjD,yBAAQkD,WAAR,CAAoBF,OAApB;AACAhD,yBAAQkD,WAAR,CAAoBH,QAApB;;AAEA;AACAI,wBAAOC,KAAP,CAAapD,OAAb,GAAwBA,OAAxB;AACAmD,wBAAOC,KAAP,CAAaL,QAAb,GAAwBA,QAAxB;;AAEA;AACAI,wBAAOC,KAAP,CAAaC,MAAb,CAAoBH,WAApB,CAAgClD,OAAhC;;AAEAxC;AAEH,cAlBM;;AAoBP;AApBO,cAqBNC,IArBM,CAqBD6F,SArBC;;AAuBP;AAvBO,cAwBN7F,IAxBM,CAwBD8F,kBAxBC;;AA0BP;AA1BO,cA2BN9F,IA3BM,CA2BD+F,sBA3BC;;AA6BP;AA7BO,cA8BN/F,IA9BM,CA8BDgG,uBA9BC;;AAgCP;AAhCO,cAiCNhG,IAjCM,CAiCDiG,WAjCC,EAmCN3F,KAnCM,CAmCC,YAAY;;AAEhBoF,wBAAOQ,IAAP,CAAY7F,GAAZ,CAAgB,6BAAhB;AAEH,cAvCM,CAAP;AAyCH;AA7FL;AAAA;AAAA,2BA+BcgC,MA/Bd,EA+BsB;;AAEd,kBAAKA,MAAL,GAAcA,MAAd;AAEH;AAnCL;;AAAA;AAAA;AAgGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,W","file":"codex-editor.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b300a85287826b8d9e89","/**\n * Codex Editor\n *\n *\n *\n *\n * @author CodeX Team\n */\n\n/**\n * @typedef {CodexEditor} CodexEditor - editor class\n */\n\n/**\n * @typedef {Object} EditorConfig\n * @property {String} holderId - Element to append Editor\n * ...\n */\n\n/**\n * All Editor components\n */\nconst modules = [\n require('./src/modules/dom'),\n require('./src/modules/core'),\n require('./src/modules/ui')\n];\n\n/**\n * @class\n *\n * @classdesc CodeX Editor base class\n *\n * @property this.config - all settings\n * @property this.moduleInstances - constructed editor components\n *\n * @type {CodexEditor}\n */\nmodule.exports = class CodexEditor {\n\n /** Editor version */\n static get version() {\n\n return VERSION;\n\n }\n\n /**\n * @param {EditorConfig} config - user configuration\n *\n */\n constructor(config) {\n\n 'use strict';\n\n\n /**\n * Configuration object\n */\n this.config = {};\n\n /**\n * Editor Components\n */\n this.moduleInstances = {};\n\n Promise.resolve()\n .then(() => {\n\n this.configuration = config;\n\n })\n .then(() => this.init())\n .then(() => this.start())\n .then(() => {\n\n console.log('CodeX Editor is ready');\n\n })\n .catch(error => {\n\n console.log('CodeX Editor does not ready beecause of %o', error);\n\n });\n\n }\n\n /**\n * Setting for configuration\n * @param {object} config\n */\n set configuration(config = {}) {\n\n this.config.holderId = config.holderId;\n this.config.placeholder = config.placeholder || 'write your story...';\n this.config.sanitizer = config.sanitizer || {\n p: true,\n b: true,\n a: true\n };\n\n this.config.hideToolbar = config.hideToolbar ? config.hideToolbar : false;\n\n }\n\n /**\n * Returns private property\n * @returns {{}|*}\n */\n get configuration() {\n\n return this.config;\n\n }\n\n /**\n * Initializes modules:\n * - make and save instances\n * - configure\n */\n init() {\n\n /**\n * Make modules instances and save it to the @property this.moduleInstances\n */\n this.constructModules();\n\n /**\n * Modules configuration\n */\n this.configureModules();\n\n }\n\n /**\n * Make modules instances and save it to the @property this.moduleInstances\n */\n constructModules() {\n\n modules.forEach( Module => {\n\n this.moduleInstances[Module.name] = new Module({\n config : this.configuration\n });\n\n });\n\n }\n\n /**\n * Modules instances configuration:\n * - pass other modules to the 'state' property\n * - ...\n */\n configureModules() {\n\n for(let name in this.moduleInstances) {\n\n /**\n * Module does not need self-instance\n */\n this.moduleInstances[name].state = this.getModulesDiff( name );\n\n }\n\n }\n\n /**\n * Return modules without passed name\n */\n getModulesDiff( name ) {\n\n let modules = {};\n\n for(let moduleName in this.moduleInstances) {\n\n /**\n * Skip module with passed name\n */\n if (moduleName == name) {\n\n continue;\n\n }\n modules[moduleName] = this.moduleInstances[moduleName];\n\n }\n\n return modules;\n\n }\n\n\n\n /**\n * Start Editor!\n *\n * @return {Promise}\n */\n start() {\n\n let prepareDecorator = module => module.prepare();\n\n return Promise.resolve()\n .then(prepareDecorator(this.moduleInstances['core']))\n .then(prepareDecorator(this.moduleInstances['ui']))\n .catch(function (error) {\n\n console.log('Error occured', error);\n\n });\n\n\n }\n\n};\n\n// module.exports = (function (editor) {\n//\n// 'use strict';\n//\n// editor.version = VERSION;\n// editor.scriptPrefix = 'cdx-script-';\n//\n// var init = function () {\n//\n// editor.core = require('./modules/core');\n// editor.tools = require('./modules/tools');\n// editor.ui = require('./modules/ui');\n// editor.transport = require('./modules/transport');\n// editor.renderer = require('./modules/renderer');\n// editor.saver = require('./modules/saver');\n// editor.content = require('./modules/content');\n// editor.toolbar = require('./modules/toolbar/toolbar');\n// editor.callback = require('./modules/callbacks');\n// editor.draw = require('./modules/draw');\n// editor.caret = require('./modules/caret');\n// editor.notifications = require('./modules/notifications');\n// editor.parser = require('./modules/parser');\n// editor.sanitizer = require('./modules/sanitizer');\n// editor.listeners = require('./modules/listeners');\n// editor.destroyer = require('./modules/destroyer');\n// editor.paste = require('./modules/paste');\n//\n// };\n//\n// /**\n// * @public\n// * holds initial settings\n// */\n// editor.settings = {\n// tools : ['paragraph', 'header', 'picture', 'list', 'quote', 'code', 'twitter', 'instagram', 'smile'],\n// holderId : 'codex-editor',\n//\n// // Type of block showing on empty editor\n// initialBlockPlugin: 'paragraph'\n// };\n//\n// /**\n// * public\n// *\n// * Static nodes\n// */\n// editor.nodes = {\n// holder : null,\n// wrapper : null,\n// toolbar : null,\n// inlineToolbar : {\n// wrapper : null,\n// buttons : null,\n// actions : null\n// },\n// toolbox : null,\n// notifications : null,\n// plusButton : null,\n// showSettingsButton: null,\n// showTrashButton : null,\n// blockSettings : null,\n// pluginSettings : null,\n// defaultSettings : null,\n// toolbarButtons : {}, // { type : DomEl, ... }\n// redactor : null\n// };\n//\n// /**\n// * @public\n// *\n// * Output state\n// */\n// editor.state = {\n// jsonOutput : [],\n// blocks : [],\n// inputs : []\n// };\n//\n// /**\n// * @public\n// * Editor plugins\n// */\n// editor.tools = {};\n//\n// /**\n// * Initialization\n// * @uses Promise cEditor.core.prepare\n// * @param {Object} userSettings\n// * @param {Array} userSettings.tools list of plugins\n// * @param {String} userSettings.holderId Element's id to append editor\n// *\n// * Load user defined tools\n// * Tools must contain this important objects :\n// * @param {String} type - this is a type of plugin. It can be used as plugin name\n// * @param {String} iconClassname - this a icon in toolbar\n// * @param {Object} make - what should plugin do, when it is clicked\n// * @param {Object} appendCallback - callback after clicking\n// * @param {Element} settings - what settings does it have\n// * @param {Object} render - plugin get JSON, and should return HTML\n// * @param {Object} save - plugin gets HTML content, returns JSON\n// * @param {Boolean} displayInToolbox - will be displayed in toolbox. Default value is TRUE\n// * @param {Boolean} enableLineBreaks - inserts new block or break lines. Default value is FALSE\n// *\n// * @example\n// * - type : 'header',\n// * - iconClassname : 'ce-icon-header',\n// * - make : headerTool.make,\n// * - appendCallback : headerTool.appendCallback,\n// * - settings : headerTool.makeSettings(),\n// * - render : headerTool.render,\n// * - save : headerTool.save,\n// * - displayInToolbox : true,\n// * - enableLineBreaks : false\n// */\n// editor.start = function (userSettings) {\n//\n// init();\n//\n// editor.core.prepare(userSettings)\n//\n// // If all ok, make UI, bind events and parse initial-content\n// .then(editor.ui.prepare)\n// .then(editor.tools.prepare)\n// .then(editor.sanitizer.prepare)\n// .then(editor.paste.prepare)\n// .then(editor.transport.prepare)\n// .then(editor.renderer.makeBlocksFromData)\n// .then(editor.ui.saveInputs)\n// .catch(function (error) {\n//\n// editor.core.log('Initialization failed with error: %o', 'warn', error);\n//\n// });\n//\n// };\n//\n// return editor;\n//\n// })({});\n\n\n\n// WEBPACK FOOTER //\n// ./codex.js","module.exports = class Dom {\n\n /**\n * Module key name\n * @returns {string}\n */\n static get name() {\n\n return 'dom';\n\n };\n\n\n /**\n * @param Editor\n * @param Editor.modules {@link Tools#list}\n * @param Editor.config {@link CodexEditor#configuration}\n * @param Editor\n */\n set state(Editor) {\n\n this.Editor = Editor;\n\n }\n\n /**\n * Draws element with class and properties\n *\n * @param {String} el - Element name\n * @param {Array} classList - array of CSS classes\n * @param {Object} properties - list of objects/properties\n *\n * @returns {Element}\n */\n make(el, classList, properties) {\n\n let element = document.createElement(el);\n\n classList.forEach(function (className) {\n\n element.classList.add(className);\n\n });\n\n for(property in properties) {\n\n element.property = properties[property];\n\n }\n\n return element;\n\n }\n\n /**\n * Selector Decorator\n *\n * Returns first match\n *\n * @param {Element} el - element we searching inside. Default - DOM Document\n * @param {String} selector - searching string\n *\n * @returns {Element}\n */\n find(el = document, selector) {\n\n return el.querySelector(selector);\n\n }\n\n /**\n * Selector Decorator.\n *\n * Returns all matches\n *\n * @param {Element} el - element we searching inside. Default - DOM Document\n * @param {String} selector - searching string\n * @returns {NodeList}\n */\n findAll(el = document, selector) {\n\n return el.querySelectorAll(selector);\n\n }\n\n};\n\n\n// WEBPACK FOOTER //\n// ./src/modules/dom.js","/**\n * Codex Editor Core\n *\n * @author Codex Team\n * @version 1.1.3\n */\nmodule.exports = class Core {\n\n /**\n * Module key name\n * @returns {string}\n */\n static get name() {\n\n return 'core';\n\n };\n\n /** Editor script prefixes */\n static get scriptPrefix() {\n\n return 'cdx-script-';\n\n }\n\n\n\n /**\n *\n * @param Editor\n * @param Editor.modules {@link Tools#list}\n * @param Editor.config {@link CodexEditor#configuration}\n */\n constructor(config) {\n\n // this.Editor.modules.toolbar;\n\n this.Editor = null;\n\n // console.log(this.Editor);\n\n\n // this.toolbar = modules.toolbar;\n\n // this.sanitizer = null;\n // this.state = {};\n\n }\n\n /**\n * @param Editor\n * @param Editor.modules {@link Tools#list}\n * @param Editor.config {@link CodexEditor#configuration}\n * @param Editor\n */\n set state(Editor) {\n\n this.Editor = Editor;\n\n }\n\n /**\n * @public\n *\n * Editor preparing method\n * @return Promise\n */\n prepare() {\n\n // let self = this;\n\n console.log('Core prepare fired');\n\n /**\n * Обращение к другому модулю\n */\n console.log(this.Editor.ui.wrapper);\n\n\n return;\n\n /**\n\n return new Promise(function (resolve, reject) {\n\n if (typeof self.Editor.config.holderId === undefined ) {\n\n reject(Error(\"Holder wasn't found by ID: #\" + userSettings.holderId));\n\n } else {\n\n resolve();\n\n }\n\n resolve();\n\n });\n\n */\n\n }\n\n /**\n * Core custom logger\n *\n * @param msg\n * @param type\n * @param args\n */\n log(msg, type, args) {\n\n type = type || 'log';\n\n if (!args) {\n\n args = msg || 'undefined';\n msg = '[codex-editor]: %o';\n\n } else {\n\n msg = '[codex-editor]: ' + msg;\n\n }\n\n try{\n\n if ( 'console' in window && window.console[ type ] ) {\n\n if ( args ) window.console[ type ]( msg, args );\n else window.console[ type ]( msg );\n\n }\n\n } catch(e) {\n // do nothing\n }\n\n }\n\n /**\n * Native Ajax\n * @param {String} settings.url - request URL\n * @param {function} settings.beforeSend - returned value will be passed as context to the Success, Error and Progress callbacks\n * @param {function} settings.success\n * @param {function} settings.progress\n */\n ajax(settings) {\n\n if (!settings || !settings.url) {\n\n return;\n\n }\n\n var XMLHTTP = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'),\n encodedString,\n isFormData,\n prop;\n\n\n settings.async = true;\n settings.type = settings.type || 'GET';\n settings.data = settings.data || '';\n settings['content-type'] = settings['content-type'] || 'application/json; charset=utf-8';\n\n if (settings.type == 'GET' && settings.data) {\n\n settings.url = /\\?/.test(settings.url) ? settings.url + '&' + settings.data : settings.url + '?' + settings.data;\n\n } else {\n\n encodedString = '';\n for(prop in settings.data) {\n\n encodedString += (prop + '=' + encodeURIComponent(settings.data[prop]) + '&');\n\n }\n\n }\n\n if (settings.withCredentials) {\n\n XMLHTTP.withCredentials = true;\n\n }\n\n /**\n * Value returned in beforeSend funtion will be passed as context to the other response callbacks\n * If beforeSend returns false, AJAX will be blocked\n */\n let responseContext,\n beforeSendResult;\n\n if (typeof settings.beforeSend === 'function') {\n\n beforeSendResult = settings.beforeSend.call();\n\n if (beforeSendResult === false) {\n\n return;\n\n }\n\n }\n\n XMLHTTP.open( settings.type, settings.url, settings.async );\n\n /**\n * If we send FormData, we need no content-type header\n */\n isFormData = isFormData_(settings.data);\n\n if (!isFormData) {\n\n if (settings.type !== 'POST') {\n\n XMLHTTP.setRequestHeader('Content-type', settings['content-type']);\n\n } else {\n\n XMLHTTP.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n }\n\n }\n\n XMLHTTP.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\n responseContext = beforeSendResult || XMLHTTP;\n\n if (typeof settings.progress === 'function') {\n\n XMLHTTP.upload.onprogress = settings.progress.bind(responseContext);\n\n }\n\n XMLHTTP.onreadystatechange = function () {\n\n if (XMLHTTP.readyState === 4) {\n\n if (XMLHTTP.status === 200) {\n\n if (typeof settings.success === 'function') {\n\n settings.success.call(responseContext, XMLHTTP.responseText);\n\n }\n\n } else {\n\n if (typeof settings.error === 'function') {\n\n settings.error.call(responseContext, XMLHTTP.responseText, XMLHTTP.status);\n\n }\n\n }\n\n }\n\n };\n\n if (isFormData) {\n\n // Sending FormData\n XMLHTTP.send(settings.data);\n\n } else {\n\n // POST requests\n XMLHTTP.send(encodedString);\n\n }\n\n return XMLHTTP;\n\n }\n\n};\n// module.exports = (function (core) {\n//\n// let editor = codex.editor;\n//\n//\n// /**\n// * @protected\n// *\n// * Helper for insert one element after another\n// */\n// core.insertAfter = function (target, element) {\n//\n// target.parentNode.insertBefore(element, target.nextSibling);\n//\n// };\n//\n// /**\n// * @const\n// *\n// * Readable DOM-node types map\n// */\n// core.nodeTypes = {\n// TAG : 1,\n// TEXT : 3,\n// COMMENT : 8,\n// DOCUMENT_FRAGMENT: 11\n// };\n//\n// /**\n// * @const\n// * Readable keys map\n// */\n// core.keys = { BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16, CTRL: 17, ALT: 18, ESC: 27, SPACE: 32, LEFT: 37, UP: 38, DOWN: 40, RIGHT: 39, DELETE: 46, META: 91 };\n//\n// /**\n// * @protected\n// *\n// * Check object for DOM node\n// */\n// core.isDomNode = function (el) {\n//\n// return el && typeof el === 'object' && el.nodeType && el.nodeType == this.nodeTypes.TAG;\n//\n// };\n//\n// /**\n// * Checks passed object for emptiness\n// * @require ES5 - Object.keys\n// * @param {object}\n// */\n// core.isEmpty = function ( obj ) {\n//\n// return Object.keys(obj).length === 0;\n//\n// };\n//\n// /**\n// * Appends script to head of document\n// * @return Promise\n// */\n// core.importScript = function (scriptPath, instanceName) {\n//\n// return new Promise(function (resolve, reject) {\n//\n// let script;\n//\n// /** Script is already loaded */\n// if ( !instanceName ) {\n//\n// reject('Instance name is missed');\n//\n// } else if ( document.getElementById(editor.scriptPrefix + instanceName) ) {\n//\n// resolve(scriptPath);\n//\n// }\n//\n// script = document.createElement('SCRIPT');\n// script.async = true;\n// script.defer = true;\n// script.id = editor.scriptPrefix + instanceName;\n//\n// script.onload = function () {\n//\n// resolve(scriptPath);\n//\n// };\n//\n// script.onerror = function () {\n//\n// reject(scriptPath);\n//\n// };\n//\n// script.src = scriptPath;\n// document.head.appendChild(script);\n//\n// });\n//\n// };\n//\n// /**\n// * Function for checking is it FormData object to send.\n// * @param {Object} object to check\n// * @return boolean\n// */\n// var isFormData_ = function (object) {\n//\n// return object instanceof FormData;\n//\n// };\n//\n// /**\n// * Check block\n// * @param target\n// * @description Checks target is it native input\n// */\n// core.isNativeInput = function (target) {\n//\n// var nativeInputAreas = ['INPUT', 'TEXTAREA'];\n//\n// return nativeInputAreas.indexOf(target.tagName) != -1;\n//\n// };\n//\n// /**\n// * Check if block is empty\n// * We should check block textContent, child native inputs and some exceptions like IMG and IFRAME\n// *\n// * @param block\n// * @returns {boolean}\n// */\n// core.isBlockEmpty = function (block) {\n//\n// const EXCEPTION_TAGS = ['IMG', 'IFRAME'];\n//\n// var nativeInputs = block.querySelectorAll('textarea, input'),\n// nativeInputsAreEmpty = true,\n// textContentIsEmpty = !block.textContent.trim();\n//\n// Array.prototype.forEach.call(nativeInputs, function (input) {\n//\n// if (input.type == 'textarea' || input.type == 'text') {\n//\n// nativeInputsAreEmpty = nativeInputsAreEmpty && !input.value.trim();\n//\n// }\n//\n// });\n//\n// return textContentIsEmpty && nativeInputsAreEmpty && !EXCEPTION_TAGS.includes(block.tagName);\n//\n// };\n//\n//\n// return core;\n//\n// })({});\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/core.js","/**\n * Module UI\n *\n * @type {UI}\n */\nlet className = {\n\n /**\n * @const {string} BLOCK_CLASSNAME - redactor blocks name\n */\n BLOCK_CLASSNAME : 'ce-block',\n\n /**\n * @const {String} wrapper for plugins content\n */\n BLOCK_CONTENT : 'ce-block__content',\n\n /**\n * @const {String} BLOCK_STRETCHED - makes block stretched\n */\n BLOCK_STRETCHED : 'ce-block--stretched',\n\n /**\n * @const {String} BLOCK_HIGHLIGHTED - adds background\n */\n BLOCK_HIGHLIGHTED : 'ce-block--focused',\n\n /**\n * @const {String} - for all default settings\n */\n SETTINGS_ITEM : 'ce-settings__item'\n};\n\nlet CSS_ = {\n editorWrapper : 'codex-editor',\n editorZone : 'ce-redactor'\n};\n\nmodule.exports = class UI {\n\n /**\n * Module key name\n * @returns {string}\n */\n static get name() {\n\n return 'ui';\n\n };\n\n constructor(Editor) {\n\n this.wrapper = null;\n\n // this.Editor = Editor;\n //\n // this.modules = this.Editor.modules;\n\n\n\n }\n\n\n /**\n * @param Editor\n * @param Editor.modules {@link Tools#list}\n * @param Editor.config {@link CodexEditor#configuration}\n * @param Editor\n */\n set state(Editor) {\n\n this.Editor = Editor;\n\n }\n\n /**\n * @protected\n *\n * Making main interface\n */\n prepare() {\n\n\n\n console.log('ui prepare fired');\n\n this.wrapper = document.createElement('div');\n\n return;\n\n return new Promise(function (resolve, reject) {\n\n let wrapper = this.modules.dom.make('DIV', [ CSS_.editorWrapper ], {}),\n redactor = this.modules.dom.make('DIV', [ CSS_.editorZone ], {}),\n toolbar = makeToolBar_();\n\n wrapper.appendChild(toolbar);\n wrapper.appendChild(redactor);\n\n /** Save created ui-elements to static nodes state */\n editor.nodes.wrapper = wrapper;\n editor.nodes.redactor = redactor;\n\n /** Append editor wrapper with redactor zone into holder */\n editor.nodes.holder.appendChild(wrapper);\n\n resolve();\n\n })\n\n /** Add toolbox tools */\n .then(addTools_)\n\n /** Make container for inline toolbar */\n .then(makeInlineToolbar_)\n\n /** Add inline toolbar tools */\n .then(addInlineToolbarTools_)\n\n /** Draw wrapper for notifications */\n .then(makeNotificationHolder_)\n\n /** Add eventlisteners to redactor elements */\n .then(bindEvents_)\n\n .catch( function () {\n\n editor.core.log(\"Can't draw editor interface\");\n\n });\n\n }\n\n};\n// /**\n// * Codex Editor UI module\n// *\n// * @author Codex Team\n// * @version 1.2.0\n// */\n//\n// module.exports = (function (ui) {\n//\n// let editor = codex.editor;\n//\n// /**\n// * Basic editor classnames\n// */\n// ui.prepare = function () {\n//\n\n//\n// };\n//\n// /**\n// * @private\n// * Draws inline toolbar zone\n// */\n// var makeInlineToolbar_ = function () {\n//\n// var container = editor.draw.inlineToolbar();\n//\n// /** Append to redactor new inline block */\n// editor.nodes.inlineToolbar.wrapper = container;\n//\n// /** Draw toolbar buttons */\n// editor.nodes.inlineToolbar.buttons = editor.draw.inlineToolbarButtons();\n//\n// /** Buttons action or settings */\n// editor.nodes.inlineToolbar.actions = editor.draw.inlineToolbarActions();\n//\n// /** Append to inline toolbar buttons as part of it */\n// editor.nodes.inlineToolbar.wrapper.appendChild(editor.nodes.inlineToolbar.buttons);\n// editor.nodes.inlineToolbar.wrapper.appendChild(editor.nodes.inlineToolbar.actions);\n//\n// editor.nodes.wrapper.appendChild(editor.nodes.inlineToolbar.wrapper);\n//\n// };\n//\n// var makeToolBar_ = function () {\n//\n// let toolbar = editor.draw.toolbar(),\n// blockButtons = makeToolbarSettings_(),\n// toolbarContent = makeToolbarContent_();\n//\n// /** Appending first-level block buttons */\n// toolbar.appendChild(blockButtons);\n//\n// /** Append toolbarContent to toolbar */\n// toolbar.appendChild(toolbarContent);\n//\n// /** Make toolbar global */\n// editor.nodes.toolbar = toolbar;\n//\n// return toolbar;\n//\n// };\n//\n// var makeToolbarContent_ = function () {\n//\n// let toolbarContent = editor.draw.toolbarContent(),\n// toolbox = editor.draw.toolbox(),\n// plusButton = editor.draw.plusButton();\n//\n// /** Append plus button */\n// toolbarContent.appendChild(plusButton);\n//\n// /** Appending toolbar tools */\n// toolbarContent.appendChild(toolbox);\n//\n// /** Make Toolbox and plusButton global */\n// editor.nodes.toolbox = toolbox;\n// editor.nodes.plusButton = plusButton;\n//\n// return toolbarContent;\n//\n// };\n//\n// var makeToolbarSettings_ = function () {\n//\n// let blockSettings = editor.draw.blockSettings(),\n// blockButtons = editor.draw.blockButtons(),\n// defaultSettings = editor.draw.defaultSettings(),\n// showSettingsButton = editor.draw.settingsButton(),\n// showTrashButton = editor.toolbar.settings.makeRemoveBlockButton(),\n// pluginSettings = editor.draw.pluginsSettings();\n//\n// /** Add default and plugins settings */\n// blockSettings.appendChild(pluginSettings);\n// blockSettings.appendChild(defaultSettings);\n//\n// /**\n// * Make blocks buttons\n// * This block contains settings button and remove block button\n// */\n// blockButtons.appendChild(showSettingsButton);\n// blockButtons.appendChild(showTrashButton);\n// blockButtons.appendChild(blockSettings);\n//\n// /** Make BlockSettings, PluginSettings, DefaultSettings global */\n// editor.nodes.blockSettings = blockSettings;\n// editor.nodes.pluginSettings = pluginSettings;\n// editor.nodes.defaultSettings = defaultSettings;\n// editor.nodes.showSettingsButton = showSettingsButton;\n// editor.nodes.showTrashButton = showTrashButton;\n//\n// return blockButtons;\n//\n// };\n//\n// /** Draw notifications holder */\n// var makeNotificationHolder_ = function () {\n//\n// /** Append block with notifications to the document */\n// editor.nodes.notifications = editor.notifications.createHolder();\n//\n// };\n//\n// /**\n// * @private\n// * Append tools passed in editor.tools\n// */\n// var addTools_ = function () {\n//\n// var tool,\n// toolName,\n// toolButton;\n//\n// for ( toolName in editor.settings.tools ) {\n//\n// tool = editor.settings.tools[toolName];\n//\n// editor.tools[toolName] = tool;\n//\n// if (!tool.iconClassname && tool.displayInToolbox) {\n//\n// editor.core.log('Toolbar icon classname missed. Tool %o skipped', 'warn', toolName);\n// continue;\n//\n// }\n//\n// if (typeof tool.render != 'function') {\n//\n// editor.core.log('render method missed. Tool %o skipped', 'warn', toolName);\n// continue;\n//\n// }\n//\n// if (!tool.displayInToolbox) {\n//\n// continue;\n//\n// } else {\n//\n// /** if tools is for toolbox */\n// toolButton = editor.draw.toolbarButton(toolName, tool.iconClassname);\n//\n// editor.nodes.toolbox.appendChild(toolButton);\n//\n// editor.nodes.toolbarButtons[toolName] = toolButton;\n//\n// }\n//\n// }\n//\n// };\n//\n// var addInlineToolbarTools_ = function () {\n//\n// var tools = {\n//\n// bold: {\n// icon : 'ce-icon-bold',\n// command : 'bold'\n// },\n//\n// italic: {\n// icon : 'ce-icon-italic',\n// command : 'italic'\n// },\n//\n// link: {\n// icon : 'ce-icon-link',\n// command : 'createLink'\n// }\n// };\n//\n// var toolButton,\n// tool;\n//\n// for(var name in tools) {\n//\n// tool = tools[name];\n//\n// toolButton = editor.draw.toolbarButtonInline(name, tool.icon);\n//\n// editor.nodes.inlineToolbar.buttons.appendChild(toolButton);\n// /**\n// * Add callbacks to this buttons\n// */\n// editor.ui.setInlineToolbarButtonBehaviour(toolButton, tool.command);\n//\n// }\n//\n// };\n//\n// /**\n// * @private\n// * Bind editor UI events\n// */\n// var bindEvents_ = function () {\n//\n// editor.core.log('ui.bindEvents fired', 'info');\n//\n// // window.addEventListener('error', function (errorMsg, url, lineNumber) {\n// // editor.notifications.errorThrown(errorMsg, event);\n// // }, false );\n//\n// /** All keydowns on Document */\n// editor.listeners.add(document, 'keydown', editor.callback.globalKeydown, false);\n//\n// /** All keydowns on Redactor zone */\n// editor.listeners.add(editor.nodes.redactor, 'keydown', editor.callback.redactorKeyDown, false);\n//\n// /** All keydowns on Document */\n// editor.listeners.add(document, 'keyup', editor.callback.globalKeyup, false );\n//\n// /**\n// * Mouse click to radactor\n// */\n// editor.listeners.add(editor.nodes.redactor, 'click', editor.callback.redactorClicked, false );\n//\n// /**\n// * Clicks to the Plus button\n// */\n// editor.listeners.add(editor.nodes.plusButton, 'click', editor.callback.plusButtonClicked, false);\n//\n// /**\n// * Clicks to SETTINGS button in toolbar\n// */\n// editor.listeners.add(editor.nodes.showSettingsButton, 'click', editor.callback.showSettingsButtonClicked, false );\n//\n// /** Bind click listeners on toolbar buttons */\n// for (var button in editor.nodes.toolbarButtons) {\n//\n// editor.listeners.add(editor.nodes.toolbarButtons[button], 'click', editor.callback.toolbarButtonClicked, false);\n//\n// }\n//\n// };\n//\n// ui.addBlockHandlers = function (block) {\n//\n// if (!block) return;\n//\n// /**\n// * Block keydowns\n// */\n// editor.listeners.add(block, 'keydown', editor.callback.blockKeydown, false);\n//\n// /**\n// * Pasting content from another source\n// * We have two type of sanitization\n// * First - uses deep-first search algorithm to get sub nodes,\n// * sanitizes whole Block_content and replaces cleared nodes\n// * This method is deprecated\n// * Method is used in editor.callback.blockPaste(event)\n// *\n// * Secont - uses Mutation observer.\n// * Observer \"observe\" DOM changes and send changings to callback.\n// * Callback gets changed node, not whole Block_content.\n// * Inserted or changed node, which we've gotten have been cleared and replaced with diry node\n// *\n// * Method is used in editor.callback.blockPasteViaSanitize(event)\n// *\n// * @uses html-janitor\n// * @example editor.callback.blockPasteViaSanitize(event), the second method.\n// *\n// */\n// editor.listeners.add(block, 'paste', editor.paste.blockPasteCallback, false);\n//\n// /**\n// * Show inline toolbar for selected text\n// */\n// editor.listeners.add(block, 'mouseup', editor.toolbar.inline.show, false);\n// editor.listeners.add(block, 'keyup', editor.toolbar.inline.show, false);\n//\n// };\n//\n// /** getting all contenteditable elements */\n// ui.saveInputs = function () {\n//\n// var redactor = editor.nodes.redactor;\n//\n// editor.state.inputs = [];\n//\n// /** Save all inputs in global variable state */\n// var inputs = redactor.querySelectorAll('[contenteditable], input, textarea');\n//\n// Array.prototype.map.call(inputs, function (current) {\n//\n// if (!current.type || current.type == 'text' || current.type == 'textarea') {\n//\n// editor.state.inputs.push(current);\n//\n// }\n//\n// });\n//\n// };\n//\n// /**\n// * Adds first initial block on empty redactor\n// */\n// ui.addInitialBlock = function () {\n//\n// var initialBlockType = editor.settings.initialBlockPlugin,\n// initialBlock;\n//\n// if ( !editor.tools[initialBlockType] ) {\n//\n// editor.core.log('Plugin %o was not implemented and can\\'t be used as initial block', 'warn', initialBlockType);\n// return;\n//\n// }\n//\n// initialBlock = editor.tools[initialBlockType].render();\n//\n// initialBlock.setAttribute('data-placeholder', editor.settings.placeholder);\n//\n// editor.content.insertBlock({\n// type : initialBlockType,\n// block : initialBlock\n// });\n//\n// editor.content.workingNodeChanged(initialBlock);\n//\n// };\n//\n// ui.setInlineToolbarButtonBehaviour = function (button, type) {\n//\n// editor.listeners.add(button, 'mousedown', function (event) {\n//\n// editor.toolbar.inline.toolClicked(event, type);\n//\n// }, false);\n//\n// };\n//\n// return ui;\n//\n// })({});\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/ui.js"],"sourceRoot":""} \ No newline at end of file diff --git a/example.html b/example/example.html similarity index 100% rename from example.html rename to example/example.html diff --git a/plugins/code/code.css b/example/plugins/code/code.css similarity index 100% rename from plugins/code/code.css rename to example/plugins/code/code.css diff --git a/plugins/code/code.js b/example/plugins/code/code.js similarity index 100% rename from plugins/code/code.js rename to example/plugins/code/code.js diff --git a/plugins/embed/embed.css b/example/plugins/embed/embed.css similarity index 100% rename from plugins/embed/embed.css rename to example/plugins/embed/embed.css diff --git a/plugins/embed/embed.js b/example/plugins/embed/embed.js similarity index 100% rename from plugins/embed/embed.js rename to example/plugins/embed/embed.js diff --git a/plugins/embed/loading.gif b/example/plugins/embed/loading.gif similarity index 100% rename from plugins/embed/loading.gif rename to example/plugins/embed/loading.gif diff --git a/plugins/header/header.css b/example/plugins/header/header.css similarity index 100% rename from plugins/header/header.css rename to example/plugins/header/header.css diff --git a/plugins/header/header.js b/example/plugins/header/header.js similarity index 100% rename from plugins/header/header.js rename to example/plugins/header/header.js diff --git a/plugins/image/image.css b/example/plugins/image/image.css similarity index 100% rename from plugins/image/image.css rename to example/plugins/image/image.css diff --git a/plugins/image/image.js b/example/plugins/image/image.js similarity index 100% rename from plugins/image/image.js rename to example/plugins/image/image.js diff --git a/plugins/instagram/instagram.css b/example/plugins/instagram/instagram.css similarity index 100% rename from plugins/instagram/instagram.css rename to example/plugins/instagram/instagram.css diff --git a/plugins/instagram/instagram.js b/example/plugins/instagram/instagram.js similarity index 100% rename from plugins/instagram/instagram.js rename to example/plugins/instagram/instagram.js diff --git a/plugins/instagram/loading.gif b/example/plugins/instagram/loading.gif similarity index 100% rename from plugins/instagram/loading.gif rename to example/plugins/instagram/loading.gif diff --git a/plugins/link/link.css b/example/plugins/link/link.css similarity index 100% rename from plugins/link/link.css rename to example/plugins/link/link.css diff --git a/plugins/link/link.js b/example/plugins/link/link.js similarity index 100% rename from plugins/link/link.js rename to example/plugins/link/link.js diff --git a/plugins/list/list.css b/example/plugins/list/list.css similarity index 100% rename from plugins/list/list.css rename to example/plugins/list/list.css diff --git a/plugins/list/list.js b/example/plugins/list/list.js similarity index 100% rename from plugins/list/list.js rename to example/plugins/list/list.js diff --git a/plugins/paragraph/paragraph.css b/example/plugins/paragraph/paragraph.css similarity index 100% rename from plugins/paragraph/paragraph.css rename to example/plugins/paragraph/paragraph.css diff --git a/plugins/paragraph/paragraph.js b/example/plugins/paragraph/paragraph.js similarity index 100% rename from plugins/paragraph/paragraph.js rename to example/plugins/paragraph/paragraph.js diff --git a/plugins/quote/img/codex.png b/example/plugins/quote/img/codex.png similarity index 100% rename from plugins/quote/img/codex.png rename to example/plugins/quote/img/codex.png diff --git a/plugins/quote/img/upload.png b/example/plugins/quote/img/upload.png similarity index 100% rename from plugins/quote/img/upload.png rename to example/plugins/quote/img/upload.png diff --git a/plugins/quote/quote.css b/example/plugins/quote/quote.css similarity index 100% rename from plugins/quote/quote.css rename to example/plugins/quote/quote.css diff --git a/plugins/quote/quote.js b/example/plugins/quote/quote.js similarity index 100% rename from plugins/quote/quote.js rename to example/plugins/quote/quote.js diff --git a/plugins/raw/raw-icon-black.svg b/example/plugins/raw/raw-icon-black.svg similarity index 100% rename from plugins/raw/raw-icon-black.svg rename to example/plugins/raw/raw-icon-black.svg diff --git a/plugins/raw/raw-icon-white.svg b/example/plugins/raw/raw-icon-white.svg similarity index 100% rename from plugins/raw/raw-icon-white.svg rename to example/plugins/raw/raw-icon-white.svg diff --git a/plugins/raw/raw.css b/example/plugins/raw/raw.css similarity index 100% rename from plugins/raw/raw.css rename to example/plugins/raw/raw.css diff --git a/plugins/raw/raw.js b/example/plugins/raw/raw.js similarity index 100% rename from plugins/raw/raw.js rename to example/plugins/raw/raw.js diff --git a/plugins/twitter/twitter.css b/example/plugins/twitter/twitter.css similarity index 100% rename from plugins/twitter/twitter.css rename to example/plugins/twitter/twitter.css diff --git a/plugins/twitter/twitter.js b/example/plugins/twitter/twitter.js similarity index 100% rename from plugins/twitter/twitter.js rename to example/plugins/twitter/twitter.js diff --git a/fonts/codex_editor/codex-editor.eot b/fonts/codex_editor/codex-editor.eot deleted file mode 100755 index 723ad6ab45ec08237344483faa86c2261cbe98d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15700 zcmd^mdvIIVdFMIzjSJx7b#Vc{z)JuGNCE`k04-4zL{g%j6h%=ADa#Zf5|m`|WsDKjgyT#S#LT`nRb)Sbkc2- ziq!tj1xQh{+@#t3w-E0=ukW76_dee_8r?z2CwmB?gd^<75s|ktsCkyM+`-{e`S#nY zM)8TC_Pltzb|V)glVqMukpg*yG~+!*&XHx*ECN6yBd9q;E|3|Lw`vS>95st%2~hK7 zj+ms4q)01Z|G9q9%qHO?PZFLi3?4n!S6qMf$Edl9r|Jv+Pn$V2{HKS#L%P1qad(wsTK3g}THGUji?cXr|+PB4-S z^zjfc@e!T)i9rHjm}%5Fmbtz24H0sS@u{sXLx5c0mWC# z52M{``C(L8EkBH|tL2CB(Q5etWyoszVO+Oben2g^9M67iT$2L{%i}EKzw;<OQ6k=Vou z!c)qR5}v1HkYswWD%)4;!#4YycQT%>^6Qy&M|(@Mp*~boU0D&-!~Qzm*Wq=F!36D$ zcX)IuQWuVOc{(J&ZnUR;?M4la#3Eri($$&n5W6}PG+aY@k^btxR{Ot%}{4XHTP zy;kfV`l9fOw_b>L4}EXw>b3pf8|vns4ekwU>fYejCoWImk4{tu*I(%#9`2@NruV@Y zUf_a5-OtU>zKMyeCr?7N+`4sZMQGve;5ip?+(M3JM{0DA@-9lK z=5*Kuj#T?OffEM7-U8u-St7|mmc-{6?*qv>B8Z|eN(4b1BcdQ4^te-rSfnE0uJzRV zd|pKiB&e=YYZcUA*Odv-`ns?rdvqgH*Pf1hI%5H#L=jKmt zoS-!{bn}v|QisGpE<31tq_h6!rD&RV*7J|ocXFQQUas$WHoLz5%k!^})0)qy%GwDA zr*NNBRPWk}`c9gTa-U;~C8f7M&0pthNF!+{1KC~m(MWYwrNq<5SVh2a^F-lzm*$j2 zK_VPK$XH{Z@EkucK&Nx_5cKIpQ%kC;J<)E~R*0fML1jq}$Z^RVj%Q*m6n|Yi zX*?51@1z|8BajKmMlBWF)14_Qg(!dhiXvnVf52vB7P{@m<)JRhV+xlpY3ZRWh8>lf z=gM$elCG@p+I{-;wJ9z~RCX z|JDls8F&JAXwxX!L5`8raONH(&tyOJAa&WMs6*LzA1A6QN(G;TlX2U0OjU1^B1fo&D;rF^hsf^525<{|~2mDMw#X*gBBd$x( zTM%=oEkoR(3M9ZHAt;!E02ow`Z%|TZVq$fKdU50HOb6uO>UIZZ-3GP{_Yc=a%^_Zw zH2b*fR;a2uo=}w=ifX;M|7?-$b%*2XCtN9z!1cVU+rQGX{`o7PC=nTD#~US5zV4v2 zs`4uP6tDGfscsd2e}%49@fr00k?W%B7M~GSt!4vAy#Q!{4O?V+5(Gm0l&FI;ih zztT!a)aOftfBve&@kZ+vM&36Zee5Gll{Re5Q$2ZIv}+Q3L6Fu{AI`Az{lfsHbzr{P`h^){VKxk66D8Bu+C{`m2 z=-nt%!OBZ$atnX?wxn@GYb~+@$#*E+x6pygY3t9d-zqJMXIEUU}}rpM52&?3p>< z6CHd1*qx;^eV*ig&SxP;wIo6Q`)fS*dCcqZL0vWwSri1hz)T^CHVbSqL&@cdDDq=a zlaMM(opfK-fnosgjSOCtVMc$A52`l?*!lswn|t>tBJ^w95b1#2k)jZA7wv$E zK1N@9EY0;@{pjTZj^3Df@}2dszw_iolhJyz)9V;LS?QfN)CWhiBlOKZd)6zpWK&a8 z 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 F{|lQN_euZ& diff --git a/fonts/codex_editor/codex-editor.svg b/fonts/codex_editor/codex-editor.svg deleted file mode 100755 index 1ae6cabc..00000000 --- a/fonts/codex_editor/codex-editor.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - -Copyright (C) 2016 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/codex_editor/codex-editor.ttf b/fonts/codex_editor/codex-editor.ttf deleted file mode 100755 index e6c702655e0e7bad83e29db1ab427056d4debb03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15516 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 diff --git a/fonts/codex_editor/codex-editor.woff2 b/fonts/codex_editor/codex-editor.woff2 deleted file mode 100755 index 15066535ff919541d1ba9589a3a5dc059f6c6fcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8176 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 - - - - - - \ No newline at end of file diff --git a/plugins/attaches/file-icon-black.svg b/plugins/attaches/file-icon-black.svg deleted file mode 100644 index 0a559b7e..00000000 --- a/plugins/attaches/file-icon-black.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/attaches/file-icon-white.svg b/plugins/attaches/file-icon-white.svg deleted file mode 100644 index 87a6039e..00000000 --- a/plugins/attaches/file-icon-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/server/index.php b/server/index.php deleted file mode 100644 index e6286c87..00000000 --- a/server/index.php +++ /dev/null @@ -1,95 +0,0 @@ -loadHTML($html); - $nodes = $doc->getElementsByTagName('title'); - - $title = $nodes->item(0)->nodeValue; - $description = ""; - $keywords = ""; - $image = ""; - - $metas = $doc->getElementsByTagName('meta'); - - for ($i = 0; $i < $metas->length; $i++) - { - $meta = $metas->item($i); - if($meta->getAttribute('name') == 'description') - $description = $meta->getAttribute('content'); - if($meta->getAttribute('name') == 'keywords') - $keywords = $meta->getAttribute('content'); - if($meta->getAttribute('property')=='og:image'){ - $image = $meta->getAttribute('content'); - } - } - - return [ - 'image' => $image, - 'title' => $title, - 'description' => $description - ]; -} - -$url = get_url(); - -$url_params = parse_url($url); - -if (!$url) -{ - exit(0); -} - -$html = file_get_contents_curl($url); - -$result = get_meta_from_html($html); - -$result = array_merge( - - get_meta_from_html($html), - - array( - 'linkUrl' => $url, - 'linkText' => $url_params["host"] . isset($url_params["path"])?$url_params["path"]:"", - ) - -); - -echo json_encode($result); - -?> diff --git a/fonts/codex_editor/icon-hash.svg b/src/assets/icon-hash.svg similarity index 100% rename from fonts/codex_editor/icon-hash.svg rename to src/assets/icon-hash.svg diff --git a/fonts/codex_editor/icon-plus.svg b/src/assets/icon-plus.svg similarity index 100% rename from fonts/codex_editor/icon-plus.svg rename to src/assets/icon-plus.svg diff --git a/codex.js b/src/codex.js similarity index 100% rename from codex.js rename to src/codex.js diff --git a/src/styles/main.css b/src/styles/main.css new file mode 100644 index 00000000..e69de29b