sk-front-lib 0.14.8 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/package.json +5 -6
- package/api/sk-api.module.d.ts +7 -0
- package/api/sk-api.service.d.ts +3 -0
- package/api/sk-front-lib-api.d.ts +1 -0
- package/article/package.json +5 -6
- package/article/sk-article-editor-server.component.d.ts +3 -0
- package/article/sk-article-editor.component.d.ts +3 -0
- package/article/sk-article-server.module.d.ts +6 -0
- package/article/sk-article.module.d.ts +7 -0
- package/article/sk-article.service.d.ts +3 -0
- package/article/sk-froala-editor.directive.d.ts +3 -0
- package/article/sk-front-lib-article.d.ts +1 -0
- package/crud/package.json +5 -6
- package/crud/sk-account.service.d.ts +3 -0
- package/crud/sk-auth-admin.guard.d.ts +3 -0
- package/crud/sk-auth.guard.d.ts +3 -0
- package/crud/sk-auth.service.d.ts +3 -0
- package/crud/sk-board.service.d.ts +3 -0
- package/crud/sk-brand.service.d.ts +3 -0
- package/crud/sk-cart.service.d.ts +7 -0
- package/crud/sk-category.service.d.ts +3 -0
- package/crud/sk-comment.service.d.ts +3 -0
- package/crud/sk-config.service.d.ts +3 -0
- package/crud/sk-contact.service.d.ts +3 -0
- package/crud/sk-coupon.service.d.ts +3 -0
- package/crud/sk-document.service.d.ts +3 -0
- package/crud/sk-etc.service.d.ts +3 -0
- package/crud/sk-file.service.d.ts +3 -0
- package/crud/sk-front-lib-crud.d.ts +1 -1
- package/crud/sk-keyword.service.d.ts +3 -0
- package/crud/sk-order.service.d.ts +3 -0
- package/crud/sk-point.service.d.ts +3 -0
- package/crud/sk-product.service.d.ts +4 -0
- package/crud/sk-promotion.service.d.ts +3 -0
- package/crud/sk-search.service.d.ts +3 -0
- package/crud/sk-store.service.d.ts +3 -0
- package/crud/sk-user.service.d.ts +3 -0
- package/{esm2015/api/model/api-config.js → esm2020/api/model/api-config.mjs} +0 -0
- package/{esm2015/api/model/api-pageable-param.js → esm2020/api/model/api-pageable-param.mjs} +0 -0
- package/{esm2015/api/model/api-pageable.js → esm2020/api/model/api-pageable.mjs} +0 -0
- package/{esm2015/api/model/api-response.js → esm2020/api/model/api-response.mjs} +0 -0
- package/{esm2015/api/model/index.js → esm2020/api/model/index.mjs} +0 -0
- package/{esm2015/api/public_api.js → esm2020/api/public_api.mjs} +0 -0
- package/esm2020/api/sk-api.module.mjs +35 -0
- package/esm2020/api/sk-api.service.mjs +145 -0
- package/{esm2015/api/sk-front-lib-api.js → esm2020/api/sk-front-lib-api.mjs} +0 -0
- package/{esm2015/article/public_api.js → esm2020/article/public_api.mjs} +0 -0
- package/esm2020/article/sk-article-editor-server.component.mjs +51 -0
- package/esm2020/article/sk-article-editor.component.mjs +93 -0
- package/esm2020/article/sk-article-server.module.mjs +33 -0
- package/esm2020/article/sk-article.module.mjs +32 -0
- package/esm2020/article/sk-article.service.mjs +248 -0
- package/esm2020/article/sk-froala-editor.directive.mjs +325 -0
- package/{esm2015/article/sk-front-lib-article.js → esm2020/article/sk-front-lib-article.mjs} +0 -0
- package/{esm2015/crud/public_api.js → esm2020/crud/public_api.mjs} +0 -0
- package/esm2020/crud/sk-account.service.mjs +36 -0
- package/esm2020/crud/sk-auth-admin.guard.mjs +31 -0
- package/esm2020/crud/sk-auth.guard.mjs +31 -0
- package/esm2020/crud/sk-auth.service.mjs +67 -0
- package/esm2020/crud/sk-board.service.mjs +54 -0
- package/esm2020/crud/sk-brand.service.mjs +46 -0
- package/esm2020/crud/sk-cart.service.mjs +255 -0
- package/esm2020/crud/sk-category.service.mjs +63 -0
- package/esm2020/crud/sk-comment.service.mjs +43 -0
- package/esm2020/crud/sk-config.service.mjs +31 -0
- package/esm2020/crud/sk-contact.service.mjs +39 -0
- package/esm2020/crud/sk-coupon.service.mjs +62 -0
- package/esm2020/crud/sk-document.service.mjs +95 -0
- package/esm2020/crud/sk-etc.service.mjs +25 -0
- package/esm2020/crud/sk-file.service.mjs +37 -0
- package/esm2020/crud/sk-front-lib-crud.mjs +5 -0
- package/esm2020/crud/sk-keyword.service.mjs +46 -0
- package/esm2020/crud/sk-order.service.mjs +133 -0
- package/esm2020/crud/sk-point.service.mjs +45 -0
- package/esm2020/crud/sk-product.service.mjs +156 -0
- package/esm2020/crud/sk-promotion.service.mjs +81 -0
- package/esm2020/crud/sk-search.service.mjs +25 -0
- package/esm2020/crud/sk-store.service.mjs +47 -0
- package/esm2020/crud/sk-user.service.mjs +69 -0
- package/esm2020/google-analytics/google-analytics-router.module.mjs +30 -0
- package/esm2020/google-analytics/google-analytics.module.mjs +40 -0
- package/esm2020/google-analytics/initializers/google-analytics-router.initializer.mjs +24 -0
- package/esm2020/google-analytics/initializers/google-analytics.initializer.mjs +46 -0
- package/{esm2015/google-analytics/interfaces/google-analytics-command.js → esm2020/google-analytics/interfaces/google-analytics-command.mjs} +0 -0
- package/{esm2015/google-analytics/interfaces/google-analytics-settings.js → esm2020/google-analytics/interfaces/google-analytics-settings.mjs} +0 -0
- package/{esm2015/google-analytics/public_api.js → esm2020/google-analytics/public_api.mjs} +0 -0
- package/esm2020/google-analytics/services/google-analytics.service.mjs +200 -0
- package/{esm2015/google-analytics/sk-front-lib-google-analytics.js → esm2020/google-analytics/sk-front-lib-google-analytics.mjs} +0 -0
- package/{esm2015/google-analytics/tokens/google-analytics-settings-token.js → esm2020/google-analytics/tokens/google-analytics-settings-token.mjs} +0 -0
- package/{esm2015/google-analytics/types/ga-action.type.js → esm2020/google-analytics/types/ga-action.type.mjs} +0 -0
- package/{esm2015/google-analytics/types/ga-bind.type.js → esm2020/google-analytics/types/ga-bind.type.mjs} +0 -0
- package/esm2020/image/public_api.mjs +3 -0
- package/esm2020/image/sk-front-lib-image.mjs +5 -0
- package/esm2020/image/sk-image.component.mjs +262 -0
- package/esm2020/image/sk-image.module.mjs +43 -0
- package/{esm2015/lib/sk-animations.js → esm2020/lib/sk-animations.mjs} +0 -0
- package/esm2020/lib/sk-byte.pipe.mjs +18 -0
- package/esm2020/lib/sk-date-time.pipe.mjs +16 -0
- package/esm2020/lib/sk-date.pipe.mjs +16 -0
- package/esm2020/lib/sk-front-lib.module.mjs +42 -0
- package/esm2020/lib/sk-keys.pipe.mjs +23 -0
- package/esm2020/lib/sk-time.pipe.mjs +16 -0
- package/{esm2015/lib/sk-utils.js → esm2020/lib/sk-utils.mjs} +0 -0
- package/{esm2015/model/lib/article.js → esm2020/model/lib/article.mjs} +0 -0
- package/{esm2015/model/lib/audit.js → esm2020/model/lib/audit.mjs} +0 -0
- package/{esm2015/model/lib/auth.js → esm2020/model/lib/auth.mjs} +0 -0
- package/{esm2015/model/lib/board.js → esm2020/model/lib/board.mjs} +0 -0
- package/{esm2015/model/lib/cart.js → esm2020/model/lib/cart.mjs} +0 -0
- package/{esm2015/model/lib/comment.js → esm2020/model/lib/comment.mjs} +0 -0
- package/{esm2015/model/lib/contact.js → esm2020/model/lib/contact.mjs} +0 -0
- package/{esm2015/model/lib/coupon.js → esm2020/model/lib/coupon.mjs} +0 -0
- package/{esm2015/model/lib/document.js → esm2020/model/lib/document.mjs} +0 -0
- package/{esm2015/model/lib/etc.js → esm2020/model/lib/etc.mjs} +0 -0
- package/{esm2015/model/lib/file.js → esm2020/model/lib/file.mjs} +0 -0
- package/{esm2015/model/lib/filetype.js → esm2020/model/lib/filetype.mjs} +0 -0
- package/{esm2015/model/lib/grid.js → esm2020/model/lib/grid.mjs} +0 -0
- package/{esm2015/model/lib/nicepay.js → esm2020/model/lib/nicepay.mjs} +0 -0
- package/{esm2015/model/lib/order.js → esm2020/model/lib/order.mjs} +0 -0
- package/{esm2015/model/lib/payment.js → esm2020/model/lib/payment.mjs} +0 -0
- package/{esm2015/model/lib/point.js → esm2020/model/lib/point.mjs} +0 -0
- package/{esm2015/model/lib/product-series.js → esm2020/model/lib/product-series.mjs} +0 -0
- package/{esm2015/model/lib/product.js → esm2020/model/lib/product.mjs} +1 -1
- package/esm2020/model/lib/promotion.mjs +79 -0
- package/{esm2015/model/lib/shipping.js → esm2020/model/lib/shipping.mjs} +0 -0
- package/{esm2015/model/lib/user.js → esm2020/model/lib/user.mjs} +0 -0
- package/{esm2015/model/public_api.js → esm2020/model/public_api.mjs} +0 -0
- package/{esm2015/model/sk-front-lib-model.js → esm2020/model/sk-front-lib-model.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -1
- package/esm2020/search-address/dialog/dialog.component.mjs +27 -0
- package/{esm2015/search-address/public_api.js → esm2020/search-address/public_api.mjs} +0 -0
- package/esm2020/search-address/sk-front-lib-search-address.mjs +5 -0
- package/esm2020/search-address/sk-search-address.directive.mjs +41 -0
- package/{esm2015/search-address/sk-search-address.model.js → esm2020/search-address/sk-search-address.model.mjs} +0 -0
- package/esm2020/search-address/sk-search-address.module.mjs +52 -0
- package/{esm2015/search-address/sk-search-address.service.js → esm2020/search-address/sk-search-address.service.mjs} +10 -8
- package/esm2020/sk-front-lib.mjs +5 -0
- package/{esm2015/uploader/public_api.js → esm2020/uploader/public_api.mjs} +0 -0
- package/esm2020/uploader/sk-front-lib-uploader.mjs +5 -0
- package/{esm2015/uploader/sk-uploader-file-item.model.js → esm2020/uploader/sk-uploader-file-item.model.mjs} +0 -0
- package/{esm2015/uploader/sk-uploader.animation.js → esm2020/uploader/sk-uploader.animation.mjs} +0 -0
- package/{esm2015/uploader/sk-uploader.class.js → esm2020/uploader/sk-uploader.class.mjs} +0 -0
- package/esm2020/uploader/sk-uploader.component.mjs +120 -0
- package/esm2020/uploader/sk-uploader.directive.mjs +44 -0
- package/esm2020/uploader/sk-uploader.module.mjs +62 -0
- package/fesm2015/sk-front-lib-api.mjs +218 -0
- package/fesm2015/sk-front-lib-api.mjs.map +1 -0
- package/fesm2015/{sk-front-lib-article.js → sk-front-lib-article.mjs} +183 -158
- package/fesm2015/sk-front-lib-article.mjs.map +1 -0
- package/fesm2015/sk-front-lib-crud.mjs +1403 -0
- package/fesm2015/sk-front-lib-crud.mjs.map +1 -0
- package/fesm2015/{sk-front-lib-google-analytics.js → sk-front-lib-google-analytics.mjs} +54 -33
- package/fesm2015/sk-front-lib-google-analytics.mjs.map +1 -0
- package/fesm2015/{sk-front-lib-image.js → sk-front-lib-image.mjs} +64 -48
- package/fesm2015/sk-front-lib-image.mjs.map +1 -0
- package/fesm2015/{sk-front-lib-model.js → sk-front-lib-model.mjs} +9 -2
- package/fesm2015/sk-front-lib-model.mjs.map +1 -0
- package/fesm2015/sk-front-lib-search-address.mjs +188 -0
- package/fesm2015/sk-front-lib-search-address.mjs.map +1 -0
- package/fesm2015/sk-front-lib-uploader.mjs +551 -0
- package/fesm2015/sk-front-lib-uploader.mjs.map +1 -0
- package/fesm2015/{sk-front-lib.js → sk-front-lib.mjs} +69 -41
- package/fesm2015/sk-front-lib.mjs.map +1 -0
- package/{fesm2015/sk-front-lib-api.js → fesm2020/sk-front-lib-api.mjs} +41 -26
- package/fesm2020/sk-front-lib-api.mjs.map +1 -0
- package/fesm2020/sk-front-lib-article.mjs +771 -0
- package/fesm2020/sk-front-lib-article.mjs.map +1 -0
- package/{fesm2015/sk-front-lib-crud.js → fesm2020/sk-front-lib-crud.mjs} +213 -236
- package/fesm2020/sk-front-lib-crud.mjs.map +1 -0
- package/fesm2020/sk-front-lib-google-analytics.mjs +336 -0
- package/fesm2020/sk-front-lib-google-analytics.mjs.map +1 -0
- package/fesm2020/sk-front-lib-image.mjs +309 -0
- package/fesm2020/sk-front-lib-image.mjs.map +1 -0
- package/fesm2020/sk-front-lib-model.mjs +1052 -0
- package/fesm2020/sk-front-lib-model.mjs.map +1 -0
- package/fesm2020/sk-front-lib-search-address.mjs +186 -0
- package/fesm2020/sk-front-lib-search-address.mjs.map +1 -0
- package/fesm2020/sk-front-lib-uploader.mjs +549 -0
- package/fesm2020/sk-front-lib-uploader.mjs.map +1 -0
- package/fesm2020/sk-front-lib.mjs +539 -0
- package/fesm2020/sk-front-lib.mjs.map +1 -0
- package/google-analytics/google-analytics-router.module.d.ts +6 -0
- package/google-analytics/google-analytics.module.d.ts +5 -0
- package/google-analytics/package.json +5 -6
- package/google-analytics/services/google-analytics.service.d.ts +3 -0
- package/google-analytics/sk-front-lib-google-analytics.d.ts +1 -0
- package/image/package.json +5 -6
- package/image/public_api.d.ts +1 -0
- package/image/sk-front-lib-image.d.ts +1 -1
- package/image/sk-image.component.d.ts +6 -3
- package/image/sk-image.module.d.ts +10 -0
- package/lib/sk-byte.pipe.d.ts +3 -0
- package/lib/sk-date-time.pipe.d.ts +3 -0
- package/lib/sk-date.pipe.d.ts +3 -0
- package/lib/sk-front-lib.module.d.ts +9 -0
- package/lib/sk-keys.pipe.d.ts +3 -0
- package/lib/sk-time.pipe.d.ts +3 -0
- package/model/lib/product.d.ts +1 -0
- package/model/lib/promotion.d.ts +12 -1
- package/model/package.json +5 -6
- package/model/sk-front-lib-model.d.ts +1 -0
- package/package.json +96 -20
- package/public-api.d.ts +1 -0
- package/search-address/dialog/dialog.component.d.ts +3 -0
- package/search-address/package.json +5 -6
- package/search-address/sk-front-lib-search-address.d.ts +1 -2
- package/search-address/sk-search-address.directive.d.ts +3 -0
- package/search-address/sk-search-address.module.d.ts +12 -0
- package/search-address/sk-search-address.service.d.ts +3 -0
- package/sk-front-lib.d.ts +1 -1
- package/uploader/package.json +5 -6
- package/uploader/sk-front-lib-uploader.d.ts +1 -1
- package/uploader/sk-uploader.component.d.ts +3 -0
- package/uploader/sk-uploader.directive.d.ts +3 -0
- package/uploader/sk-uploader.module.d.ts +14 -0
- package/api/sk-front-lib-api.metadata.json +0 -1
- package/article/sk-front-lib-article.metadata.json +0 -1
- package/bundles/sk-front-lib-api.umd.js +0 -230
- package/bundles/sk-front-lib-api.umd.js.map +0 -1
- package/bundles/sk-front-lib-api.umd.min.js +0 -2
- package/bundles/sk-front-lib-api.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-article.umd.js +0 -772
- package/bundles/sk-front-lib-article.umd.js.map +0 -1
- package/bundles/sk-front-lib-article.umd.min.js +0 -2
- package/bundles/sk-front-lib-article.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-crud.umd.js +0 -1846
- package/bundles/sk-front-lib-crud.umd.js.map +0 -1
- package/bundles/sk-front-lib-crud.umd.min.js +0 -2
- package/bundles/sk-front-lib-crud.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-google-analytics.umd.js +0 -673
- package/bundles/sk-front-lib-google-analytics.umd.js.map +0 -1
- package/bundles/sk-front-lib-google-analytics.umd.min.js +0 -16
- package/bundles/sk-front-lib-google-analytics.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-image.umd.js +0 -312
- package/bundles/sk-front-lib-image.umd.js.map +0 -1
- package/bundles/sk-front-lib-image.umd.min.js +0 -2
- package/bundles/sk-front-lib-image.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-model.umd.js +0 -1464
- package/bundles/sk-front-lib-model.umd.js.map +0 -1
- package/bundles/sk-front-lib-model.umd.min.js +0 -16
- package/bundles/sk-front-lib-model.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-search-address.umd.js +0 -182
- package/bundles/sk-front-lib-search-address.umd.js.map +0 -1
- package/bundles/sk-front-lib-search-address.umd.min.js +0 -2
- package/bundles/sk-front-lib-search-address.umd.min.js.map +0 -1
- package/bundles/sk-front-lib-uploader.umd.js +0 -534
- package/bundles/sk-front-lib-uploader.umd.js.map +0 -1
- package/bundles/sk-front-lib-uploader.umd.min.js +0 -2
- package/bundles/sk-front-lib-uploader.umd.min.js.map +0 -1
- package/bundles/sk-front-lib.umd.js +0 -546
- package/bundles/sk-front-lib.umd.js.map +0 -1
- package/bundles/sk-front-lib.umd.min.js +0 -2
- package/bundles/sk-front-lib.umd.min.js.map +0 -1
- package/crud/sk-front-lib-crud.metadata.json +0 -1
- package/esm2015/api/sk-api.module.js +0 -24
- package/esm2015/api/sk-api.service.js +0 -144
- package/esm2015/article/sk-article-editor-server.component.js +0 -54
- package/esm2015/article/sk-article-editor.component.js +0 -85
- package/esm2015/article/sk-article-server.module.js +0 -26
- package/esm2015/article/sk-article.module.js +0 -23
- package/esm2015/article/sk-article.service.js +0 -235
- package/esm2015/article/sk-froala-editor.directive.js +0 -320
- package/esm2015/crud/sk-account.service.js +0 -38
- package/esm2015/crud/sk-auth-admin.guard.js +0 -35
- package/esm2015/crud/sk-auth.guard.js +0 -35
- package/esm2015/crud/sk-auth.service.js +0 -71
- package/esm2015/crud/sk-board.service.js +0 -55
- package/esm2015/crud/sk-brand.service.js +0 -47
- package/esm2015/crud/sk-cart.service.js +0 -260
- package/esm2015/crud/sk-category.service.js +0 -64
- package/esm2015/crud/sk-comment.service.js +0 -44
- package/esm2015/crud/sk-config.service.js +0 -33
- package/esm2015/crud/sk-contact.service.js +0 -40
- package/esm2015/crud/sk-coupon.service.js +0 -63
- package/esm2015/crud/sk-document.service.js +0 -96
- package/esm2015/crud/sk-etc.service.js +0 -27
- package/esm2015/crud/sk-file.service.js +0 -38
- package/esm2015/crud/sk-front-lib-crud.js +0 -6
- package/esm2015/crud/sk-keyword.service.js +0 -47
- package/esm2015/crud/sk-order.service.js +0 -134
- package/esm2015/crud/sk-point.service.js +0 -46
- package/esm2015/crud/sk-product.service.js +0 -154
- package/esm2015/crud/sk-promotion.service.js +0 -82
- package/esm2015/crud/sk-search.service.js +0 -26
- package/esm2015/crud/sk-store.service.js +0 -48
- package/esm2015/crud/sk-user.service.js +0 -70
- package/esm2015/google-analytics/google-analytics-router.module.js +0 -19
- package/esm2015/google-analytics/google-analytics.module.js +0 -33
- package/esm2015/google-analytics/initializers/google-analytics-router.initializer.js +0 -25
- package/esm2015/google-analytics/initializers/google-analytics.initializer.js +0 -47
- package/esm2015/google-analytics/services/google-analytics.service.js +0 -199
- package/esm2015/image/public_api.js +0 -2
- package/esm2015/image/sk-front-lib-image.js +0 -6
- package/esm2015/image/sk-image.component.js +0 -258
- package/esm2015/image/sk-image.module.js +0 -28
- package/esm2015/lib/sk-byte.pipe.js +0 -14
- package/esm2015/lib/sk-date-time.pipe.js +0 -12
- package/esm2015/lib/sk-date.pipe.js +0 -12
- package/esm2015/lib/sk-front-lib.module.js +0 -29
- package/esm2015/lib/sk-keys.pipe.js +0 -19
- package/esm2015/lib/sk-time.pipe.js +0 -12
- package/esm2015/model/lib/promotion.js +0 -72
- package/esm2015/search-address/dialog/dialog.component.js +0 -28
- package/esm2015/search-address/sk-front-lib-search-address.js +0 -7
- package/esm2015/search-address/sk-search-address.directive.js +0 -39
- package/esm2015/search-address/sk-search-address.module.js +0 -34
- package/esm2015/sk-front-lib.js +0 -6
- package/esm2015/uploader/sk-front-lib-uploader.js +0 -6
- package/esm2015/uploader/sk-uploader.component.js +0 -106
- package/esm2015/uploader/sk-uploader.directive.js +0 -40
- package/esm2015/uploader/sk-uploader.module.js +0 -39
- package/fesm2015/sk-front-lib-api.js.map +0 -1
- package/fesm2015/sk-front-lib-article.js.map +0 -1
- package/fesm2015/sk-front-lib-crud.js.map +0 -1
- package/fesm2015/sk-front-lib-google-analytics.js.map +0 -1
- package/fesm2015/sk-front-lib-image.js.map +0 -1
- package/fesm2015/sk-front-lib-model.js.map +0 -1
- package/fesm2015/sk-front-lib-search-address.js +0 -166
- package/fesm2015/sk-front-lib-search-address.js.map +0 -1
- package/fesm2015/sk-front-lib-uploader.js +0 -510
- package/fesm2015/sk-front-lib-uploader.js.map +0 -1
- package/fesm2015/sk-front-lib.js.map +0 -1
- package/google-analytics/sk-front-lib-google-analytics.metadata.json +0 -1
- package/image/sk-front-lib-image.metadata.json +0 -1
- package/model/sk-front-lib-model.metadata.json +0 -1
- package/search-address/sk-front-lib-search-address.metadata.json +0 -1
- package/sk-front-lib.metadata.json +0 -1
- package/uploader/sk-front-lib-uploader.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sk-front-lib-article.umd.js","sources":["../../../projects/sk-front-lib/article/src/sk-article.service.ts","../../../projects/sk-front-lib/article/src/sk-article-editor.component.ts","../../../projects/sk-front-lib/article/src/sk-froala-editor.directive.ts","../../../projects/sk-front-lib/article/src/sk-article.module.ts","../../../projects/sk-front-lib/article/src/sk-article-editor-server.component.ts","../../../projects/sk-front-lib/article/src/sk-article-server.module.ts","../../../projects/sk-front-lib/article/src/sk-front-lib-article.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\n\nimport FroalaEditor from 'froala-editor';\nimport 'froala-editor/js/plugins.pkgd.min.js';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SkArticleService {\n\n constructor(@Inject('environment') public environment: any) {\n this.initializeFroala();\n }\n\n initializeFroala() {\n FroalaEditor.DefineIconTemplate('material_design', '<i class=\"material-icons\">[NAME]</i>');\n\n this.loadFontWeight();\n this.registerShortcuts();\n }\n\n loadFontWeight() {\n // Define an icon.\n FroalaEditor.DefineIcon('font-weight', {NAME: 'format_size', template: 'material_design'});\n\n // Define a dropdown button.\n FroalaEditor.RegisterCommand('font-weight-drop', {\n // Button title.\n title: 'Font Weight',\n\n // Mark the button as a dropdown.\n type: 'dropdown',\n\n // Specify the icon for the button.\n // If this option is not specified, the button name will be used.\n icon: 'font-weight',\n\n // Options for the dropdown.\n options: {\n 100: 'Thin',\n 300: 'Light',\n 400: 'Regular',\n 500: 'Medium',\n 700: 'Bold',\n 900: 'Black'\n },\n\n // If present, the options property will be ignored.\n // It can be used to define a custom HTML for the dropdown.\n // html: function () {\n // // The current context is the editor instance.\n // return '';\n // },\n\n // Save the dropdown action into undo stack.\n undo: true,\n\n // Focus inside the editor before callback.\n focus: true,\n\n // Refresh the button state after the callback.\n refreshAfterCallback: true,\n\n // Callback.\n callback(cmd, val, params) {\n this.format.removeStyle('font-weight');\n this.format.applyStyle('font-weight', val);\n },\n\n // Called when the dropdown button state might have changed.\n // refresh: function ($btn) {\n // // The current context is the editor instance.\n // console.log (this.selection.element());\n // console.log(this);\n // },\n\n // Called when the dropdown is shown.\n // refreshOnShow: function ($btn, $dropdown) {\n // // The current context is the editor instance.\n // console.log (this.selection.element());\n // }\n });\n }\n\n registerShortcuts() {\n FroalaEditor.RegisterShortcut(49, 'paragraphFormat', 'H1', '1', false);\n FroalaEditor.RegisterShortcut(50, 'paragraphFormat', 'H2', '2', false);\n FroalaEditor.RegisterShortcut(51, 'paragraphFormat', 'H3', '3', false);\n FroalaEditor.RegisterShortcut(52, 'paragraphFormat', 'N', '4', false);\n FroalaEditor.RegisterShortcut(66, 'font-weight-drop', '700');\n }\n\n getBaseConfig() {\n return {\n key: 'Ig1A7vB2D2E2E1F1B4muvugzxmwA-7I-7A5B-21qrC-11A2B2C2A1C9B3B3C6E2C1==',\n editorClass: 'sk-custom',\n fontFamily: {\n 'Noto Sans KR, Noto Sans, Arial,Helvetica,sans-serif': 'Noto Sans',\n 'Roboto, Arial,Helvetica,sans-serif': 'Roboto',\n 'Georgia,serif': 'Georgia',\n 'Impact,Charcoal,sans-serif': 'Impact',\n 'Tahoma,Geneva,sans-serif': 'Tahoma',\n '\\'Times New Roman\\',Times,serif': 'Times New Roman',\n 'Verdana,Geneva,sans-serif': 'Verdana'\n },\n imageDefaultWidth: 0,\n // remove image manager\n // imageInsertButtons: ['imageBack', '|', 'imageUpload', 'imageByURL', 'imageManager'],\n imageInsertButtons: ['imageBack', '|', 'imageUpload', 'imageByURL'],\n imageEditButtons: ['imageAlign', 'imageCaption', 'imageRemove', '|', 'imageLink', 'linkOpen', 'linkEdit', 'linkRemove', '-', 'imageDisplay', 'imageStyle', 'imageAlt', 'imageSize'],\n imageAllowedTypes: ['jpeg', 'jpg', 'png', 'gif'],\n\n // remove video upload\n // ['videoBack', '|', 'videoByURL', 'videoEmbed', 'videoUpload']\n videoInsertButtons: ['videoBack', '|', 'videoByURL', 'videoEmbed'],\n videoUpload: false,\n videoResponsive: true,\n\n pastePlain: true,\n pasteDeniedAttrs: ['class', 'id', 'style'],\n pasteDeniedTags: ['div'],\n wordPasteKeepFormatting: false,\n imagePaste: false,\n\n quickInsertEnabled: false,\n\n paragraphFormat: {\n H1: '대제목',\n H2: '소제목',\n H3: '문단 제목',\n N: '본문'\n },\n\n // toolbarContainer: '.sk-custom-editor-toolbar',\n toolbarSticky: false,\n toolbarBottom: false,\n\n\n attribution: false,\n\n helpSets: [\n {\n title: 'Gearlounge Custom',\n commands: [\n {val: 'OSkey1', desc: '대제목'},\n {val: 'OSkey2', desc: '소제목'},\n {val: 'OSkey3', desc: '문단 제목'},\n {val: 'OSkey4', desc: '본문'}\n ]\n },\n {\n title: 'Inline Editor',\n commands: [\n {val: 'OSkeyE', desc: 'Show the editor'}\n ]\n },\n {\n title: 'Common actions',\n commands: [\n {val: 'OSkeyC', desc: 'Copy'},\n {val: 'OSkeyX', desc: 'Cut'},\n {val: 'OSkeyV', desc: 'Paste'},\n {val: 'OSkeyZ', desc: 'Undo'},\n {val: 'OSkeyShift+Z', desc: 'Redo'},\n {val: 'OSkeyK', desc: 'Insert Link'},\n {val: 'OSkeyP', desc: 'Insert Image'}\n ]\n },\n {\n title: 'Basic Formatting',\n commands: [\n {val: 'OSkeyA', desc: 'Select All'},\n {val: 'OSkeyB', desc: 'Bold'},\n {val: 'OSkeyI', desc: 'Italic'},\n {val: 'OSkeyU', desc: 'Underline'},\n {val: 'OSkeyS', desc: 'Strikethrough'},\n {val: 'OSkey]', desc: 'Increase Indent'},\n {val: 'OSkey[', desc: 'Decrease Indent'}\n ]\n },\n {\n title: 'Quote',\n commands: [\n {val: 'OSkey\\'', desc: 'Increase quote level'},\n {val: 'OSkeyShift+\\'', desc: 'Decrease quote level'}\n ]\n },\n {\n title: 'Image / Video',\n commands: [\n {val: 'OSkey+', desc: 'Resize larger'},\n {val: 'OSkey-', desc: 'Resize smaller'}\n ]\n },\n {\n title: 'Table',\n commands: [\n {val: 'Alt+Space', desc: 'Select table cell'},\n {val: 'Shift+Left/Right arrow', desc: 'Extend selection one cell'},\n {val: 'Shift+Up/Down arrow', desc: 'Extend selection one row'}\n ]\n },\n {\n title: 'Navigation',\n commands: [\n {val: 'OSkey/', desc: 'Shortcuts'},\n {val: 'Alt+F10', desc: 'Focus popup / toolbar'},\n {val: 'Esc', desc: 'Return focus to previous position'}\n ]\n }\n ],\n };\n }\n\n getToolbar(type: string = 'default') {\n if (type === 'default') {\n return {\n toolbarButtons: {\n moreText: {\n buttons: ['font-weight-drop', 'fontFamily', 'fontSize', 'textColor', 'clearFormatting', 'italic', 'strikeThrough', 'subscript', 'superscript', 'backgroundColor', 'inlineClass', 'inlineStyle'],\n buttonsVisible: 5\n },\n moreParagraph: {\n buttons: ['paragraphFormat', 'alignLeft', 'alignCenter', 'formatUL', 'quote', 'alignRight', 'alignJustify', 'formatOLSimple', 'formatOL', 'paragraphStyle', 'lineHeight', 'outdent', 'indent'],\n buttonsVisible: 5\n },\n moreRich: {\n buttons: ['insertLink', 'insertImage', 'insertVideo', 'insertHR', 'insertTable', 'emoticons', 'fontAwesome', 'specialCharacters', 'embedly', 'insertFile'],\n buttonsVisible: 4\n },\n moreMisc: {\n buttons: ['undo', 'redo', 'fullscreen', 'print', 'getPDF', 'spellChecker', 'selectAll', 'html', 'help'],\n align: 'right',\n buttonsVisible: 3\n }\n },\n toolbarButtonsSm: {\n moreText: {\n buttons: ['font-weight-drop', 'underline', 'strikeThrough', 'subscript', 'superscript', 'fontFamily', 'fontSize', 'textColor', 'backgroundColor', 'inlineClass', 'inlineStyle', 'clearFormatting'],\n buttonsVisible: 2\n },\n moreParagraph: {\n buttons: ['alignLeft', 'alignCenter', 'formatOLSimple', 'alignRight', 'alignJustify', 'formatOL', 'formatUL', 'paragraphFormat', 'paragraphStyle', 'lineHeight', 'outdent', 'indent', 'quote'],\n buttonsVisible: 2\n },\n moreRich: {\n buttons: ['insertLink', 'insertImage', 'insertVideo', 'insertTable', 'emoticons', 'fontAwesome', 'specialCharacters', 'embedly', 'insertFile', 'insertHR'],\n buttonsVisible: 2\n },\n moreMisc: {\n buttons: ['undo', 'redo', 'fullscreen', 'print', 'getPDF', 'spellChecker', 'selectAll', 'html', 'help'],\n align: 'right',\n buttonsVisible: 2\n }\n },\n };\n } else if (type === 'simple') {\n return {\n toolbarButtons: [['font-weight-drop', 'fontFamily', 'fontSize', 'textColor', 'clearFormatting'], ['paragraphFormat', 'alignLeft', 'alignCenter', 'formatUL', 'quote'], ['insertLink']],\n toolbarButtonsSm: [['font-weight-drop', 'fontFamily', 'fontSize', 'textColor', 'clearFormatting'], ['paragraphFormat', 'alignLeft', 'alignCenter', 'formatUL', 'quote'], ['insertLink']],\n };\n }\n\n }\n\n\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { SkApiService } from 'sk-front-lib/api';\nimport { ISkFile, SkArticle, SkFile } from 'sk-front-lib/model';\nimport { SkArticleService } from './sk-article.service';\n\n@Component({\n selector: 'sk-article-editor',\n templateUrl: './sk-article-editor.component.html',\n styleUrls: ['./sk-article-editor.component.scss']\n})\nexport class SkArticleEditorComponent implements OnInit, OnChanges {\n\n @Input() article: SkArticle;\n @Input() toolbarType: string = 'default';\n\n content: string;\n images: SkFile[];\n\n editorConfig;\n\n constructor(private _apiService: SkApiService,\n private _articleService: SkArticleService) {\n this._initOptions();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // ------------------------------------------1-----------------------------------------------------------\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n ngOnInit(): void {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this._initData();\n this._initOptions();\n }\n\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n public getData(): { content: string, images: SkFile[] } {\n return {content: this.content, images: this.images};\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n\n _initData() {\n if (!this.article) {\n return;\n }\n\n this.content = this.article.content;\n this.images = this.article.images || [];\n }\n\n _initOptions() {\n this.editorConfig = Object.assign({}, this._articleService.getBaseConfig(), {\n requestHeaders: {\n 'Authorization': 'Bearer ' + this._apiService.getToken(),\n 'ngsw-bypass': 'true'\n },\n imageUploadParams: {\n imageUrl: this._articleService.environment.apiServer + '/api/public/images/'\n },\n imageUploadParam: 'file',\n imageUploadRemoteUrls: true,\n imageUploadURL: this._articleService.environment.apiServer + '/external/froala/upload',\n\n fileUploadParams: {\n imageUrl: this._articleService.environment.apiServer + '/api/public/files/'\n },\n fileUploadParam: 'file',\n fileUploadURL: this._articleService.environment.apiServer + '/external/froala/upload',\n\n events: {\n 'image.inserted': ($img, response) => {\n this._addImage(JSON.parse(response).file);\n },\n 'image.removed': ($img) => {\n console.log($img, $img.dataset);\n for (let i = 0; i < $img.length; i++) {\n this._removeImage(Number($img[i].dataset.id));\n }\n }\n },\n ...this._articleService.getToolbar(this.toolbarType)\n });\n }\n\n _addImage(file: ISkFile) {\n this.images.push(new SkFile(file));\n }\n\n _removeImage(id: number) {\n const index = this.images.findIndex(value => value.id === id);\n if (index > -1) {\n this.images.splice(index, 1);\n }\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnDestroy,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport FroalaEditor from 'froala-editor';\n\n@Directive({\n selector: '[froalaEditor]',\n exportAs: 'froalaEditor',\n providers: [{\n provide: NG_VALUE_ACCESSOR, useExisting:\n forwardRef(() => SkFroalaEditorDirective),\n multi: true\n }]\n})\nexport class SkFroalaEditorDirective implements ControlValueAccessor, AfterViewInit, OnDestroy {\n\n constructor(el: ElementRef, private zone: NgZone) {\n\n const element: any = el.nativeElement;\n\n // check if the element is a special tag\n if (this.SPECIAL_TAGS.indexOf(element.tagName.toLowerCase()) != -1) {\n this._hasSpecialTag = true;\n }\n this._element = element;\n\n this.zone = zone;\n }\n\n // End ControlValueAccesor methods.\n\n // froalaEditor directive as input: store the editor options\n @Input() set froalaEditor(opts: any) {\n this._opts = this.clone(opts || this._opts);\n this._opts = {...this._opts};\n }\n\n // froalaModel directive as input: store initial editor content\n @Input() set froalaModel(content: any) {\n this.updateEditor(content);\n }\n\n // editor options\n private _opts: any = {\n immediateAngularModelUpdate: false,\n angularIgnoreAttrs: null\n };\n\n private _element: any;\n\n private SPECIAL_TAGS: string[] = ['img', 'button', 'input', 'a'];\n private INNER_HTML_ATTR: string = 'innerHTML';\n private _hasSpecialTag: boolean = false;\n\n // editor element\n private _editor: any;\n\n // initial editor content\n private _model: string;\n\n private _editorInitialized: boolean = false;\n\n private _oldModel: string = null;\n\n // froalaModel directive as output: update model if editor contentChanged\n @Output() froalaModelChange: EventEmitter<any> = new EventEmitter<any>();\n\n // froalaInit directive as output: send manual editor initialization\n @Output() froalaInit: EventEmitter<Object> = new EventEmitter<Object>();\n\n // Begin ControlValueAccesor methods.\n onChange = (_) => {\n }\n onTouched = () => {\n }\n\n // Form model content changed.\n writeValue(content: any): void {\n this.updateEditor(content);\n }\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // TODO: replace clone method with better possible alternate\n private clone(item) {\n const me = this;\n if (!item) {\n return item;\n } // null, undefined values check\n\n let types = [Number, String, Boolean],\n result;\n\n // normalizing primitives if someone did new String('aaa'), or new Number('444');\n types.forEach(function(type) {\n if (item instanceof type) {\n result = type(item);\n }\n });\n\n if (typeof result == 'undefined') {\n if (Object.prototype.toString.call(item) === '[object Array]') {\n result = [];\n item.forEach(function(child, index, array) {\n result[index] = me.clone(child);\n });\n } else if (typeof item == 'object') {\n // testing that this is DOM\n if (item.nodeType && typeof item.cloneNode == 'function') {\n result = item.cloneNode(true);\n } else if (!item.prototype) { // check that this is a literal\n if (item instanceof Date) {\n result = new Date(item);\n } else {\n // it is an object literal\n result = {};\n for (const i in item) {\n result[i] = me.clone(item[i]);\n }\n }\n } else {\n if (false && item.constructor) {\n result = new item.constructor();\n } else {\n result = item;\n }\n }\n } else {\n result = item;\n }\n }\n return result;\n }\n\n // Update editor with model contents.\n private updateEditor(content: any) {\n if (JSON.stringify(this._oldModel) == JSON.stringify(content)) {\n return;\n }\n\n if (!this._hasSpecialTag) {\n this._oldModel = content;\n } else {\n this._model = content;\n }\n\n if (this._editorInitialized) {\n if (!this._hasSpecialTag) {\n this._editor.html.set(content);\n } else {\n this.setContent();\n }\n } else {\n if (!this._hasSpecialTag) {\n this._element.innerHTML = content || '';\n } else {\n this.setContent();\n }\n }\n }\n\n // update model if editor contentChanged\n private updateModel() {\n this.zone.run(() => {\n\n let modelContent: any = null;\n\n if (this._hasSpecialTag) {\n\n const attributeNodes = this._element.attributes;\n const attrs = {};\n\n for (let i = 0; i < attributeNodes.length; i++) {\n\n const attrName = attributeNodes[i].name;\n if (this._opts.angularIgnoreAttrs && this._opts.angularIgnoreAttrs.indexOf(attrName) != -1) {\n continue;\n }\n\n attrs[attrName] = attributeNodes[i].value;\n }\n\n if (this._element.innerHTML) {\n attrs[this.INNER_HTML_ATTR] = this._element.innerHTML;\n }\n\n modelContent = attrs;\n } else {\n\n const returnedHtml: any = this._editor.html.get();\n if (typeof returnedHtml === 'string') {\n modelContent = returnedHtml;\n }\n }\n if (this._oldModel !== modelContent) {\n this._oldModel = modelContent;\n\n // Update froalaModel.\n this.froalaModelChange.emit(modelContent);\n\n // Update form model.\n this.onChange(modelContent);\n }\n\n });\n }\n\n private registerEvent(eventName, callback) {\n\n if (!eventName || !callback) {\n return;\n }\n\n if (!this._opts.events) {\n this._opts.events = {};\n }\n\n this._opts.events[eventName] = callback;\n }\n\n private initListeners() {\n const self = this;\n // Check if we have events on the editor.\n if (this._editor.events) {\n // bind contentChange and keyup event to froalaModel\n this._editor.events.on('contentChanged', function() {\n setTimeout(function() {\n self.updateModel();\n }, 0);\n });\n this._editor.events.on('mousedown', function() {\n setTimeout(function() {\n self.onTouched();\n }, 0);\n });\n\n if (this._opts.immediateAngularModelUpdate) {\n this._editor.events.on('keyup', function() {\n setTimeout(function() {\n self.updateModel();\n }, 0);\n });\n }\n }\n\n this._editorInitialized = true;\n }\n\n private createEditor() {\n if (this._editorInitialized) {\n return;\n }\n\n this.setContent(true);\n\n // init editor\n this.zone.runOutsideAngular(() => {\n // Add listeners on initialized event.\n if (!this._opts.events) { this._opts.events = {}; }\n\n // Register initialized event.\n this.registerEvent('initialized', this._opts.events && this._opts.events.initialized);\n const existingInitCallback = this._opts.events.initialized;\n // Default initialized event.\n if (!this._opts.events.initialized || !this._opts.events.initialized.overridden) {\n this._opts.events.initialized = () => {\n this.initListeners();\n existingInitCallback && existingInitCallback.call(this._editor, this);\n };\n this._opts.events.initialized.overridden = true;\n }\n\n // Initialize the Froala Editor.\n this._editor = new FroalaEditor(\n this._element,\n this._opts\n );\n });\n }\n\n private setHtml() {\n this._editor.html.set(this._model || '');\n\n // This will reset the undo stack everytime the model changes externally. Can we fix this?\n this._editor.undo.reset();\n this._editor.undo.saveStep();\n }\n\n private setContent(firstTime = false) {\n const self = this;\n\n // Set initial content\n if (this._model || this._model == '') {\n this._oldModel = this._model;\n if (this._hasSpecialTag) {\n\n const tags: Object = this._model;\n\n // add tags on element\n if (tags) {\n\n for (const attr in tags) {\n if (tags.hasOwnProperty(attr) && attr != this.INNER_HTML_ATTR) {\n this._element.setAttribute(attr, tags[attr]);\n }\n }\n\n if (tags.hasOwnProperty(this.INNER_HTML_ATTR)) {\n this._element.innerHTML = tags[this.INNER_HTML_ATTR];\n }\n }\n } else {\n if (firstTime) {\n this.registerEvent('initialized', function() {\n self.setHtml();\n });\n } else {\n self.setHtml();\n }\n }\n }\n }\n\n private destroyEditor() {\n if (this._editorInitialized) {\n this._editor.destroy();\n this._editorInitialized = false;\n }\n }\n\n private getEditor() {\n if (this._element) {\n return this._editor;\n }\n\n return null;\n }\n\n // send manual editor initialization\n private generateManualController() {\n const controls = {\n initialize: this.createEditor.bind(this),\n destroy: this.destroyEditor.bind(this),\n getEditor: this.getEditor.bind(this),\n };\n this.froalaInit.emit(controls);\n }\n\n // TODO not sure if ngOnInit is executed after @inputs\n ngAfterViewInit() {\n // check if output froalaInit is present. Maybe observers is private and should not be used?? TODO how to better test that an output directive is present.\n if (!this.froalaInit.observers.length) {\n this.createEditor();\n } else {\n this.generateManualController();\n }\n }\n\n ngOnDestroy() {\n this.destroyEditor();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SkArticleEditorComponent } from './sk-article-editor.component';\nimport { SkFroalaEditorDirective } from './sk-froala-editor.directive';\n\n@NgModule({\n declarations: [\n SkArticleEditorComponent,\n SkFroalaEditorDirective\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkArticleEditorComponent,\n SkFroalaEditorDirective\n ],\n providers: [\n ]\n})\nexport class SkArticleModule {\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { SkApiService } from 'sk-front-lib/api';\nimport { SkArticle, SkFile } from 'sk-front-lib/model';\n\n@Component({\n selector: 'sk-article-editor',\n templateUrl: './sk-article-editor-server.component.html',\n styleUrls: ['./sk-article-editor-server.component.scss']\n})\nexport class SkArticleEditorServerComponent implements OnInit, OnChanges {\n\n @Input() article: SkArticle;\n @Input() toolbarType: string = 'default';\n\n content: string;\n images: SkFile[];\n\n editorConfig;\n\n constructor(private _apiService: SkApiService) {\n this._initOptions();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // ------------------------------------------1-----------------------------------------------------------\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n ngOnInit(): void {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this._initData();\n this._initOptions();\n }\n\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n public getData(): { content: string, images: SkFile[] } {\n return {content: this.content, images: this.images};\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n\n _initData() {\n if (!this.article) {\n return;\n }\n\n this.content = this.article.content;\n this.images = this.article.images || [];\n }\n\n _initOptions() {\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SkArticleEditorServerComponent } from './sk-article-editor-server.component';\n\n@NgModule({\n declarations: [\n SkArticleEditorServerComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkArticleEditorServerComponent,\n ],\n providers: [\n ]\n})\nexport class SkArticleServerModule {\n static forRoot(environment): ModuleWithProviders<SkArticleServerModule> {\n return {\n ngModule: SkArticleServerModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["FroalaEditor","Injectable","Inject","SkFile","Component","SkApiService","Input","EventEmitter","Directive","NG_VALUE_ACCESSOR","forwardRef","ElementRef","NgZone","Output","NgModule","CommonModule"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("sk-front-lib/api"),require("sk-front-lib/model"),require("froala-editor"),require("froala-editor/js/plugins.pkgd.min.js"),require("@angular/common"),require("@angular/forms")):"function"==typeof define&&define.amd?define("sk-front-lib/article",["exports","@angular/core","sk-front-lib/api","sk-front-lib/model","froala-editor","froala-editor/js/plugins.pkgd.min.js","@angular/common","@angular/forms"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self)["sk-front-lib"]=e["sk-front-lib"]||{},e["sk-front-lib"].article={}),e.ng.core,e["sk-front-lib"].api,e["sk-front-lib"].model,e.FroalaEditor,null,e.ng.common,e.ng.forms)}(this,(function(e,t,i,o,n,r,a,s){"use strict";function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=l(n),c=function(){function e(e){this.environment=e,this.initializeFroala()}return e.prototype.initializeFroala=function(){d.default.DefineIconTemplate("material_design",'<i class="material-icons">[NAME]</i>'),this.loadFontWeight(),this.registerShortcuts()},e.prototype.loadFontWeight=function(){d.default.DefineIcon("font-weight",{NAME:"format_size",template:"material_design"}),d.default.RegisterCommand("font-weight-drop",{title:"Font Weight",type:"dropdown",icon:"font-weight",options:{100:"Thin",300:"Light",400:"Regular",500:"Medium",700:"Bold",900:"Black"},undo:!0,focus:!0,refreshAfterCallback:!0,callback:function(e,t,i){this.format.removeStyle("font-weight"),this.format.applyStyle("font-weight",t)}})},e.prototype.registerShortcuts=function(){d.default.RegisterShortcut(49,"paragraphFormat","H1","1",!1),d.default.RegisterShortcut(50,"paragraphFormat","H2","2",!1),d.default.RegisterShortcut(51,"paragraphFormat","H3","3",!1),d.default.RegisterShortcut(52,"paragraphFormat","N","4",!1),d.default.RegisterShortcut(66,"font-weight-drop","700")},e.prototype.getBaseConfig=function(){return{key:"Ig1A7vB2D2E2E1F1B4muvugzxmwA-7I-7A5B-21qrC-11A2B2C2A1C9B3B3C6E2C1==",editorClass:"sk-custom",fontFamily:{"Noto Sans KR, Noto Sans, Arial,Helvetica,sans-serif":"Noto Sans","Roboto, Arial,Helvetica,sans-serif":"Roboto","Georgia,serif":"Georgia","Impact,Charcoal,sans-serif":"Impact","Tahoma,Geneva,sans-serif":"Tahoma","'Times New Roman',Times,serif":"Times New Roman","Verdana,Geneva,sans-serif":"Verdana"},imageDefaultWidth:0,imageInsertButtons:["imageBack","|","imageUpload","imageByURL"],imageEditButtons:["imageAlign","imageCaption","imageRemove","|","imageLink","linkOpen","linkEdit","linkRemove","-","imageDisplay","imageStyle","imageAlt","imageSize"],imageAllowedTypes:["jpeg","jpg","png","gif"],videoInsertButtons:["videoBack","|","videoByURL","videoEmbed"],videoUpload:!1,videoResponsive:!0,pastePlain:!0,pasteDeniedAttrs:["class","id","style"],pasteDeniedTags:["div"],wordPasteKeepFormatting:!1,imagePaste:!1,quickInsertEnabled:!1,paragraphFormat:{H1:"대제목",H2:"소제목",H3:"문단 제목",N:"본문"},toolbarSticky:!1,toolbarBottom:!1,attribution:!1,helpSets:[{title:"Gearlounge Custom",commands:[{val:"OSkey1",desc:"대제목"},{val:"OSkey2",desc:"소제목"},{val:"OSkey3",desc:"문단 제목"},{val:"OSkey4",desc:"본문"}]},{title:"Inline Editor",commands:[{val:"OSkeyE",desc:"Show the editor"}]},{title:"Common actions",commands:[{val:"OSkeyC",desc:"Copy"},{val:"OSkeyX",desc:"Cut"},{val:"OSkeyV",desc:"Paste"},{val:"OSkeyZ",desc:"Undo"},{val:"OSkeyShift+Z",desc:"Redo"},{val:"OSkeyK",desc:"Insert Link"},{val:"OSkeyP",desc:"Insert Image"}]},{title:"Basic Formatting",commands:[{val:"OSkeyA",desc:"Select All"},{val:"OSkeyB",desc:"Bold"},{val:"OSkeyI",desc:"Italic"},{val:"OSkeyU",desc:"Underline"},{val:"OSkeyS",desc:"Strikethrough"},{val:"OSkey]",desc:"Increase Indent"},{val:"OSkey[",desc:"Decrease Indent"}]},{title:"Quote",commands:[{val:"OSkey'",desc:"Increase quote level"},{val:"OSkeyShift+'",desc:"Decrease quote level"}]},{title:"Image / Video",commands:[{val:"OSkey+",desc:"Resize larger"},{val:"OSkey-",desc:"Resize smaller"}]},{title:"Table",commands:[{val:"Alt+Space",desc:"Select table cell"},{val:"Shift+Left/Right arrow",desc:"Extend selection one cell"},{val:"Shift+Up/Down arrow",desc:"Extend selection one row"}]},{title:"Navigation",commands:[{val:"OSkey/",desc:"Shortcuts"},{val:"Alt+F10",desc:"Focus popup / toolbar"},{val:"Esc",desc:"Return focus to previous position"}]}]}},e.prototype.getToolbar=function(e){return void 0===e&&(e="default"),"default"===e?{toolbarButtons:{moreText:{buttons:["font-weight-drop","fontFamily","fontSize","textColor","clearFormatting","italic","strikeThrough","subscript","superscript","backgroundColor","inlineClass","inlineStyle"],buttonsVisible:5},moreParagraph:{buttons:["paragraphFormat","alignLeft","alignCenter","formatUL","quote","alignRight","alignJustify","formatOLSimple","formatOL","paragraphStyle","lineHeight","outdent","indent"],buttonsVisible:5},moreRich:{buttons:["insertLink","insertImage","insertVideo","insertHR","insertTable","emoticons","fontAwesome","specialCharacters","embedly","insertFile"],buttonsVisible:4},moreMisc:{buttons:["undo","redo","fullscreen","print","getPDF","spellChecker","selectAll","html","help"],align:"right",buttonsVisible:3}},toolbarButtonsSm:{moreText:{buttons:["font-weight-drop","underline","strikeThrough","subscript","superscript","fontFamily","fontSize","textColor","backgroundColor","inlineClass","inlineStyle","clearFormatting"],buttonsVisible:2},moreParagraph:{buttons:["alignLeft","alignCenter","formatOLSimple","alignRight","alignJustify","formatOL","formatUL","paragraphFormat","paragraphStyle","lineHeight","outdent","indent","quote"],buttonsVisible:2},moreRich:{buttons:["insertLink","insertImage","insertVideo","insertTable","emoticons","fontAwesome","specialCharacters","embedly","insertFile","insertHR"],buttonsVisible:2},moreMisc:{buttons:["undo","redo","fullscreen","print","getPDF","spellChecker","selectAll","html","help"],align:"right",buttonsVisible:2}}}:"simple"===e?{toolbarButtons:[["font-weight-drop","fontFamily","fontSize","textColor","clearFormatting"],["paragraphFormat","alignLeft","alignCenter","formatUL","quote"],["insertLink"]],toolbarButtonsSm:[["font-weight-drop","fontFamily","fontSize","textColor","clearFormatting"],["paragraphFormat","alignLeft","alignCenter","formatUL","quote"],["insertLink"]]}:void 0},e}();c.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new c(t.ɵɵinject("environment"))},token:c,providedIn:"root"}),c.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],c.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:["environment"]}]}]};var p=function(){function e(e,t){this._apiService=e,this._articleService=t,this.toolbarType="default",this._initOptions()}return e.prototype.ngOnInit=function(){},e.prototype.ngOnChanges=function(e){this._initData(),this._initOptions()},e.prototype.getData=function(){return{content:this.content,images:this.images}},e.prototype._initData=function(){this.article&&(this.content=this.article.content,this.images=this.article.images||[])},e.prototype._initOptions=function(){var e=this;this.editorConfig=Object.assign({},this._articleService.getBaseConfig(),Object.assign({requestHeaders:{Authorization:"Bearer "+this._apiService.getToken(),"ngsw-bypass":"true"},imageUploadParams:{imageUrl:this._articleService.environment.apiServer+"/api/public/images/"},imageUploadParam:"file",imageUploadRemoteUrls:!0,imageUploadURL:this._articleService.environment.apiServer+"/external/froala/upload",fileUploadParams:{imageUrl:this._articleService.environment.apiServer+"/api/public/files/"},fileUploadParam:"file",fileUploadURL:this._articleService.environment.apiServer+"/external/froala/upload",events:{"image.inserted":function(t,i){e._addImage(JSON.parse(i).file)},"image.removed":function(t){console.log(t,t.dataset);for(var i=0;i<t.length;i++)e._removeImage(Number(t[i].dataset.id))}}},this._articleService.getToolbar(this.toolbarType)))},e.prototype._addImage=function(e){this.images.push(new o.SkFile(e))},e.prototype._removeImage=function(e){var t=this.images.findIndex((function(t){return t.id===e}));t>-1&&this.images.splice(t,1)},e}();p.decorators=[{type:t.Component,args:[{selector:"sk-article-editor",template:'<div [froalaEditor]="editorConfig" [(froalaModel)]="content"></div>\n',styles:[":host{position:relative;display:block}"]}]}],p.ctorParameters=function(){return[{type:i.SkApiService},{type:c}]},p.propDecorators={article:[{type:t.Input}],toolbarType:[{type:t.Input}]};var u=function(){function e(e,i){this.zone=i,this._opts={immediateAngularModelUpdate:!1,angularIgnoreAttrs:null},this.SPECIAL_TAGS=["img","button","input","a"],this.INNER_HTML_ATTR="innerHTML",this._hasSpecialTag=!1,this._editorInitialized=!1,this._oldModel=null,this.froalaModelChange=new t.EventEmitter,this.froalaInit=new t.EventEmitter,this.onChange=function(e){},this.onTouched=function(){};var o=e.nativeElement;-1!=this.SPECIAL_TAGS.indexOf(o.tagName.toLowerCase())&&(this._hasSpecialTag=!0),this._element=o,this.zone=i}return Object.defineProperty(e.prototype,"froalaEditor",{set:function(e){this._opts=this.clone(e||this._opts),this._opts=Object.assign({},this._opts)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"froalaModel",{set:function(e){this.updateEditor(e)},enumerable:!1,configurable:!0}),e.prototype.writeValue=function(e){this.updateEditor(e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.clone=function(e){var t,i=this;if(!e)return e;if([Number,String,Boolean].forEach((function(i){e instanceof i&&(t=i(e))})),void 0===t)if("[object Array]"===Object.prototype.toString.call(e))t=[],e.forEach((function(e,o,n){t[o]=i.clone(e)}));else if("object"==typeof e)if(e.nodeType&&"function"==typeof e.cloneNode)t=e.cloneNode(!0);else if(e.prototype)t=e;else if(e instanceof Date)t=new Date(e);else for(var o in t={},e)t[o]=i.clone(e[o]);else t=e;return t},e.prototype.updateEditor=function(e){JSON.stringify(this._oldModel)!=JSON.stringify(e)&&(this._hasSpecialTag?this._model=e:this._oldModel=e,this._editorInitialized?this._hasSpecialTag?this.setContent():this._editor.html.set(e):this._hasSpecialTag?this.setContent():this._element.innerHTML=e||"")},e.prototype.updateModel=function(){var e=this;this.zone.run((function(){var t=null;if(e._hasSpecialTag){for(var i=e._element.attributes,o={},n=0;n<i.length;n++){var r=i[n].name;e._opts.angularIgnoreAttrs&&-1!=e._opts.angularIgnoreAttrs.indexOf(r)||(o[r]=i[n].value)}e._element.innerHTML&&(o[e.INNER_HTML_ATTR]=e._element.innerHTML),t=o}else{var a=e._editor.html.get();"string"==typeof a&&(t=a)}e._oldModel!==t&&(e._oldModel=t,e.froalaModelChange.emit(t),e.onChange(t))}))},e.prototype.registerEvent=function(e,t){e&&t&&(this._opts.events||(this._opts.events={}),this._opts.events[e]=t)},e.prototype.initListeners=function(){var e=this;this._editor.events&&(this._editor.events.on("contentChanged",(function(){setTimeout((function(){e.updateModel()}),0)})),this._editor.events.on("mousedown",(function(){setTimeout((function(){e.onTouched()}),0)})),this._opts.immediateAngularModelUpdate&&this._editor.events.on("keyup",(function(){setTimeout((function(){e.updateModel()}),0)}))),this._editorInitialized=!0},e.prototype.createEditor=function(){var e=this;this._editorInitialized||(this.setContent(!0),this.zone.runOutsideAngular((function(){e._opts.events||(e._opts.events={}),e.registerEvent("initialized",e._opts.events&&e._opts.events.initialized);var t=e._opts.events.initialized;e._opts.events.initialized&&e._opts.events.initialized.overridden||(e._opts.events.initialized=function(){e.initListeners(),t&&t.call(e._editor,e)},e._opts.events.initialized.overridden=!0),e._editor=new d.default(e._element,e._opts)})))},e.prototype.setHtml=function(){this._editor.html.set(this._model||""),this._editor.undo.reset(),this._editor.undo.saveStep()},e.prototype.setContent=function(e){void 0===e&&(e=!1);var t=this;if(this._model||""==this._model)if(this._oldModel=this._model,this._hasSpecialTag){var i=this._model;if(i){for(var o in i)i.hasOwnProperty(o)&&o!=this.INNER_HTML_ATTR&&this._element.setAttribute(o,i[o]);i.hasOwnProperty(this.INNER_HTML_ATTR)&&(this._element.innerHTML=i[this.INNER_HTML_ATTR])}}else e?this.registerEvent("initialized",(function(){t.setHtml()})):t.setHtml()},e.prototype.destroyEditor=function(){this._editorInitialized&&(this._editor.destroy(),this._editorInitialized=!1)},e.prototype.getEditor=function(){return this._element?this._editor:null},e.prototype.generateManualController=function(){var e={initialize:this.createEditor.bind(this),destroy:this.destroyEditor.bind(this),getEditor:this.getEditor.bind(this)};this.froalaInit.emit(e)},e.prototype.ngAfterViewInit=function(){this.froalaInit.observers.length?this.generateManualController():this.createEditor()},e.prototype.ngOnDestroy=function(){this.destroyEditor()},e}();u.decorators=[{type:t.Directive,args:[{selector:"[froalaEditor]",exportAs:"froalaEditor",providers:[{provide:s.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return u})),multi:!0}]}]}],u.ctorParameters=function(){return[{type:t.ElementRef},{type:t.NgZone}]},u.propDecorators={froalaEditor:[{type:t.Input}],froalaModel:[{type:t.Input}],froalaModelChange:[{type:t.Output}],froalaInit:[{type:t.Output}]};var f=function(){};f.decorators=[{type:t.NgModule,args:[{declarations:[p,u],imports:[a.CommonModule],exports:[p,u],providers:[]}]}];var h=function(){function e(e){this._apiService=e,this.toolbarType="default",this._initOptions()}return e.prototype.ngOnInit=function(){},e.prototype.ngOnChanges=function(e){this._initData(),this._initOptions()},e.prototype.getData=function(){return{content:this.content,images:this.images}},e.prototype._initData=function(){this.article&&(this.content=this.article.content,this.images=this.article.images||[])},e.prototype._initOptions=function(){},e}();h.decorators=[{type:t.Component,args:[{selector:"sk-article-editor",template:"<div>Server</div>\n",styles:[":host{position:relative;display:block}"]}]}],h.ctorParameters=function(){return[{type:i.SkApiService}]},h.propDecorators={article:[{type:t.Input}],toolbarType:[{type:t.Input}]};var m=function(){function e(){}return e.forRoot=function(t){return{ngModule:e,providers:[]}},e}();m.decorators=[{type:t.NgModule,args:[{declarations:[h],imports:[a.CommonModule],exports:[h],providers:[]}]}],e.SkArticleEditorComponent=p,e.SkArticleEditorServerComponent=h,e.SkArticleModule=f,e.SkArticleServerModule=m,e.SkArticleService=c,e.SkFroalaEditorDirective=u,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=sk-front-lib-article.umd.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../projects/sk-front-lib/article/src/sk-article.service.ts","../../../projects/sk-front-lib/article/src/sk-article-editor.component.ts","../../../projects/sk-front-lib/article/src/sk-froala-editor.directive.ts","../../../projects/sk-front-lib/article/src/sk-article.module.ts","../../../projects/sk-front-lib/article/src/sk-article-editor-server.component.ts","../../../projects/sk-front-lib/article/src/sk-article-server.module.ts"],"names":["SkArticleService","environment","this","initializeFroala","prototype","FroalaEditor","DefineIconTemplate","loadFontWeight","registerShortcuts","DefineIcon","NAME","template","RegisterCommand","title","type","icon","options","100","300","400","500","700","900","undo","focus","refreshAfterCallback","callback","cmd","val","params","format","removeStyle","applyStyle","RegisterShortcut","getBaseConfig","key","editorClass","fontFamily","Noto Sans KR, Noto Sans, Arial,Helvetica,sans-serif","Roboto, Arial,Helvetica,sans-serif","Georgia,serif","Impact,Charcoal,sans-serif","Tahoma,Geneva,sans-serif","'Times New Roman',Times,serif","Verdana,Geneva,sans-serif","imageDefaultWidth","imageInsertButtons","imageEditButtons","imageAllowedTypes","videoInsertButtons","videoUpload","videoResponsive","pastePlain","pasteDeniedAttrs","pasteDeniedTags","wordPasteKeepFormatting","imagePaste","quickInsertEnabled","paragraphFormat","H1","H2","H3","N","toolbarSticky","toolbarBottom","attribution","helpSets","commands","desc","getToolbar","toolbarButtons","moreText","buttons","buttonsVisible","moreParagraph","moreRich","moreMisc","align","toolbarButtonsSm","Injectable","args","providedIn","Inject","SkArticleEditorComponent","_apiService","_articleService","toolbarType","_initOptions","ngOnInit","ngOnChanges","changes","_initData","getData","content","images","article","_this","editorConfig","Object","assign","requestHeaders","Authorization","getToken","ngsw-bypass","imageUploadParams","imageUrl","apiServer","imageUploadParam","imageUploadRemoteUrls","imageUploadURL","fileUploadParams","fileUploadParam","fileUploadURL","events","image.inserted","$img","response","_addImage","JSON","parse","file","image.removed","console","log","dataset","i","length","_removeImage","Number","id","push","SkFile","index","findIndex","value","splice","Component","selector","SkApiService","Input","SkFroalaEditorDirective","el","zone","_opts","immediateAngularModelUpdate","angularIgnoreAttrs","SPECIAL_TAGS","INNER_HTML_ATTR","_hasSpecialTag","_editorInitialized","_oldModel","froalaModelChange","EventEmitter","froalaInit","onChange","_","onTouched","element","nativeElement","indexOf","tagName","toLowerCase","_element","defineProperty","opts","clone","updateEditor","writeValue","registerOnChange","fn","registerOnTouched","item","result","me","String","Boolean","forEach","toString","call","child","array","nodeType","cloneNode","Date","stringify","_model","setContent","_editor","html","set","innerHTML","updateModel","run","modelContent","attributeNodes","attributes","attrs","attrName","name","returnedHtml","get","emit","registerEvent","eventName","initListeners","self","on","setTimeout","createEditor","runOutsideAngular","initialized","existingInitCallback","overridden","setHtml","reset","saveStep","firstTime","tags","attr","hasOwnProperty","setAttribute","destroyEditor","destroy","getEditor","generateManualController","controls","initialize","bind","ngAfterViewInit","observers","ngOnDestroy","Directive","exportAs","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","ElementRef","NgZone","Output","NgModule","declarations","imports","CommonModule","exports","SkArticleEditorServerComponent","SkArticleServerModule","forRoot","ngModule"],"mappings":"o3BAUI,SAAAA,EAA0CC,GAAAC,KAAAD,YAAAA,EACtCC,KAAKC,0BAGTH,EAAAI,UAAAD,iBAAA,WACIE,EAAAA,QAAaC,mBAAmB,kBAAmB,wCAEnDJ,KAAKK,iBACLL,KAAKM,qBAGTR,EAAAI,UAAAG,eAAA,WAEIF,EAAAA,QAAaI,WAAW,cAAe,CAACC,KAAM,cAAeC,SAAU,oBAGvEN,EAAAA,QAAaO,gBAAgB,mBAAoB,CAE7CC,MAAO,cAGPC,KAAM,WAINC,KAAM,cAGNC,QAAS,CACLC,IAAK,OACLC,IAAK,QACLC,IAAK,UACLC,IAAK,SACLC,IAAK,OACLC,IAAK,SAWTC,MAAM,EAGNC,OAAO,EAGPC,sBAAsB,EAGtBC,SAAQ,SAACC,EAAKC,EAAKC,GACf3B,KAAK4B,OAAOC,YAAY,eACxB7B,KAAK4B,OAAOE,WAAW,cAAeJ,OAkBlD5B,EAAAI,UAAAI,kBAAA,WACIH,EAAAA,QAAa4B,iBAAiB,GAAI,kBAAmB,KAAM,KAAK,GAChE5B,EAAAA,QAAa4B,iBAAiB,GAAI,kBAAmB,KAAM,KAAK,GAChE5B,EAAAA,QAAa4B,iBAAiB,GAAI,kBAAmB,KAAM,KAAK,GAChE5B,EAAAA,QAAa4B,iBAAiB,GAAI,kBAAmB,IAAK,KAAK,GAC/D5B,EAAAA,QAAa4B,iBAAiB,GAAI,mBAAoB,QAG1DjC,EAAAI,UAAA8B,cAAA,WACI,MAAO,CACHC,IAAK,sEACLC,YAAa,YACbC,WAAY,CACRC,sDAAuD,YACvDC,qCAAsC,SACtCC,gBAAiB,UACjBC,6BAA8B,SAC9BC,2BAA4B,SAC5BC,gCAAmC,kBACnCC,4BAA6B,WAEjCC,kBAAmB,EAGnBC,mBAAoB,CAAC,YAAa,IAAK,cAAe,cACtDC,iBAAkB,CAAC,aAAc,eAAgB,cAAe,IAAK,YAAa,WAAY,WAAY,aAAc,IAAK,eAAgB,aAAc,WAAY,aACvKC,kBAAmB,CAAC,OAAQ,MAAO,MAAO,OAI1CC,mBAAoB,CAAC,YAAa,IAAK,aAAc,cACrDC,aAAa,EACbC,iBAAiB,EAEjBC,YAAY,EACZC,iBAAkB,CAAC,QAAS,KAAM,SAClCC,gBAAiB,CAAC,OAClBC,yBAAyB,EACzBC,YAAY,EAEZC,oBAAoB,EAEpBC,gBAAiB,CACbC,GAAI,MACJC,GAAI,MACJC,GAAI,QACJC,EAAG,MAIPC,eAAe,EACfC,eAAe,EAGfC,aAAa,EAEbC,SAAU,CACN,CACIrD,MAAO,oBACPsD,SAAU,CACN,CAACvC,IAAK,SAAUwC,KAAM,OACtB,CAACxC,IAAK,SAAUwC,KAAM,OACtB,CAACxC,IAAK,SAAUwC,KAAM,SACtB,CAACxC,IAAK,SAAUwC,KAAM,QAG9B,CACIvD,MAAO,gBACPsD,SAAU,CACN,CAACvC,IAAK,SAAUwC,KAAM,qBAG9B,CACIvD,MAAO,iBACPsD,SAAU,CACN,CAACvC,IAAK,SAAUwC,KAAM,QACtB,CAACxC,IAAK,SAAUwC,KAAM,OACtB,CAACxC,IAAK,SAAUwC,KAAM,SACtB,CAACxC,IAAK,SAAUwC,KAAM,QACtB,CAACxC,IAAK,eAAgBwC,KAAM,QAC5B,CAACxC,IAAK,SAAUwC,KAAM,eACtB,CAACxC,IAAK,SAAUwC,KAAM,kBAG9B,CACIvD,MAAO,mBACPsD,SAAU,CACN,CAACvC,IAAK,SAAUwC,KAAM,cACtB,CAACxC,IAAK,SAAUwC,KAAM,QACtB,CAACxC,IAAK,SAAUwC,KAAM,UACtB,CAACxC,IAAK,SAAUwC,KAAM,aACtB,CAACxC,IAAK,SAAUwC,KAAM,iBACtB,CAACxC,IAAK,SAAUwC,KAAM,mBACtB,CAACxC,IAAK,SAAUwC,KAAM,qBAG9B,CACIvD,MAAO,QACPsD,SAAU,CACN,CAACvC,IAAK,SAAWwC,KAAM,wBACvB,CAACxC,IAAK,eAAiBwC,KAAM,0BAGrC,CACIvD,MAAO,gBACPsD,SAAU,CACN,CAACvC,IAAK,SAAUwC,KAAM,iBACtB,CAACxC,IAAK,SAAUwC,KAAM,oBAG9B,CACIvD,MAAO,QACPsD,SAAU,CACN,CAACvC,IAAK,YAAawC,KAAM,qBACzB,CAACxC,IAAK,yBAA0BwC,KAAM,6BACtC,CAACxC,IAAK,sBAAuBwC,KAAM,8BAG3C,CACIvD,MAAO,aACPsD,SAAU,CACN,CAACvC,IAAK,SAAUwC,KAAM,aACtB,CAACxC,IAAK,UAAWwC,KAAM,yBACvB,CAACxC,IAAK,MAAOwC,KAAM,0CAOvCpE,EAAAI,UAAAiE,WAAA,SAAWvD,GACP,YADO,IAAAA,IAAAA,EAAA,WACM,YAATA,EACO,CACHwD,eAAgB,CACZC,SAAU,CACNC,QAAS,CAAC,mBAAoB,aAAc,WAAY,YAAa,kBAAmB,SAAU,gBAAiB,YAAa,cAAe,kBAAmB,cAAe,eACjLC,eAAgB,GAEpBC,cAAe,CACXF,QAAS,CAAC,kBAAmB,YAAa,cAAe,WAAY,QAAS,aAAc,eAAgB,iBAAkB,WAAY,iBAAkB,aAAc,UAAW,UACrLC,eAAgB,GAEpBE,SAAU,CACNH,QAAS,CAAC,aAAc,cAAe,cAAe,WAAY,cAAe,YAAa,cAAe,oBAAqB,UAAW,cAC7IC,eAAgB,GAEpBG,SAAU,CACNJ,QAAS,CAAC,OAAQ,OAAQ,aAAc,QAAS,SAAU,eAAgB,YAAa,OAAQ,QAChGK,MAAO,QACPJ,eAAgB,IAGxBK,iBAAkB,CACdP,SAAU,CACNC,QAAS,CAAC,mBAAoB,YAAa,gBAAiB,YAAa,cAAe,aAAc,WAAY,YAAa,kBAAmB,cAAe,cAAe,mBAChLC,eAAgB,GAEpBC,cAAe,CACXF,QAAS,CAAC,YAAa,cAAe,iBAAkB,aAAc,eAAgB,WAAY,WAAY,kBAAmB,iBAAkB,aAAc,UAAW,SAAU,SACtLC,eAAgB,GAEpBE,SAAU,CACNH,QAAS,CAAC,aAAc,cAAe,cAAe,cAAe,YAAa,cAAe,oBAAqB,UAAW,aAAc,YAC/IC,eAAgB,GAEpBG,SAAU,CACNJ,QAAS,CAAC,OAAQ,OAAQ,aAAc,QAAS,SAAU,eAAgB,YAAa,OAAQ,QAChGK,MAAO,QACPJ,eAAgB,KAIZ,WAAT3D,EACA,CACHwD,eAAgB,CAAC,CAAC,mBAAoB,aAAc,WAAY,YAAa,mBAAoB,CAAC,kBAAmB,YAAa,cAAe,WAAY,SAAU,CAAC,eACxKQ,iBAAkB,CAAC,CAAC,mBAAoB,aAAc,WAAY,YAAa,mBAAoB,CAAC,kBAAmB,YAAa,cAAe,WAAY,SAAU,CAAC,qBAH3K,kJA3PdC,EAAAA,WAAUC,KAAA,CAAC,CACRC,WAAY,6EAICC,EAAAA,OAAMF,KAAA,CAAC,qCCUpB,SAAAG,EAAoBC,EACAC,GADAnF,KAAAkF,YAAAA,EACAlF,KAAAmF,gBAAAA,EARXnF,KAAAoF,YAAsB,UAS3BpF,KAAKqF,sBAWTJ,EAAA/E,UAAAoF,SAAA,aAGAL,EAAA/E,UAAAqF,YAAA,SAAYC,GACRxF,KAAKyF,YACLzF,KAAKqF,gBAQFJ,EAAA/E,UAAAwF,QAAA,WACH,MAAO,CAACC,QAAS3F,KAAK2F,QAASC,OAAQ5F,KAAK4F,SAQhDX,EAAA/E,UAAAuF,UAAA,WACSzF,KAAK6F,UAIV7F,KAAK2F,QAAU3F,KAAK6F,QAAQF,QAC5B3F,KAAK4F,OAAS5F,KAAK6F,QAAQD,QAAU,KAGzCX,EAAA/E,UAAAmF,aAAA,WAAA,IAAAS,EAAA9F,KACIA,KAAK+F,aAAeC,OAAOC,OAAO,GAAIjG,KAAKmF,gBAAgBnD,gBAAegE,OAAAC,OAAA,CACtEC,eAAgB,CACZC,cAAiB,UAAYnG,KAAKkF,YAAYkB,WAC9CC,cAAe,QAEnBC,kBAAmB,CACfC,SAAUvG,KAAKmF,gBAAgBpF,YAAYyG,UAAY,uBAE3DC,iBAAkB,OAClBC,uBAAuB,EACvBC,eAAgB3G,KAAKmF,gBAAgBpF,YAAYyG,UAAY,0BAE7DI,iBAAkB,CACdL,SAAUvG,KAAKmF,gBAAgBpF,YAAYyG,UAAY,sBAE3DK,gBAAiB,OACjBC,cAAe9G,KAAKmF,gBAAgBpF,YAAYyG,UAAY,0BAE5DO,OAAQ,CACJC,iBAAkB,SAACC,EAAMC,GACrBpB,EAAKqB,UAAUC,KAAKC,MAAMH,GAAUI,OAExCC,gBAAiB,SAACN,GACdO,QAAQC,IAAIR,EAAMA,EAAKS,SACvB,IAAK,IAAIC,EAAI,EAAGA,EAAIV,EAAKW,OAAQD,IAC7B7B,EAAK+B,aAAaC,OAAOb,EAAKU,GAAGD,QAAQK,QAIlD/H,KAAKmF,gBAAgBhB,WAAWnE,KAAKoF,gBAIhDH,EAAA/E,UAAAiH,UAAA,SAAUG,GACNtH,KAAK4F,OAAOoC,KAAK,IAAIC,EAAAA,OAAOX,KAGhCrC,EAAA/E,UAAA2H,aAAA,SAAaE,GACT,IAAMG,EAAQlI,KAAK4F,OAAOuC,WAAU,SAAAC,GAAS,OAAAA,EAAML,KAAOA,KACtDG,GAAS,GACTlI,KAAK4F,OAAOyC,OAAOH,EAAO,6BApGrCI,EAAAA,UAASxD,KAAA,CAAC,CACPyD,SAAU,oBACV9H,SAAA,uKANK+H,EAAAA,oBAEA1I,sCASJ2I,EAAAA,2BACAA,EAAAA,0BCaD,SAAAC,EAAYC,EAAwBC,GAAA5I,KAAA4I,KAAAA,EA2B5B5I,KAAA6I,MAAa,CACjBC,6BAA6B,EAC7BC,mBAAoB,MAKhB/I,KAAAgJ,aAAyB,CAAC,MAAO,SAAU,QAAS,KACpDhJ,KAAAiJ,gBAA0B,YAC1BjJ,KAAAkJ,gBAA0B,EAQ1BlJ,KAAAmJ,oBAA8B,EAE9BnJ,KAAAoJ,UAAoB,KAGlBpJ,KAAAqJ,kBAAuC,IAAIC,EAAAA,aAG3CtJ,KAAAuJ,WAAmC,IAAID,EAAAA,aAGjDtJ,KAAAwJ,SAAW,SAACC,KAEZzJ,KAAA0J,UAAY,aAvDR,IAAMC,EAAehB,EAAGiB,eAGyC,GAA7D5J,KAAKgJ,aAAaa,QAAQF,EAAQG,QAAQC,iBAC1C/J,KAAKkJ,gBAAiB,GAE1BlJ,KAAKgK,SAAWL,EAEhB3J,KAAK4I,KAAOA,SAMhB5C,OAAAiE,eAAavB,EAAAxI,UAAA,eAAY,KAAzB,SAA0BgK,GACtBlK,KAAK6I,MAAQ7I,KAAKmK,MAAMD,GAAQlK,KAAK6I,OACrC7I,KAAK6I,MAAK7C,OAAAC,OAAA,GAAOjG,KAAK6I,wCAI1B7C,OAAAiE,eAAavB,EAAAxI,UAAA,cAAW,KAAxB,SAAyByF,GACrB3F,KAAKoK,aAAazE,oCAsCtB+C,EAAAxI,UAAAmK,WAAA,SAAW1E,GACP3F,KAAKoK,aAAazE,IAGtB+C,EAAAxI,UAAAoK,iBAAA,SAAiBC,GACbvK,KAAKwJ,SAAWe,GAGpB7B,EAAAxI,UAAAsK,kBAAA,SAAkBD,GACdvK,KAAK0J,UAAYa,GAIb7B,EAAAxI,UAAAiK,MAAA,SAAMM,GACV,IAMIC,EANEC,EAAK3K,KACX,IAAKyK,EACD,OAAOA,EAaX,GAVY,CAAC3C,OAAQ8C,OAAQC,SAIvBC,SAAQ,SAASlK,GACf6J,aAAgB7J,IAChB8J,EAAS9J,EAAK6J,YAID,IAAVC,EACP,GAA6C,mBAAzC1E,OAAO9F,UAAU6K,SAASC,KAAKP,GAC/BC,EAAS,GACTD,EAAKK,SAAQ,SAASG,EAAO/C,EAAOgD,GAChCR,EAAOxC,GAASyC,EAAGR,MAAMc,WAE1B,GAAmB,iBAARR,EAEd,GAAIA,EAAKU,UAAqC,mBAAlBV,EAAKW,UAC7BV,EAASD,EAAKW,WAAU,QACrB,GAAKX,EAAKvK,UAcTwK,EAASD,OAbb,GAAIA,aAAgBY,KAChBX,EAAS,IAAIW,KAAKZ,QAIlB,IAAK,IAAM9C,KADX+C,EAAS,GACOD,EACZC,EAAO/C,GAAKgD,EAAGR,MAAMM,EAAK9C,SAWtC+C,EAASD,EAGjB,OAAOC,GAIHhC,EAAAxI,UAAAkK,aAAA,SAAazE,GACbyB,KAAKkE,UAAUtL,KAAKoJ,YAAchC,KAAKkE,UAAU3F,KAIhD3F,KAAKkJ,eAGNlJ,KAAKuL,OAAS5F,EAFd3F,KAAKoJ,UAAYzD,EAKjB3F,KAAKmJ,mBACAnJ,KAAKkJ,eAGNlJ,KAAKwL,aAFLxL,KAAKyL,QAAQC,KAAKC,IAAIhG,GAKrB3F,KAAKkJ,eAGNlJ,KAAKwL,aAFLxL,KAAKgK,SAAS4B,UAAYjG,GAAW,KAQzC+C,EAAAxI,UAAA2L,YAAA,WAAA,IAAA/F,EAAA9F,KACJA,KAAK4I,KAAKkD,KAAI,WAEV,IAAIC,EAAoB,KAExB,GAAIjG,EAAKoD,eAAgB,CAKrB,IAHA,IAAM8C,EAAiBlG,EAAKkE,SAASiC,WAC/BC,EAAQ,GAELvE,EAAI,EAAGA,EAAIqE,EAAepE,OAAQD,IAAK,CAE5C,IAAMwE,EAAWH,EAAerE,GAAGyE,KAC/BtG,EAAK+C,MAAME,qBAA0E,GAApDjD,EAAK+C,MAAME,mBAAmBc,QAAQsC,KAI3ED,EAAMC,GAAYH,EAAerE,GAAGS,OAGpCtC,EAAKkE,SAAS4B,YACdM,EAAMpG,EAAKmD,iBAAmBnD,EAAKkE,SAAS4B,WAGhDG,EAAeG,MACZ,CAEH,IAAMG,EAAoBvG,EAAK2F,QAAQC,KAAKY,MAChB,iBAAjBD,IACPN,EAAeM,GAGnBvG,EAAKsD,YAAc2C,IACnBjG,EAAKsD,UAAY2C,EAGjBjG,EAAKuD,kBAAkBkD,KAAKR,GAG5BjG,EAAK0D,SAASuC,QAMlBrD,EAAAxI,UAAAsM,cAAA,SAAcC,EAAWjL,GAExBiL,GAAcjL,IAIdxB,KAAK6I,MAAM9B,SACZ/G,KAAK6I,MAAM9B,OAAS,IAGxB/G,KAAK6I,MAAM9B,OAAO0F,GAAajL,IAG3BkH,EAAAxI,UAAAwM,cAAA,WACJ,IAAMC,EAAO3M,KAETA,KAAKyL,QAAQ1E,SAEb/G,KAAKyL,QAAQ1E,OAAO6F,GAAG,kBAAkB,WACrCC,YAAW,WACPF,EAAKd,gBACN,MAEP7L,KAAKyL,QAAQ1E,OAAO6F,GAAG,aAAa,WAChCC,YAAW,WACPF,EAAKjD,cACN,MAGH1J,KAAK6I,MAAMC,6BACX9I,KAAKyL,QAAQ1E,OAAO6F,GAAG,SAAS,WAC5BC,YAAW,WACPF,EAAKd,gBACN,OAKf7L,KAAKmJ,oBAAqB,GAGtBT,EAAAxI,UAAA4M,aAAA,WAAA,IAAAhH,EAAA9F,KACAA,KAAKmJ,qBAITnJ,KAAKwL,YAAW,GAGhBxL,KAAK4I,KAAKmE,mBAAkB,WAEnBjH,EAAK+C,MAAM9B,SAAUjB,EAAK+C,MAAM9B,OAAS,IAG9CjB,EAAK0G,cAAc,cAAe1G,EAAK+C,MAAM9B,QAAUjB,EAAK+C,MAAM9B,OAAOiG,aACzE,IAAMC,EAAuBnH,EAAK+C,MAAM9B,OAAOiG,YAE1ClH,EAAK+C,MAAM9B,OAAOiG,aAAgBlH,EAAK+C,MAAM9B,OAAOiG,YAAYE,aACjEpH,EAAK+C,MAAM9B,OAAOiG,YAAc,WAC5BlH,EAAK4G,gBACLO,GAAwBA,EAAqBjC,KAAKlF,EAAK2F,QAAS3F,IAEpEA,EAAK+C,MAAM9B,OAAOiG,YAAYE,YAAa,GAI/CpH,EAAK2F,QAAU,IAAItL,EAAAA,QACf2F,EAAKkE,SACLlE,EAAK+C,YAKTH,EAAAxI,UAAAiN,QAAA,WACJnN,KAAKyL,QAAQC,KAAKC,IAAI3L,KAAKuL,QAAU,IAGrCvL,KAAKyL,QAAQpK,KAAK+L,QAClBpN,KAAKyL,QAAQpK,KAAKgM,YAGd3E,EAAAxI,UAAAsL,WAAA,SAAW8B,QAAA,IAAAA,IAAAA,GAAA,GACf,IAAMX,EAAO3M,KAGb,GAAIA,KAAKuL,QAAyB,IAAfvL,KAAKuL,OAEpB,GADAvL,KAAKoJ,UAAYpJ,KAAKuL,OAClBvL,KAAKkJ,eAAgB,CAErB,IAAMqE,EAAevN,KAAKuL,OAG1B,GAAIgC,EAAM,CAEN,IAAK,IAAMC,KAAQD,EACXA,EAAKE,eAAeD,IAASA,GAAQxN,KAAKiJ,iBAC1CjJ,KAAKgK,SAAS0D,aAAaF,EAAMD,EAAKC,IAI1CD,EAAKE,eAAezN,KAAKiJ,mBACzBjJ,KAAKgK,SAAS4B,UAAY2B,EAAKvN,KAAKiJ,wBAIxCqE,EACAtN,KAAKwM,cAAc,eAAe,WAC9BG,EAAKQ,aAGTR,EAAKQ,WAMbzE,EAAAxI,UAAAyN,cAAA,WACA3N,KAAKmJ,qBACLnJ,KAAKyL,QAAQmC,UACb5N,KAAKmJ,oBAAqB,IAI1BT,EAAAxI,UAAA2N,UAAA,WACJ,OAAI7N,KAAKgK,SACEhK,KAAKyL,QAGT,MAIH/C,EAAAxI,UAAA4N,yBAAA,WACJ,IAAMC,EAAW,CACbC,WAAYhO,KAAK8M,aAAamB,KAAKjO,MACnC4N,QAAS5N,KAAK2N,cAAcM,KAAKjO,MACjC6N,UAAW7N,KAAK6N,UAAUI,KAAKjO,OAEnCA,KAAKuJ,WAAWgD,KAAKwB,IAIzBrF,EAAAxI,UAAAgO,gBAAA,WAESlO,KAAKuJ,WAAW4E,UAAUvG,OAG3B5H,KAAK8N,2BAFL9N,KAAK8M,gBAMbpE,EAAAxI,UAAAkO,YAAA,WACIpO,KAAK2N,0CAxWZU,EAAAA,UAASvJ,KAAA,CAAC,CACPyD,SAAU,iBACV+F,SAAU,eACVC,UAAW,CAAC,CACRC,QAASC,EAAAA,kBAAmBC,YACxBC,EAAAA,YAAW,WAAM,OAAAjG,KACrBkG,OAAO,iDAlBXC,EAAAA,kBAIAC,EAAAA,gDAmCCrG,EAAAA,2BAMAA,EAAAA,iCA2BAsG,EAAAA,2BAGAA,EAAAA,gBCzDL,iCAfCC,EAAAA,SAAQlK,KAAA,CAAC,CACNmK,aAAc,CACVhK,EACAyD,GAEJwG,QAAS,CACLC,EAAAA,cAEJC,QAAS,CACLnK,EACAyD,GAEJ6F,UAAW,wBCCX,SAAAc,EAAoBnK,GAAAlF,KAAAkF,YAAAA,EAPXlF,KAAAoF,YAAsB,UAQ3BpF,KAAKqF,sBAWTgK,EAAAnP,UAAAoF,SAAA,aAGA+J,EAAAnP,UAAAqF,YAAA,SAAYC,GACRxF,KAAKyF,YACLzF,KAAKqF,gBAQFgK,EAAAnP,UAAAwF,QAAA,WACH,MAAO,CAACC,QAAS3F,KAAK2F,QAASC,OAAQ5F,KAAK4F,SAQhDyJ,EAAAnP,UAAAuF,UAAA,WACSzF,KAAK6F,UAIV7F,KAAK2F,QAAU3F,KAAK6F,QAAQF,QAC5B3F,KAAK4F,OAAS5F,KAAK6F,QAAQD,QAAU,KAGzCyJ,EAAAnP,UAAAmF,aAAA,sCA1DHiD,EAAAA,UAASxD,KAAA,CAAC,CACPyD,SAAU,oBACV9H,SAAA,qHALK+H,EAAAA,iDAUJC,EAAAA,2BACAA,EAAAA,0BCML,SAAA6G,YACWA,EAAAC,QAAP,SAAexP,GACX,MAAO,CACHyP,SAAUF,EACVf,UAAW,8BAjBtBS,EAAAA,SAAQlK,KAAA,CAAC,CACNmK,aAAc,CACVI,GAEJH,QAAS,CACLC,EAAAA,cAEJC,QAAS,CACLC,GAEJd,UAAW","sourcesContent":["import { Inject, Injectable } from '@angular/core';\n\nimport FroalaEditor from 'froala-editor';\nimport 'froala-editor/js/plugins.pkgd.min.js';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SkArticleService {\n\n constructor(@Inject('environment') public environment: any) {\n this.initializeFroala();\n }\n\n initializeFroala() {\n FroalaEditor.DefineIconTemplate('material_design', '<i class=\"material-icons\">[NAME]</i>');\n\n this.loadFontWeight();\n this.registerShortcuts();\n }\n\n loadFontWeight() {\n // Define an icon.\n FroalaEditor.DefineIcon('font-weight', {NAME: 'format_size', template: 'material_design'});\n\n // Define a dropdown button.\n FroalaEditor.RegisterCommand('font-weight-drop', {\n // Button title.\n title: 'Font Weight',\n\n // Mark the button as a dropdown.\n type: 'dropdown',\n\n // Specify the icon for the button.\n // If this option is not specified, the button name will be used.\n icon: 'font-weight',\n\n // Options for the dropdown.\n options: {\n 100: 'Thin',\n 300: 'Light',\n 400: 'Regular',\n 500: 'Medium',\n 700: 'Bold',\n 900: 'Black'\n },\n\n // If present, the options property will be ignored.\n // It can be used to define a custom HTML for the dropdown.\n // html: function () {\n // // The current context is the editor instance.\n // return '';\n // },\n\n // Save the dropdown action into undo stack.\n undo: true,\n\n // Focus inside the editor before callback.\n focus: true,\n\n // Refresh the button state after the callback.\n refreshAfterCallback: true,\n\n // Callback.\n callback(cmd, val, params) {\n this.format.removeStyle('font-weight');\n this.format.applyStyle('font-weight', val);\n },\n\n // Called when the dropdown button state might have changed.\n // refresh: function ($btn) {\n // // The current context is the editor instance.\n // console.log (this.selection.element());\n // console.log(this);\n // },\n\n // Called when the dropdown is shown.\n // refreshOnShow: function ($btn, $dropdown) {\n // // The current context is the editor instance.\n // console.log (this.selection.element());\n // }\n });\n }\n\n registerShortcuts() {\n FroalaEditor.RegisterShortcut(49, 'paragraphFormat', 'H1', '1', false);\n FroalaEditor.RegisterShortcut(50, 'paragraphFormat', 'H2', '2', false);\n FroalaEditor.RegisterShortcut(51, 'paragraphFormat', 'H3', '3', false);\n FroalaEditor.RegisterShortcut(52, 'paragraphFormat', 'N', '4', false);\n FroalaEditor.RegisterShortcut(66, 'font-weight-drop', '700');\n }\n\n getBaseConfig() {\n return {\n key: 'Ig1A7vB2D2E2E1F1B4muvugzxmwA-7I-7A5B-21qrC-11A2B2C2A1C9B3B3C6E2C1==',\n editorClass: 'sk-custom',\n fontFamily: {\n 'Noto Sans KR, Noto Sans, Arial,Helvetica,sans-serif': 'Noto Sans',\n 'Roboto, Arial,Helvetica,sans-serif': 'Roboto',\n 'Georgia,serif': 'Georgia',\n 'Impact,Charcoal,sans-serif': 'Impact',\n 'Tahoma,Geneva,sans-serif': 'Tahoma',\n '\\'Times New Roman\\',Times,serif': 'Times New Roman',\n 'Verdana,Geneva,sans-serif': 'Verdana'\n },\n imageDefaultWidth: 0,\n // remove image manager\n // imageInsertButtons: ['imageBack', '|', 'imageUpload', 'imageByURL', 'imageManager'],\n imageInsertButtons: ['imageBack', '|', 'imageUpload', 'imageByURL'],\n imageEditButtons: ['imageAlign', 'imageCaption', 'imageRemove', '|', 'imageLink', 'linkOpen', 'linkEdit', 'linkRemove', '-', 'imageDisplay', 'imageStyle', 'imageAlt', 'imageSize'],\n imageAllowedTypes: ['jpeg', 'jpg', 'png', 'gif'],\n\n // remove video upload\n // ['videoBack', '|', 'videoByURL', 'videoEmbed', 'videoUpload']\n videoInsertButtons: ['videoBack', '|', 'videoByURL', 'videoEmbed'],\n videoUpload: false,\n videoResponsive: true,\n\n pastePlain: true,\n pasteDeniedAttrs: ['class', 'id', 'style'],\n pasteDeniedTags: ['div'],\n wordPasteKeepFormatting: false,\n imagePaste: false,\n\n quickInsertEnabled: false,\n\n paragraphFormat: {\n H1: '대제목',\n H2: '소제목',\n H3: '문단 제목',\n N: '본문'\n },\n\n // toolbarContainer: '.sk-custom-editor-toolbar',\n toolbarSticky: false,\n toolbarBottom: false,\n\n\n attribution: false,\n\n helpSets: [\n {\n title: 'Gearlounge Custom',\n commands: [\n {val: 'OSkey1', desc: '대제목'},\n {val: 'OSkey2', desc: '소제목'},\n {val: 'OSkey3', desc: '문단 제목'},\n {val: 'OSkey4', desc: '본문'}\n ]\n },\n {\n title: 'Inline Editor',\n commands: [\n {val: 'OSkeyE', desc: 'Show the editor'}\n ]\n },\n {\n title: 'Common actions',\n commands: [\n {val: 'OSkeyC', desc: 'Copy'},\n {val: 'OSkeyX', desc: 'Cut'},\n {val: 'OSkeyV', desc: 'Paste'},\n {val: 'OSkeyZ', desc: 'Undo'},\n {val: 'OSkeyShift+Z', desc: 'Redo'},\n {val: 'OSkeyK', desc: 'Insert Link'},\n {val: 'OSkeyP', desc: 'Insert Image'}\n ]\n },\n {\n title: 'Basic Formatting',\n commands: [\n {val: 'OSkeyA', desc: 'Select All'},\n {val: 'OSkeyB', desc: 'Bold'},\n {val: 'OSkeyI', desc: 'Italic'},\n {val: 'OSkeyU', desc: 'Underline'},\n {val: 'OSkeyS', desc: 'Strikethrough'},\n {val: 'OSkey]', desc: 'Increase Indent'},\n {val: 'OSkey[', desc: 'Decrease Indent'}\n ]\n },\n {\n title: 'Quote',\n commands: [\n {val: 'OSkey\\'', desc: 'Increase quote level'},\n {val: 'OSkeyShift+\\'', desc: 'Decrease quote level'}\n ]\n },\n {\n title: 'Image / Video',\n commands: [\n {val: 'OSkey+', desc: 'Resize larger'},\n {val: 'OSkey-', desc: 'Resize smaller'}\n ]\n },\n {\n title: 'Table',\n commands: [\n {val: 'Alt+Space', desc: 'Select table cell'},\n {val: 'Shift+Left/Right arrow', desc: 'Extend selection one cell'},\n {val: 'Shift+Up/Down arrow', desc: 'Extend selection one row'}\n ]\n },\n {\n title: 'Navigation',\n commands: [\n {val: 'OSkey/', desc: 'Shortcuts'},\n {val: 'Alt+F10', desc: 'Focus popup / toolbar'},\n {val: 'Esc', desc: 'Return focus to previous position'}\n ]\n }\n ],\n };\n }\n\n getToolbar(type: string = 'default') {\n if (type === 'default') {\n return {\n toolbarButtons: {\n moreText: {\n buttons: ['font-weight-drop', 'fontFamily', 'fontSize', 'textColor', 'clearFormatting', 'italic', 'strikeThrough', 'subscript', 'superscript', 'backgroundColor', 'inlineClass', 'inlineStyle'],\n buttonsVisible: 5\n },\n moreParagraph: {\n buttons: ['paragraphFormat', 'alignLeft', 'alignCenter', 'formatUL', 'quote', 'alignRight', 'alignJustify', 'formatOLSimple', 'formatOL', 'paragraphStyle', 'lineHeight', 'outdent', 'indent'],\n buttonsVisible: 5\n },\n moreRich: {\n buttons: ['insertLink', 'insertImage', 'insertVideo', 'insertHR', 'insertTable', 'emoticons', 'fontAwesome', 'specialCharacters', 'embedly', 'insertFile'],\n buttonsVisible: 4\n },\n moreMisc: {\n buttons: ['undo', 'redo', 'fullscreen', 'print', 'getPDF', 'spellChecker', 'selectAll', 'html', 'help'],\n align: 'right',\n buttonsVisible: 3\n }\n },\n toolbarButtonsSm: {\n moreText: {\n buttons: ['font-weight-drop', 'underline', 'strikeThrough', 'subscript', 'superscript', 'fontFamily', 'fontSize', 'textColor', 'backgroundColor', 'inlineClass', 'inlineStyle', 'clearFormatting'],\n buttonsVisible: 2\n },\n moreParagraph: {\n buttons: ['alignLeft', 'alignCenter', 'formatOLSimple', 'alignRight', 'alignJustify', 'formatOL', 'formatUL', 'paragraphFormat', 'paragraphStyle', 'lineHeight', 'outdent', 'indent', 'quote'],\n buttonsVisible: 2\n },\n moreRich: {\n buttons: ['insertLink', 'insertImage', 'insertVideo', 'insertTable', 'emoticons', 'fontAwesome', 'specialCharacters', 'embedly', 'insertFile', 'insertHR'],\n buttonsVisible: 2\n },\n moreMisc: {\n buttons: ['undo', 'redo', 'fullscreen', 'print', 'getPDF', 'spellChecker', 'selectAll', 'html', 'help'],\n align: 'right',\n buttonsVisible: 2\n }\n },\n };\n } else if (type === 'simple') {\n return {\n toolbarButtons: [['font-weight-drop', 'fontFamily', 'fontSize', 'textColor', 'clearFormatting'], ['paragraphFormat', 'alignLeft', 'alignCenter', 'formatUL', 'quote'], ['insertLink']],\n toolbarButtonsSm: [['font-weight-drop', 'fontFamily', 'fontSize', 'textColor', 'clearFormatting'], ['paragraphFormat', 'alignLeft', 'alignCenter', 'formatUL', 'quote'], ['insertLink']],\n };\n }\n\n }\n\n\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { SkApiService } from 'sk-front-lib/api';\nimport { ISkFile, SkArticle, SkFile } from 'sk-front-lib/model';\nimport { SkArticleService } from './sk-article.service';\n\n@Component({\n selector: 'sk-article-editor',\n templateUrl: './sk-article-editor.component.html',\n styleUrls: ['./sk-article-editor.component.scss']\n})\nexport class SkArticleEditorComponent implements OnInit, OnChanges {\n\n @Input() article: SkArticle;\n @Input() toolbarType: string = 'default';\n\n content: string;\n images: SkFile[];\n\n editorConfig;\n\n constructor(private _apiService: SkApiService,\n private _articleService: SkArticleService) {\n this._initOptions();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // ------------------------------------------1-----------------------------------------------------------\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n ngOnInit(): void {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this._initData();\n this._initOptions();\n }\n\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n public getData(): { content: string, images: SkFile[] } {\n return {content: this.content, images: this.images};\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n\n _initData() {\n if (!this.article) {\n return;\n }\n\n this.content = this.article.content;\n this.images = this.article.images || [];\n }\n\n _initOptions() {\n this.editorConfig = Object.assign({}, this._articleService.getBaseConfig(), {\n requestHeaders: {\n 'Authorization': 'Bearer ' + this._apiService.getToken(),\n 'ngsw-bypass': 'true'\n },\n imageUploadParams: {\n imageUrl: this._articleService.environment.apiServer + '/api/public/images/'\n },\n imageUploadParam: 'file',\n imageUploadRemoteUrls: true,\n imageUploadURL: this._articleService.environment.apiServer + '/external/froala/upload',\n\n fileUploadParams: {\n imageUrl: this._articleService.environment.apiServer + '/api/public/files/'\n },\n fileUploadParam: 'file',\n fileUploadURL: this._articleService.environment.apiServer + '/external/froala/upload',\n\n events: {\n 'image.inserted': ($img, response) => {\n this._addImage(JSON.parse(response).file);\n },\n 'image.removed': ($img) => {\n console.log($img, $img.dataset);\n for (let i = 0; i < $img.length; i++) {\n this._removeImage(Number($img[i].dataset.id));\n }\n }\n },\n ...this._articleService.getToolbar(this.toolbarType)\n });\n }\n\n _addImage(file: ISkFile) {\n this.images.push(new SkFile(file));\n }\n\n _removeImage(id: number) {\n const index = this.images.findIndex(value => value.id === id);\n if (index > -1) {\n this.images.splice(index, 1);\n }\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnDestroy,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport FroalaEditor from 'froala-editor';\n\n@Directive({\n selector: '[froalaEditor]',\n exportAs: 'froalaEditor',\n providers: [{\n provide: NG_VALUE_ACCESSOR, useExisting:\n forwardRef(() => SkFroalaEditorDirective),\n multi: true\n }]\n})\nexport class SkFroalaEditorDirective implements ControlValueAccessor, AfterViewInit, OnDestroy {\n\n constructor(el: ElementRef, private zone: NgZone) {\n\n const element: any = el.nativeElement;\n\n // check if the element is a special tag\n if (this.SPECIAL_TAGS.indexOf(element.tagName.toLowerCase()) != -1) {\n this._hasSpecialTag = true;\n }\n this._element = element;\n\n this.zone = zone;\n }\n\n // End ControlValueAccesor methods.\n\n // froalaEditor directive as input: store the editor options\n @Input() set froalaEditor(opts: any) {\n this._opts = this.clone(opts || this._opts);\n this._opts = {...this._opts};\n }\n\n // froalaModel directive as input: store initial editor content\n @Input() set froalaModel(content: any) {\n this.updateEditor(content);\n }\n\n // editor options\n private _opts: any = {\n immediateAngularModelUpdate: false,\n angularIgnoreAttrs: null\n };\n\n private _element: any;\n\n private SPECIAL_TAGS: string[] = ['img', 'button', 'input', 'a'];\n private INNER_HTML_ATTR: string = 'innerHTML';\n private _hasSpecialTag: boolean = false;\n\n // editor element\n private _editor: any;\n\n // initial editor content\n private _model: string;\n\n private _editorInitialized: boolean = false;\n\n private _oldModel: string = null;\n\n // froalaModel directive as output: update model if editor contentChanged\n @Output() froalaModelChange: EventEmitter<any> = new EventEmitter<any>();\n\n // froalaInit directive as output: send manual editor initialization\n @Output() froalaInit: EventEmitter<Object> = new EventEmitter<Object>();\n\n // Begin ControlValueAccesor methods.\n onChange = (_) => {\n }\n onTouched = () => {\n }\n\n // Form model content changed.\n writeValue(content: any): void {\n this.updateEditor(content);\n }\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // TODO: replace clone method with better possible alternate\n private clone(item) {\n const me = this;\n if (!item) {\n return item;\n } // null, undefined values check\n\n let types = [Number, String, Boolean],\n result;\n\n // normalizing primitives if someone did new String('aaa'), or new Number('444');\n types.forEach(function(type) {\n if (item instanceof type) {\n result = type(item);\n }\n });\n\n if (typeof result == 'undefined') {\n if (Object.prototype.toString.call(item) === '[object Array]') {\n result = [];\n item.forEach(function(child, index, array) {\n result[index] = me.clone(child);\n });\n } else if (typeof item == 'object') {\n // testing that this is DOM\n if (item.nodeType && typeof item.cloneNode == 'function') {\n result = item.cloneNode(true);\n } else if (!item.prototype) { // check that this is a literal\n if (item instanceof Date) {\n result = new Date(item);\n } else {\n // it is an object literal\n result = {};\n for (const i in item) {\n result[i] = me.clone(item[i]);\n }\n }\n } else {\n if (false && item.constructor) {\n result = new item.constructor();\n } else {\n result = item;\n }\n }\n } else {\n result = item;\n }\n }\n return result;\n }\n\n // Update editor with model contents.\n private updateEditor(content: any) {\n if (JSON.stringify(this._oldModel) == JSON.stringify(content)) {\n return;\n }\n\n if (!this._hasSpecialTag) {\n this._oldModel = content;\n } else {\n this._model = content;\n }\n\n if (this._editorInitialized) {\n if (!this._hasSpecialTag) {\n this._editor.html.set(content);\n } else {\n this.setContent();\n }\n } else {\n if (!this._hasSpecialTag) {\n this._element.innerHTML = content || '';\n } else {\n this.setContent();\n }\n }\n }\n\n // update model if editor contentChanged\n private updateModel() {\n this.zone.run(() => {\n\n let modelContent: any = null;\n\n if (this._hasSpecialTag) {\n\n const attributeNodes = this._element.attributes;\n const attrs = {};\n\n for (let i = 0; i < attributeNodes.length; i++) {\n\n const attrName = attributeNodes[i].name;\n if (this._opts.angularIgnoreAttrs && this._opts.angularIgnoreAttrs.indexOf(attrName) != -1) {\n continue;\n }\n\n attrs[attrName] = attributeNodes[i].value;\n }\n\n if (this._element.innerHTML) {\n attrs[this.INNER_HTML_ATTR] = this._element.innerHTML;\n }\n\n modelContent = attrs;\n } else {\n\n const returnedHtml: any = this._editor.html.get();\n if (typeof returnedHtml === 'string') {\n modelContent = returnedHtml;\n }\n }\n if (this._oldModel !== modelContent) {\n this._oldModel = modelContent;\n\n // Update froalaModel.\n this.froalaModelChange.emit(modelContent);\n\n // Update form model.\n this.onChange(modelContent);\n }\n\n });\n }\n\n private registerEvent(eventName, callback) {\n\n if (!eventName || !callback) {\n return;\n }\n\n if (!this._opts.events) {\n this._opts.events = {};\n }\n\n this._opts.events[eventName] = callback;\n }\n\n private initListeners() {\n const self = this;\n // Check if we have events on the editor.\n if (this._editor.events) {\n // bind contentChange and keyup event to froalaModel\n this._editor.events.on('contentChanged', function() {\n setTimeout(function() {\n self.updateModel();\n }, 0);\n });\n this._editor.events.on('mousedown', function() {\n setTimeout(function() {\n self.onTouched();\n }, 0);\n });\n\n if (this._opts.immediateAngularModelUpdate) {\n this._editor.events.on('keyup', function() {\n setTimeout(function() {\n self.updateModel();\n }, 0);\n });\n }\n }\n\n this._editorInitialized = true;\n }\n\n private createEditor() {\n if (this._editorInitialized) {\n return;\n }\n\n this.setContent(true);\n\n // init editor\n this.zone.runOutsideAngular(() => {\n // Add listeners on initialized event.\n if (!this._opts.events) { this._opts.events = {}; }\n\n // Register initialized event.\n this.registerEvent('initialized', this._opts.events && this._opts.events.initialized);\n const existingInitCallback = this._opts.events.initialized;\n // Default initialized event.\n if (!this._opts.events.initialized || !this._opts.events.initialized.overridden) {\n this._opts.events.initialized = () => {\n this.initListeners();\n existingInitCallback && existingInitCallback.call(this._editor, this);\n };\n this._opts.events.initialized.overridden = true;\n }\n\n // Initialize the Froala Editor.\n this._editor = new FroalaEditor(\n this._element,\n this._opts\n );\n });\n }\n\n private setHtml() {\n this._editor.html.set(this._model || '');\n\n // This will reset the undo stack everytime the model changes externally. Can we fix this?\n this._editor.undo.reset();\n this._editor.undo.saveStep();\n }\n\n private setContent(firstTime = false) {\n const self = this;\n\n // Set initial content\n if (this._model || this._model == '') {\n this._oldModel = this._model;\n if (this._hasSpecialTag) {\n\n const tags: Object = this._model;\n\n // add tags on element\n if (tags) {\n\n for (const attr in tags) {\n if (tags.hasOwnProperty(attr) && attr != this.INNER_HTML_ATTR) {\n this._element.setAttribute(attr, tags[attr]);\n }\n }\n\n if (tags.hasOwnProperty(this.INNER_HTML_ATTR)) {\n this._element.innerHTML = tags[this.INNER_HTML_ATTR];\n }\n }\n } else {\n if (firstTime) {\n this.registerEvent('initialized', function() {\n self.setHtml();\n });\n } else {\n self.setHtml();\n }\n }\n }\n }\n\n private destroyEditor() {\n if (this._editorInitialized) {\n this._editor.destroy();\n this._editorInitialized = false;\n }\n }\n\n private getEditor() {\n if (this._element) {\n return this._editor;\n }\n\n return null;\n }\n\n // send manual editor initialization\n private generateManualController() {\n const controls = {\n initialize: this.createEditor.bind(this),\n destroy: this.destroyEditor.bind(this),\n getEditor: this.getEditor.bind(this),\n };\n this.froalaInit.emit(controls);\n }\n\n // TODO not sure if ngOnInit is executed after @inputs\n ngAfterViewInit() {\n // check if output froalaInit is present. Maybe observers is private and should not be used?? TODO how to better test that an output directive is present.\n if (!this.froalaInit.observers.length) {\n this.createEditor();\n } else {\n this.generateManualController();\n }\n }\n\n ngOnDestroy() {\n this.destroyEditor();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SkArticleEditorComponent } from './sk-article-editor.component';\nimport { SkFroalaEditorDirective } from './sk-froala-editor.directive';\n\n@NgModule({\n declarations: [\n SkArticleEditorComponent,\n SkFroalaEditorDirective\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkArticleEditorComponent,\n SkFroalaEditorDirective\n ],\n providers: [\n ]\n})\nexport class SkArticleModule {\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { SkApiService } from 'sk-front-lib/api';\nimport { SkArticle, SkFile } from 'sk-front-lib/model';\n\n@Component({\n selector: 'sk-article-editor',\n templateUrl: './sk-article-editor-server.component.html',\n styleUrls: ['./sk-article-editor-server.component.scss']\n})\nexport class SkArticleEditorServerComponent implements OnInit, OnChanges {\n\n @Input() article: SkArticle;\n @Input() toolbarType: string = 'default';\n\n content: string;\n images: SkFile[];\n\n editorConfig;\n\n constructor(private _apiService: SkApiService) {\n this._initOptions();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // ------------------------------------------1-----------------------------------------------------------\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n ngOnInit(): void {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this._initData();\n this._initOptions();\n }\n\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n public getData(): { content: string, images: SkFile[] } {\n return {content: this.content, images: this.images};\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n\n _initData() {\n if (!this.article) {\n return;\n }\n\n this.content = this.article.content;\n this.images = this.article.images || [];\n }\n\n _initOptions() {\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SkArticleEditorServerComponent } from './sk-article-editor-server.component';\n\n@NgModule({\n declarations: [\n SkArticleEditorServerComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkArticleEditorServerComponent,\n ],\n providers: [\n ]\n})\nexport class SkArticleServerModule {\n static forRoot(environment): ModuleWithProviders<SkArticleServerModule> {\n return {\n ngModule: SkArticleServerModule,\n providers: []\n };\n }\n}\n"]}
|