@thecodeblogs/blog 0.11.7 → 0.13.0
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/esm2020/lib/components/entry-creator/entry-creator.component.mjs +347 -0
- package/esm2020/lib/components/entry-renderer/entry-renderer.component.mjs +108 -0
- package/esm2020/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.mjs +75 -0
- package/esm2020/lib/components/entry-selector-dialog/entry-selector-dialog-data.mjs +3 -0
- package/esm2020/lib/components/entry-selector-dialog/entry-selector-dialog.component.mjs +45 -0
- package/esm2020/lib/components/entry-summary/entry-summary.component.mjs +28 -0
- package/esm2020/lib/components/json-renderer/json-renderer.component.mjs +26 -0
- package/esm2020/lib/components/landing-page/landing-page.component.mjs +35 -0
- package/esm2020/lib/components/main/main.component.mjs +56 -0
- package/esm2020/lib/components/media-upload-modal/media-upload-modal.component.mjs +160 -0
- package/esm2020/lib/components/outline-view/outline-view.component.mjs +40 -0
- package/esm2020/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.mjs +3 -0
- package/esm2020/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.mjs +33 -0
- package/esm2020/lib/components/side-navigation/side-navigation.component.mjs +151 -0
- package/esm2020/lib/components/static-html/static-html.component.mjs +28 -0
- package/esm2020/lib/core.module.mjs +207 -0
- package/esm2020/lib/data/base.mjs +7 -0
- package/esm2020/lib/data/content-type.mjs +10 -0
- package/esm2020/lib/data/content.mjs +5 -0
- package/esm2020/lib/data/core-event-type.enum.mjs +7 -0
- package/esm2020/lib/data/core-event.mjs +7 -0
- package/esm2020/lib/data/entry.mjs +80 -0
- package/esm2020/lib/data/guid.mjs +12 -0
- package/esm2020/lib/data/identity.mjs +2 -0
- package/esm2020/lib/data/list-response.mjs +3 -0
- package/esm2020/lib/data/section.mjs +11 -0
- package/esm2020/lib/data/tag.mjs +7 -0
- package/esm2020/lib/data/visitor-profile.mjs +3 -0
- package/esm2020/lib/pipes/LinkyPipe.mjs +15 -0
- package/esm2020/lib/pipes/TimeAgoPipe.mjs +100 -0
- package/esm2020/lib/routing/routes.mjs +25 -0
- package/esm2020/lib/services/analytics/interaction.service.mjs +20 -0
- package/esm2020/lib/services/analytics/view.service.mjs +20 -0
- package/esm2020/lib/services/comment.service.mjs +28 -0
- package/esm2020/lib/services/django-rest-framework-endpoint.service.mjs +50 -0
- package/esm2020/lib/services/entry.service.mjs +73 -0
- package/esm2020/lib/services/identity.service.mjs +20 -0
- package/esm2020/lib/services/interaction.mjs +3 -0
- package/esm2020/lib/services/prism.service.mjs +39 -0
- package/esm2020/lib/services/static-html.service.mjs +22 -0
- package/esm2020/lib/services/tag.service.mjs +33 -0
- package/esm2020/lib/services/upload.mjs +3 -0
- package/esm2020/lib/services/upload.service.mjs +22 -0
- package/esm2020/lib/services/view.mjs +3 -0
- package/esm2020/lib/services/visitor-profile.service.mjs +35 -0
- package/esm2020/public-api.mjs +45 -0
- package/esm2020/thecodeblogs-blog.mjs +5 -0
- package/fesm2015/thecodeblogs-blog.mjs +1826 -0
- package/fesm2015/thecodeblogs-blog.mjs.map +1 -0
- package/fesm2020/thecodeblogs-blog.mjs +1820 -0
- package/fesm2020/thecodeblogs-blog.mjs.map +1 -0
- package/lib/components/entry-creator/entry-creator.component.d.ts +3 -0
- package/lib/components/entry-renderer/entry-renderer.component.d.ts +3 -0
- package/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.d.ts +3 -0
- package/lib/components/entry-selector-dialog/entry-selector-dialog.component.d.ts +3 -0
- package/lib/components/entry-summary/entry-summary.component.d.ts +3 -0
- package/lib/components/json-renderer/json-renderer.component.d.ts +3 -0
- package/lib/components/landing-page/landing-page.component.d.ts +3 -0
- package/lib/components/main/main.component.d.ts +3 -0
- package/lib/components/media-upload-modal/media-upload-modal.component.d.ts +3 -0
- package/lib/components/outline-view/outline-view.component.d.ts +3 -0
- package/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.d.ts +3 -0
- package/lib/components/side-navigation/side-navigation.component.d.ts +3 -0
- package/lib/components/static-html/static-html.component.d.ts +3 -0
- package/lib/core.module.d.ts +40 -0
- package/lib/pipes/LinkyPipe.d.ts +3 -0
- package/lib/pipes/TimeAgoPipe.d.ts +3 -0
- package/lib/services/analytics/interaction.service.d.ts +3 -0
- package/lib/services/analytics/view.service.d.ts +3 -0
- package/lib/services/comment.service.d.ts +3 -0
- package/lib/services/django-rest-framework-endpoint.service.d.ts +3 -0
- package/lib/services/entry.service.d.ts +3 -0
- package/lib/services/identity.service.d.ts +3 -0
- package/lib/services/prism.service.d.ts +3 -0
- package/lib/services/static-html.service.d.ts +3 -0
- package/lib/services/tag.service.d.ts +3 -0
- package/lib/services/upload.service.d.ts +3 -0
- package/lib/services/visitor-profile.service.d.ts +3 -0
- package/package.json +36 -24
- package/thecodeblogs-blog.d.ts +1 -3
- package/bundles/thecodeblogs-blog.umd.js +0 -2279
- package/bundles/thecodeblogs-blog.umd.js.map +0 -1
- package/bundles/thecodeblogs-blog.umd.min.js +0 -17
- package/bundles/thecodeblogs-blog.umd.min.js.map +0 -1
- package/esm2015/lib/components/entry-creator/entry-creator.component.js +0 -336
- package/esm2015/lib/components/entry-renderer/entry-renderer.component.js +0 -108
- package/esm2015/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.js +0 -79
- package/esm2015/lib/components/entry-selector-dialog/entry-selector-dialog-data.js +0 -3
- package/esm2015/lib/components/entry-selector-dialog/entry-selector-dialog.component.js +0 -41
- package/esm2015/lib/components/entry-summary/entry-summary.component.js +0 -29
- package/esm2015/lib/components/json-renderer/json-renderer.component.js +0 -29
- package/esm2015/lib/components/landing-page/landing-page.component.js +0 -37
- package/esm2015/lib/components/main/main.component.js +0 -55
- package/esm2015/lib/components/media-upload-modal/media-upload-modal.component.js +0 -155
- package/esm2015/lib/components/outline-view/outline-view.component.js +0 -40
- package/esm2015/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.js +0 -3
- package/esm2015/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.js +0 -28
- package/esm2015/lib/components/side-navigation/side-navigation.component.js +0 -154
- package/esm2015/lib/components/static-html/static-html.component.js +0 -33
- package/esm2015/lib/core.module.js +0 -125
- package/esm2015/lib/data/base.js +0 -7
- package/esm2015/lib/data/content-type.js +0 -10
- package/esm2015/lib/data/content.js +0 -5
- package/esm2015/lib/data/core-event-type.enum.js +0 -7
- package/esm2015/lib/data/core-event.js +0 -7
- package/esm2015/lib/data/entry.js +0 -80
- package/esm2015/lib/data/guid.js +0 -12
- package/esm2015/lib/data/identity.js +0 -2
- package/esm2015/lib/data/list-response.js +0 -3
- package/esm2015/lib/data/section.js +0 -11
- package/esm2015/lib/data/tag.js +0 -7
- package/esm2015/lib/data/visitor-profile.js +0 -3
- package/esm2015/lib/pipes/LinkyPipe.js +0 -11
- package/esm2015/lib/pipes/TimeAgoPipe.js +0 -100
- package/esm2015/lib/routing/routes.js +0 -25
- package/esm2015/lib/services/analytics/interaction.service.js +0 -22
- package/esm2015/lib/services/analytics/view.service.js +0 -22
- package/esm2015/lib/services/comment.service.js +0 -30
- package/esm2015/lib/services/django-rest-framework-endpoint.service.js +0 -52
- package/esm2015/lib/services/entry.service.js +0 -74
- package/esm2015/lib/services/identity.service.js +0 -22
- package/esm2015/lib/services/interaction.js +0 -3
- package/esm2015/lib/services/prism.service.js +0 -37
- package/esm2015/lib/services/static-html.service.js +0 -24
- package/esm2015/lib/services/tag.service.js +0 -35
- package/esm2015/lib/services/upload.js +0 -3
- package/esm2015/lib/services/upload.service.js +0 -24
- package/esm2015/lib/services/view.js +0 -3
- package/esm2015/lib/services/visitor-profile.service.js +0 -39
- package/esm2015/public-api.js +0 -45
- package/esm2015/thecodeblogs-blog.js +0 -8
- package/fesm2015/thecodeblogs-blog.js +0 -1786
- package/fesm2015/thecodeblogs-blog.js.map +0 -1
- package/thecodeblogs-blog.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../projects/core/src/lib/data/content-type.ts","../../../projects/core/src/lib/data/guid.ts","../../../projects/core/src/lib/data/base.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/core/src/lib/data/content.ts","../../../projects/core/src/lib/data/entry.ts","../../../projects/core/src/lib/data/core-event-type.enum.ts","../../../projects/core/src/lib/data/list-response.ts","../../../projects/core/src/lib/data/section.ts","../../../projects/core/src/lib/data/core-event.ts","../../../projects/core/src/lib/data/visitor-profile.ts","../../../projects/core/src/lib/services/comment.service.ts","../../../projects/core/src/lib/services/django-rest-framework-endpoint.service.ts","../../../projects/core/src/lib/services/entry.service.ts","../../../projects/core/src/lib/services/identity.service.ts","../../../projects/core/src/lib/services/prism.service.ts","../../../projects/core/src/lib/services/upload.service.ts","../../../projects/core/src/lib/services/upload.ts","../../../projects/core/src/lib/services/analytics/view.service.ts","../../../projects/core/src/lib/services/analytics/interaction.service.ts","../../../projects/core/src/lib/services/view.ts","../../../projects/core/src/lib/services/interaction.ts","../../../projects/core/src/lib/services/visitor-profile.service.ts","../../../projects/core/src/lib/services/static-html.service.ts","../../../projects/core/src/lib/data/tag.ts","../../../projects/core/src/lib/services/tag.service.ts","../../../projects/core/src/lib/components/entry-selector-dialog/entry-selector-dialog-data.ts","../../../projects/core/src/lib/components/entry-selector-dialog/entry-selector-dialog.component.ts","../../../projects/core/src/lib/components/media-upload-modal/media-upload-modal.component.ts","../../../projects/core/src/lib/components/entry-creator/entry-creator.component.ts","../../../projects/core/src/lib/components/entry-renderer/entry-renderer.component.ts","../../../projects/core/src/lib/components/entry-summary/entry-summary.component.ts","../../../projects/core/src/lib/components/json-renderer/json-renderer.component.ts","../../../projects/core/src/lib/components/landing-page/landing-page.component.ts","../../../projects/core/src/lib/components/outline-view/outline-view.component.ts","../../../projects/core/src/lib/components/side-navigation/side-navigation.component.ts","../../../projects/core/src/lib/components/static-html/static-html.component.ts","../../../projects/core/src/lib/components/main/main.component.ts","../../../projects/core/src/lib/components/entry-renderer-wrapper/entry-renderer-wrapper.component.ts","../../../projects/core/src/lib/pipes/LinkyPipe.ts","../../../projects/core/src/lib/pipes/TimeAgoPipe.ts","../../../projects/core/src/lib/routing/routes.ts","../../../projects/core/src/lib/components/schedule-publish-dialog/schedule-publish-dialog-data.ts","../../../projects/core/src/lib/components/schedule-publish-dialog/schedule-publish-dialog.component.ts","../../../projects/core/src/lib/core.module.ts"],"names":["ContentType","Guid","prototype","newGuid","replace","c","r","Math","random","toString","this","id","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","__","constructor","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","TypeError","Content","_super","Base","KEY_MIMETYPE","require","CoreEventType","Entry","init","_this","should_publish_in_future","assign","create_date","Date","edit_date","publish_date","future_publish_date","version","tags","views","_friendly_views","sections","sort","orderBy","_a","order","Number","_b","_c","section","contents","showEditInformation","difference","floor","getProp","prop","__server_generated_properties","Section","data","type","CommentService","http","endpoint","adminEndpoint","getComments","entry","get","params","postComment","comment","post","patchComment","patch","Injectable","args","providedIn","HttpClient","DjangoRestFrameworkEndpointService","events","EventEmitter","triggerCoreEvent","obj","CoreEvent","handleResponse","handleListResponse","pipe","map","bind","getById","entity","val","CREATE","delete","DELETE","update","UPDATE","getListByUrl","url","EntryService","currentlyEditedEntry","Subject","sub","debounceTime","subscribe","e","HttpParams","set","JSON","stringify","response","console","log","err","createErr","results","result","push","getUnpublishedEntries","getBySlug","slug","getUnpublishedById","updateUnpublishedEntry","IdentityService","getMe","Error","PrismService","platformId","Prism","manual","highlightAll","isPlatformBrowser","decorators","Inject","PLATFORM_ID","UploadService","status_endpoint","upload_endpoint","ViewService","InteractionService","VisitorProfileService","deviceDetectorService","getVisitorProfile","deviceInfo","getDeviceInfo","vp","VisitorProfile","telemetry","name","os","family","browser","browser_version","device","os_version","language","navigator","DeviceDetectorService","StaticHtmlService","domSanitizer","mapStaticHtml","htmlString","isTrusted","sanitize","SecurityContext","HTML","DomSanitizer","Tag","label","TagService","EntrySelectorDialogComponent","dialogRef","entryService","ngOnInit","entries","onNoClick","close","onYesClick","selectedId","localStorage","setItem","CURRENT_ENTRY","Component","selector","template","MatDialogRef","EntrySelectorDialogData","MAT_DIALOG_DATA","MediaUploadModalComponent","uploadService","allowedMimeTypes","uploadUrlKey","uploading","getCookie","ca","document","cookie","split","caLen","cookieName","indexOf","substring","pollForCompletion","uploadId","processed","imgLink","mimeType","mime_type","clearInterval","poller","uploader","FileUploader","itemAlias","authToken","headers","additionalParameter","csrf_token","removeAfterUpload","allowedMimeType","onCompleteItem","item","responseObj","parse","setInterval","onWhenAddingFileFailed","filter","options","error","file","addToQueue","uploadAll","onFileSelected","buildHost","location","protocol","hostname","port","ngOnDestroy","socketSub","complete","blobToFile","theBlob","fileName","lastModifiedDate","onPaste","ClipboardEvent","files","clipboardData","Input","HostListener","slugify","EntryCreatorComponent","tagService","identityService","cdr","dialog","separatorKeysCodes","ENTER","COMMA","TAB","removable","all_tags","tagCtrl","FormControl","publishDateControl","selectable","scheduling","customScheduleTime","today","scheduledDate","getHours","getMinutes","_filter","filterValue","toLowerCase","tag","add","event","input","trim","setValue","onChange","remove","fruit","index","splice","selected","option","viewValue","tagInput","nativeElement","refreshTags","loMap","t","filtered_tags","valueChanges","startWith","slice","createNewEntry","title","DEFAULT_NEW_ENTRY_TITLE","published","setTimeout","me","savedEntry","getItem","hours","minutes","ampm","uploadFilter","startUploader","content","open","componentInstance","afterClosed","additional","key","addSection","removeSection","confirm","sct","addContent","removeContent","ct","detectChanges","_currentlyEditedEntry","resetDate","startNew","seeEntries","width","animal","postPublishCallback","cancelScheduling","exposeScheduling","setDate","getDate","setTime","publish","onDateChange","setHours","setMinutes","firstTimeSplit","secondTimeSplit","ChangeDetectorRef","MatDialog","ViewChild","EntryRendererComponent","prismService","ngZone","commentService","router","comments","commentText","alert","editMode","date_obj","created_on","ngAfterViewChecked","runOutsideAngular","edit","navigateByUrl","then","preventDefault","mediaIsZip","approve","approved","rComment","unapprove","NgZone","Router","EntrySummaryComponent","routeTo","navigate","JsonRendererComponent","LandingPageComponent","sourceSub","unsubscribe","OutlineViewComponent","sectionDrop","diff","currentIndex","previousIndex","contentDrop","SideNavigationComponent","entriesByMonthAndYear","identity","getEntries","getEntriesWithUrl","concat","organizeEntries","entryWrapper","month","getMonth","year","getFullYear","sort_index","containers","this_1","entryContainer","month_year","container","newContainer","month_year_number","entry_a","entry_b","reverse","render","getMonthAndYearFromKey","subheading","parts","StaticHtmlComponent","staticHtmlService","refreshContent","innerHtml","bypassSecurityTrustHtml","ngOnChanges","changes","MainComponent","loaded","subs","Subscription","resizeSubject","NavigationEnd","urlAfterRedirects","includes","showLeftCol","showRightCol","innerWidth","window","collapseLeftColIfTooNarrow","onResize","EntryRendererWrapperComponent","route","viewService","interactionService","seeAllEntries","seeAll","toggle","getEntry","snapshot","paramMap","currentEntry","view","View","viewResponse","queryParams","campaign","interaction","Interaction","urlMinsCampaign","RegExp","routerSub","ActivatedRoute","LinkyPipe","transform","Autolinker","link","newWindow","stripPrefix","Pipe","TimeAgoPipe","changeDetectorRef","removeTimer","now","seconds","round","abs","getTime","timeToUpdate","isNaN","getSecondsUntilUpdate","timer","run","markForCheck","days","months","years","clearTimeout","min","hr","pure","routes","path","component","outlet","redirectTo","pathMatch","SchedulePublishDialogComponent","SchedulePublishDialogData","library","addIcons","faSpinner","NgModule","declarations","imports","CommonModule","RouterModule","FormsModule","ReactiveFormsModule","DragDropModule","MatCardModule","MatSidenavModule","MatButtonModule","MatInputModule","MatListModule","MatRadioModule","MatDialogModule","MatCheckboxModule","MatDividerModule","MatAutocompleteModule","MatChipsModule","MatIconModule","MatDatepickerModule","MatNativeDateModule","FontAwesomeModule","FileUploadModule","NgxMaterialTimepickerModule","providers","exports","FaIconLibrary"],"mappings":"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","sourcesContent":["export enum ContentType {\n TEXT = 'text',\n URL = 'url',\n CODE = 'code',\n IMAGE = 'image',\n MEDIA = 'media',\n HTML = 'html',\n}\n\n","export class Guid {\n newGuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n // tslint:disable-next-line:no-bitwise\n const r = Math.random() * 16 | 0,\n // tslint:disable-next-line:triple-equals no-bitwise\n v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}\n","import {Guid} from './guid';\n\nexport class Base {\n id: string;\n\n constructor() {\n this.id = new Guid().newGuid();\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import {Base} from './base';\nimport {ContentType} from './content-type';\n\nexport class Content extends Base {\n static KEY_MIMETYPE = 'mimeType';\n\n order: number;\n type: ContentType;\n value: string;\n title: string;\n source: string;\n description: string;\n additional: Array<{key: string, value: string}>;\n}\n","import {Section} from './section';\nimport {Base} from './base';\nimport {orderBy} from 'lodash';\nconst slugify = require('slugify');\n\nexport class Entry extends Base {\n __server_generated_properties: any;\n\n title: string;\n slug: string;\n create_date: Date;\n edit_date: Date;\n sections: Section[];\n version: number;\n published: boolean;\n publish_date: Date;\n tags: string[];\n views: number;\n\n should_publish_in_future = false;\n future_publish_date: Date;\n\n _friendly_views: string;\n\n constructor(init?: Partial<Entry>) {\n super();\n Object.assign(this, init);\n if (!this.create_date) {\n this.create_date = new Date();\n } else {\n this.create_date = new Date(this.create_date);\n }\n if (!this.edit_date) {\n this.edit_date = new Date();\n } else {\n this.edit_date = new Date(this.edit_date);\n }\n if (this.publish_date) {\n this.publish_date = new Date(this.publish_date);\n }\n if (this.future_publish_date) {\n this.future_publish_date = new Date(this.future_publish_date);\n }\n if (!this.version) {\n this.version = 1;\n }\n if (!this.tags) {\n this.tags = [];\n }\n if (this.views) {\n if (this.views < 10) {\n this._friendly_views = 'Less than ten';\n }\n else if (10 < this.views && this.views < 100) {\n this._friendly_views = 'Around one hundred';\n }\n else {\n this._friendly_views = this.views.toString();\n }\n }\n if (!this.sections) {\n this.sections = [];\n }\n // For entries that existed before this variable was introduced, the server will return undefined. If this\n // stays undefined, it will violate the null constraints on the DB, so this code checks for both null\n // and undefined and then populates the value accordingly\n if (typeof(this.should_publish_in_future) === 'undefined' || this.should_publish_in_future === null) {\n this.should_publish_in_future = false;\n }\n }\n\n\n sort() {\n this.sections = orderBy(this.sections, ({order}) => Number(order), ['asc']);\n for (let i = 0; i < this.sections.length; i++) {\n this.sections[i].order = i * 10;\n }\n for (const section of this.sections) {\n section.contents = orderBy(section.contents, ({order}) => Number(order), ['asc']);\n for (let i = 0; i < section.contents.length; i++) {\n section.contents[i].order = i * 10;\n }\n }\n }\n\n showEditInformation() {\n // @ts-ignore\n const difference = Math.floor((this.create_date - this.edit_date) / (1000 * 60 * 60 * 24));\n return (difference > 1 || difference < -1);\n }\n\n getProp(prop: string) {\n if (this.__server_generated_properties) {\n return this.__server_generated_properties[prop];\n } else {\n return '';\n }\n }\n}\n","export enum CoreEventType {\n UPDATE = 'update',\n CREATE = 'create',\n DELETE = 'delete'\n}\n","export class ListResponse<T> {\n next: string;\n previous: string;\n results: T[];\n count: number;\n}\n","import {Content} from './content';\nimport {Base} from './base';\n\nexport class Section extends Base {\n subheading: string;\n order: number;\n contents: Content[];\n constructor() {\n super();\n if (!this.order) {\n this.order = -1;\n }\n this.contents = [];\n }\n}\n","import {CoreEventType} from './core-event-type.enum';\n\nexport class CoreEvent<T> {\n type: CoreEventType;\n data: T;\n\n constructor(data: T, type: CoreEventType) {\n this.data = data;\n this.type = type;\n }\n}\n","export class VisitorProfile {\n id: string;\n user: number| any;\n session_uid: string;\n telemetry: any;\n device: string;\n os_version: string;\n name: string;\n family: string;\n version: string;\n major: number;\n minor: number;\n patch: number;\n language: string;\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommentService {\n\n endpoint = '/blog_api/comments/';\n adminEndpoint = '/blog_api/admin/comments/';\n\n constructor(\n protected http: HttpClient,\n ) {\n }\n\n getComments(entry) {\n return this.http.get(this.endpoint, {params: {entry}});\n }\n postComment(comment) {\n return this.http.post(this.endpoint, comment, {params: {entry: comment.entry}});\n }\n patchComment(comment) {\n return this.http.patch(this.adminEndpoint + '/' + comment.id + '/', comment);\n }\n}\n","import {Injectable, EventEmitter} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {HttpClient} from '@angular/common/http';\nimport {ListResponse} from '../data/list-response';\nimport {CoreEvent} from '../data/core-event';\nimport {CoreEventType} from '../data/core-event-type.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DjangoRestFrameworkEndpointService<T> {\n constructor(\n protected http: HttpClient\n ) {\n }\n\n events = new EventEmitter<CoreEvent<T>>();\n endpoint = '';\n\n triggerCoreEvent(obj: T, type: CoreEventType) {\n this.events.next(new CoreEvent(obj, type));\n return obj;\n }\n\n handleResponse(obj: T) {\n return obj;\n }\n handleListResponse(obj: ListResponse<T>) {\n return obj;\n }\n\n get(): Observable<ListResponse<T>> {\n return this.http.get<ListResponse<T>>(this.endpoint).pipe(\n map(this.handleListResponse.bind(this))\n );\n }\n getById(id: string): Observable<T> {\n return this.http.get<T>(this.endpoint + id + '/').pipe(\n map(this.handleResponse.bind(this))\n );\n }\n create(entity: T): Observable<T> {\n return this.http.post<T>(this.endpoint + '/', entity).pipe(\n map((val) => this.triggerCoreEvent(val, CoreEventType.CREATE)),\n map(this.handleResponse.bind(this))\n );\n }\n delete(entity: T): Observable<T> {\n return this.http.delete<T>(this.endpoint + (entity as any).id + '/').pipe(\n map((val) => this.triggerCoreEvent(val, CoreEventType.DELETE)),\n map(this.handleResponse.bind(this))\n );\n }\n update(entity: T): Observable<T> {\n return this.http.patch<T>(this.endpoint + (entity as any).id + '/', entity).pipe(\n map((val) => this.triggerCoreEvent(val, CoreEventType.UPDATE)),\n map(this.handleResponse.bind(this))\n );\n }\n getListByUrl(url: string): Observable<ListResponse<T>> {\n return this.http.get<ListResponse<T>>(url).pipe(\n map(this.handleListResponse.bind(this))\n );\n }\n}\n","import {Injectable, EventEmitter} from '@angular/core';\nimport {DjangoRestFrameworkEndpointService} from '../services/django-rest-framework-endpoint.service';\nimport {ListResponse} from '../data/list-response';\nimport {Entry} from '../data/entry';\nimport {Observable, Subject} from 'rxjs';\nimport {debounceTime, map} from 'rxjs/operators';\nimport {loMap} from 'lodash';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {CoreEvent} from '../data/core-event';\nimport {CoreEventType} from '../data/core-event-type.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EntryService extends DjangoRestFrameworkEndpointService<Entry> {\n\n endpoint = '/blog_api/entries/';\n adminEndpoint = '/blog_api/admin/entries/';\n\n _currentlyEditedEntry: Entry;\n currentlyEditedEntry: Subject<Entry> = new Subject<Entry>();\n sub;\n\n handleResponse(obj: Entry): Entry {\n return new Entry(obj);\n }\n\n handleListResponse(obj: ListResponse<Entry>): ListResponse<Entry> {\n const response = obj;\n const results = [];\n for (const result of response.results) {\n results.push(new Entry(result));\n }\n response.results = results;\n return response;\n }\n\n\n constructor(\n protected http: HttpClient,\n ) {\n super(http);\n this.sub = this.currentlyEditedEntry.pipe(debounceTime(3000)).subscribe((e) => {\n e.edit_date = new Date();\n const params = new HttpParams().set('published', JSON.stringify(false)).set('defunct', JSON.stringify(false));\n\n this.http.patch(this.adminEndpoint + e.id + '/', e, {params}).pipe(\n map(this.handleResponse.bind(this))\n ).subscribe((response) => {\n this.triggerCoreEvent((response as Entry), CoreEventType.UPDATE);\n console.log('Synced ' + e.id + '...');\n }, (err) => {\n console.log('Error encountered syncing ' + e.id + ', trying to create...');\n this.http.post(this.adminEndpoint, e).pipe(\n map(this.handleResponse)\n ).subscribe((response) => {\n this.triggerCoreEvent((response as Entry), CoreEventType.CREATE);\n console.log('Created ' + e.id + '...');\n }, (createErr) => {\n console.log('Error creating ' + e.id);\n });\n });\n });\n }\n\n get(): Observable<ListResponse<Entry>> {\n return this.http.get(this.endpoint).pipe(\n map(this.handleListResponse.bind(this))\n );\n }\n\n getUnpublishedEntries() {\n const params = new HttpParams().set('published', JSON.stringify(false)).set('defunct', JSON.stringify(false));\n return this.http.get(this.adminEndpoint, {params});\n }\n\n getBySlug(slug: string) {\n return this.http.get(this.endpoint + slug + '/by_slug/').pipe(\n map(this.handleResponse.bind(this))\n );\n }\n getUnpublishedById(id: string): Observable<Entry> {\n const params = new HttpParams().set('published', JSON.stringify(false)).set('defunct', JSON.stringify(false));\n return this.http.get<Entry>(this.adminEndpoint + id, {params}).pipe(\n map(this.handleResponse.bind(this))\n );\n }\n updateUnpublishedEntry(entry: Entry): Observable<Entry> {\n const params = new HttpParams().set('published', JSON.stringify(false)).set('defunct', JSON.stringify(false));\n return this.http.patch<Entry>(this.adminEndpoint + entry.id + '/', entry, {params}).pipe(\n map((val) => this.triggerCoreEvent(val, CoreEventType.UPDATE)),\n map(this.handleResponse.bind(this))\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\nimport {Identity} from '../data/identity';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IdentityService {\n\n constructor(\n protected http: HttpClient\n ) { }\n getMe(): Observable<Identity> {\n throw new Error('You must provide an implementation for this');\n }\n}\n","import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\nimport 'clipboard';\n\nimport 'prismjs';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-sass';\nimport 'prismjs/components/prism-scss';\n\ndeclare var Prism: any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrismService {\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\n if (Prism) {\n Prism.manual = true;\n }\n }\n\n highlightAll() {\n if (isPlatformBrowser(this.platformId)) {\n Prism.highlightAll();\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {Upload} from '../services/upload';\nimport {HttpClient} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UploadService {\n\n static upload_endpoint = '/file_api/uploads/create_image/';\n static status_endpoint = '/file_api/uploads/{pk}/status';\n\n constructor(\n private http: HttpClient\n ) {\n }\n\n get(id: string): Observable<Upload> {\n return this.http.get<Upload>(UploadService.status_endpoint.replace('{pk}', id) + '/');\n }\n}\n","export class Upload {\n id: string;\n processed: boolean;\n path_to_file: string;\n mime_type: string;\n}\n","import {HttpClient} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {DjangoRestFrameworkEndpointService} from '../django-rest-framework-endpoint.service';\nimport {View} from '../view';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ViewService extends DjangoRestFrameworkEndpointService<View> {\n endpoint = '/blog_api/views/';\n\n constructor(\n public http: HttpClient,\n ) {\n super(http);\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {DjangoRestFrameworkEndpointService} from '../django-rest-framework-endpoint.service';\nimport {Interaction} from '../interaction';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InteractionService extends DjangoRestFrameworkEndpointService<Interaction> {\n endpoint = '/blog_api/interactions/';\n\n constructor(\n public http: HttpClient,\n ) {\n super(http);\n }\n}\n","export class View {\n id: string;\n entry: string;\n}\n","export class Interaction {\n id: string;\n content: any;\n}\n","import {HttpClient} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {DeviceDetectorService} from 'ngx-device-detector';\nimport {VisitorProfile} from '../data/visitor-profile';\nimport {DjangoRestFrameworkEndpointService} from '../services/django-rest-framework-endpoint.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VisitorProfileService extends DjangoRestFrameworkEndpointService<VisitorProfile> {\n endpoint = '/blog_api/visitor_profiles/';\n\n constructor(\n public http: HttpClient,\n public deviceDetectorService: DeviceDetectorService\n ) {\n super(http);\n }\n\n getVisitorProfile(): VisitorProfile {\n const deviceInfo = this.deviceDetectorService.getDeviceInfo();\n\n const vp = new VisitorProfile();\n\n vp.telemetry = deviceInfo;\n\n vp.name = deviceInfo.os;\n vp.family = deviceInfo.browser;\n vp.version = deviceInfo.browser_version;\n vp.device = deviceInfo.device;\n vp.os_version = deviceInfo.os_version;\n vp.language = navigator.language;\n\n return vp;\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport { Injectable, SecurityContext } from '@angular/core';\nimport {DomSanitizer} from '@angular/platform-browser';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StaticHtmlService {\n constructor(\n private domSanitizer: DomSanitizer,\n ) { }\n\n mapStaticHtml(htmlString: string, isTrusted: boolean): string {\n return isTrusted ?\n htmlString :\n this.domSanitizer.sanitize(SecurityContext.HTML, htmlString);\n }\n}\n","export class Tag {\n constructor(obj: any) {\n this.id = obj.id;\n this.label = obj.label;\n }\n id: number;\n label: string;\n}\n","import {HttpClient} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {ListResponse} from '../data/list-response';\nimport {Tag} from '../data/tag';\nimport {DjangoRestFrameworkEndpointService} from './django-rest-framework-endpoint.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TagService extends DjangoRestFrameworkEndpointService<Tag> {\n endpoint = '/blog_api/tags/';\n\n handleResponse(obj: Tag): Tag{\n return new Tag(obj);\n }\n\n handleListResponse(obj: ListResponse<Tag>): ListResponse<Tag> {\n const response = obj;\n const results = [];\n for (let i = 0; i < response.results.length; i++) {\n results.push(new Tag(response.results[i]));\n }\n response.results = results;\n return response;\n }\n\n constructor(\n protected http: HttpClient,\n ) {\n super(http);\n }\n}\n","export class EntrySelectorDialogData {\n}\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {EntrySelectorDialogData} from '../../components/entry-selector-dialog/entry-selector-dialog-data';\nimport {EntryService} from '../../services/entry.service';\n\n@Component({\n selector: 'app-entry-selector-dialog',\n templateUrl: './entry-selector-dialog.component.html',\n styleUrls: ['./entry-selector-dialog.component.scss']\n})\nexport class EntrySelectorDialogComponent implements OnInit {\n\n static CURRENT_ENTRY = 'current_entry';\n\n entries;\n selectedId: string;\n\n constructor(\n public dialogRef: MatDialogRef<EntrySelectorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: EntrySelectorDialogData,\n private entryService: EntryService,\n ) {\n }\n\n ngOnInit(): void {\n this.entryService.getUnpublishedEntries().subscribe((next) => {\n this.entries = (next as any).results;\n });\n }\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n\n onYesClick(): void {\n this.entryService.getUnpublishedById(this.selectedId).subscribe((entry) => {\n localStorage.setItem(EntrySelectorDialogComponent.CURRENT_ENTRY, JSON.stringify(entry));\n entry.sort();\n this.entryService.currentlyEditedEntry.next(entry);\n this.dialogRef.close();\n });\n }\n}\n","import {Component, HostListener, Input, OnInit, OnDestroy} from '@angular/core';\nimport {FileUploader} from 'ng2-file-upload';\nimport {MatDialogRef} from '@angular/material/dialog';\n\nimport {DjangoRestFrameworkEndpointService} from '../../services/django-rest-framework-endpoint.service';\nimport {UploadService} from '../../services/upload.service';\n\n@Component({\n selector: 'app-media-upload-modal',\n templateUrl: './media-upload-modal.component.html',\n styleUrls: ['./media-upload-modal.component.css']\n})\nexport class MediaUploadModalComponent implements OnInit, OnDestroy {\n\n @Input() allowedMimeTypes = [\n 'image/jpeg',\n 'image/gif',\n 'image/png',\n 'image/jpg',\n 'video/mp4',\n 'video/webm',\n 'video/ogg',\n ];\n\n @Input() uploadUrlKey = 'path_to_file';\n\n imgLink;\n mimeType;\n socketSub;\n error;\n public uploader: FileUploader;\n uploadId;\n uploading = false;\n @Input() file;\n\n poller;\n\n static getCookie(name: string) {\n const ca: Array<string> = document.cookie.split(';');\n const caLen: number = ca.length;\n const cookieName = `${name}=`;\n let c: string;\n\n for (let i = 0; i < caLen; i += 1) {\n c = ca[i].replace(/^\\s+/g, '');\n if (c.indexOf(cookieName) === 0) {\n return c.substring(cookieName.length, c.length);\n }\n }\n return '';\n }\n\n constructor(\n public dialogRef: MatDialogRef<MediaUploadModalComponent>,\n private uploadService: UploadService\n ) {\n }\n\n\n pollForCompletion() {\n this.uploadService.get(this.uploadId).subscribe((response) => {\n if (response.processed) {\n this.imgLink = response[this.uploadUrlKey];\n this.mimeType = response.mime_type;\n clearInterval(this.poller);\n this.poller = null;\n this.uploading = false;\n }\n });\n }\n\n\n ngOnInit(): void {\n\n this.uploader = new FileUploader(\n {\n url: UploadService.upload_endpoint,\n itemAlias: 'file',\n authToken: '',\n headers: [\n {name: 'X-CSRFToken', value: MediaUploadModalComponent.getCookie('csrftoken')},\n ],\n additionalParameter: {csrf_token: MediaUploadModalComponent.getCookie('csrftoken')},\n removeAfterUpload: true,\n allowedMimeType: this.allowedMimeTypes,\n }\n );\n\n this.uploader.onCompleteItem = (item, response) => {\n const responseObj = JSON.parse(response);\n this.uploadId = responseObj.id;\n this.poller = setInterval(this.pollForCompletion.bind(this), 2000);\n };\n\n this.uploader.onWhenAddingFileFailed = (item, filter, options) => {\n this.error = 'This file is not a supported mimetype.';\n this.uploading = false;\n };\n\n if (this.file) {\n this.uploader.addToQueue([this.file]);\n this.uploader.uploadAll();\n this.uploading = true;\n }\n }\n\n onFileSelected(e) {\n this.uploader.uploadAll();\n this.uploading = true;\n }\n\n buildHost(url) {\n return location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + url;\n }\n\n close() {\n this.dialogRef.close();\n }\n\n ngOnDestroy(): void {\n if (this.socketSub) {\n this.socketSub.complete();\n this.socketSub = null;\n }\n }\n\n blobToFile(theBlob, fileName) {\n // A Blob() is almost a File() - it's just missing the two properties below which we will add\n theBlob.lastModifiedDate = new Date();\n theBlob.name = fileName;\n return theBlob;\n }\n\n @HostListener('document:paste', ['$event'])\n onPaste(e) {\n if (e instanceof ClipboardEvent) {\n const files = e.clipboardData.files;\n if (files) {\n if (files.length < 1) {\n // const items = e.clipboardData.items;\n // for(let i = 0; i < items.length; i++) {\n // const item = items[i];\n // item.getAsString((text) => {\n // try {\n // const url = new URL(text);\n // if(url) {\n // fetch(text)\n // .then(res => res.blob()) // Gets the response and returns it as a blob\n // .then(blob => {\n // const file = this.blobToFile(blob, 'web-created')\n // this.uploader.addToQueue([file])\n // this.uploader.uploadAll();\n // this.uploading = true;\n // });\n // }\n // } catch(e) {\n //\n // }\n // });\n // }\n } else if (files.length > 1) {\n console.log('Multiple files detected');\n } else {\n for (let i = 0; i < files.length; i++) {\n this.uploader.addToQueue([files[i]]);\n }\n this.uploader.uploadAll();\n this.uploading = true;\n }\n } else {\n console.log('Stuff not working');\n }\n }\n }\n}\n","import {COMMA, ENTER, TAB} from '@angular/cdk/keycodes';\nimport {ChangeDetectorRef, Component, OnInit, ViewChild, ElementRef, EventEmitter, Output, Input} from '@angular/core';\n\nimport {Entry} from '../../data/entry';\nimport {Section} from '../../data/section';\nimport {Content} from '../../data/content';\nimport {ContentType} from '../../data/content-type';\nimport {Identity} from '../../data/identity';\n\nimport {EntryService} from '../../services/entry.service';\nimport {IdentityService} from '../../services/identity.service';\n\nimport {map as loMap, filter} from 'lodash';\nimport {MatDialog} from '@angular/material/dialog';\nimport {MatAutocompleteSelectedEvent, MatAutocomplete} from '@angular/material/autocomplete';\nimport {EntrySelectorDialogComponent} from '../../components/entry-selector-dialog/entry-selector-dialog.component';\nimport {FileUploader} from 'ng2-file-upload';\nimport {MediaUploadModalComponent} from '../../components/media-upload-modal/media-upload-modal.component';\nimport {Observable} from 'rxjs';\nimport {map, startWith} from 'rxjs/operators';\nimport {FormControl} from '@angular/forms';\nimport {MatChipInputEvent} from '@angular/material/chips';\nimport {TagService} from '../../services/tag.service';\nimport {SchedulePublishDialogComponent} from '../schedule-publish-dialog/schedule-publish-dialog.component';\nconst slugify = require('slugify');\n\n@Component({\n selector: 'app-entry-creator',\n templateUrl: './entry-creator.component.html',\n styleUrls: ['./entry-creator.component.scss']\n})\nexport class EntryCreatorComponent implements OnInit {\n\n static CURRENT_ENTRY = 'current_entry';\n static DEFAULT_NEW_ENTRY_TITLE = 'A New Entry';\n\n ContentType = ContentType;\n Object = Object;\n\n entry: Entry = new Entry();\n me: Identity;\n\n separatorKeysCodes: number[] = [ENTER, COMMA, TAB];\n removable = true;\n tags: string[];\n all_tags: string[] = ['Angular', 'Bash', 'MacOS', 'Typescript', 'NPM', 'Databases'];\n filtered_tags: Observable<string[]>;\n @ViewChild('tagInput') tagInput: ElementRef<HTMLInputElement>;\n @ViewChild('tagauto') matAutocomplete: MatAutocomplete;\n\n tagCtrl = new FormControl();\n publishDateControl = new FormControl();\n\n tag_to_add: string;\n selectable = false;\n\n scheduling = false;\n customScheduleTime = '';\n today = new Date();\n hours: number;\n minutes: number;\n\n @Input() allowedMimeTypes = [\n 'image/jpeg',\n 'image/gif',\n 'image/png',\n 'image/jpg',\n 'video/mp4',\n 'video/webm',\n 'video/ogg',\n ];\n\n @Input() uploadUrlKey = 'path_to_file';\n\n public uploader: FileUploader = new FileUploader(\n {\n url: '/file_api/uploads/create_image/',\n itemAlias: 'file',\n authToken: '',\n headers: [\n {\n name: 'X-CSRFToken',\n value: EntryCreatorComponent.getCookie('csrftoken')\n },\n ],\n additionalParameter: {\n 'csrf_token': EntryCreatorComponent.getCookie('csrftoken')\n },\n removeAfterUpload: true,\n allowedMimeType: this.allowedMimeTypes,\n }\n );\n\n static getCookie(name: string) {\n const ca: Array<string> = document.cookie.split(';');\n const caLen: number = ca.length;\n const cookieName = `${name}=`;\n let c: string;\n\n for (let i = 0; i < caLen; i += 1) {\n c = ca[i].replace(/^\\s+/g, '');\n if (c.indexOf(cookieName) === 0) {\n return c.substring(cookieName.length, c.length);\n }\n }\n return '';\n }\n\n constructor(\n private entryService: EntryService,\n private tagService: TagService,\n private identityService: IdentityService,\n private cdr: ChangeDetectorRef,\n private dialog: MatDialog,\n ) {\n const scheduledDate = new Date();\n this.customScheduleTime = scheduledDate.getHours() + ':' + scheduledDate.getMinutes() + ' AM';\n }\n\n private _filter(value: string): string[] {\n const filterValue = value.toLowerCase();\n return this.all_tags.filter(tag => tag.toLowerCase().indexOf(filterValue) === 0);\n }\n\n add(event: MatChipInputEvent): void {\n const input = event.input;\n const value = event.value;\n\n // Add our tag\n if ((value || '').trim()) {\n this.tags.push(value.trim());\n }\n\n // Reset the input value\n if (input) {\n input.value = '';\n }\n\n this.tagCtrl.setValue(null);\n this.onChange();\n }\n\n remove(fruit: string): void {\n const index = this.tags.indexOf(fruit);\n\n if (index >= 0) {\n this.tags.splice(index, 1);\n }\n this.onChange();\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.tags.push(event.option.viewValue);\n this.tagInput.nativeElement.value = '';\n this.tagCtrl.setValue(null);\n this.onChange();\n }\n\n refreshTags() {\n this.tagService.get().subscribe((response) => {\n this.all_tags = loMap(response.results, (t) => t.label);\n this.filtered_tags = this.tagCtrl.valueChanges.pipe(\n startWith(null),\n map((tag: string | null) => tag ? this._filter(tag) : this.all_tags.slice()));\n });\n }\n\n createNewEntry() {\n this.entry = new Entry();\n this.entry.title = EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE;\n this.entry.published = false;\n this.entry.version = 1;\n\n this.entryService.create(this.entry).subscribe((response) => {\n this.entry = response;\n this.entry.sort();\n setTimeout(() => {\n this.entryService.currentlyEditedEntry.next(this.entry);\n }, 10);\n });\n }\n\n ngOnInit() {\n this.refreshTags();\n this.identityService.getMe().subscribe((me) => {\n this.me = me;\n });\n\n const savedEntry =\n localStorage.getItem(EntryCreatorComponent.CURRENT_ENTRY);\n\n if (savedEntry) {\n this.entry = new Entry(JSON.parse(savedEntry));\n\n if (this.entry.should_publish_in_future && this.entry.future_publish_date < new Date()) {\n this.createNewEntry();\n }\n\n this.entry.sort();\n if (this.entry.should_publish_in_future) {\n // Restore scheduling settings\n this.scheduling = true;\n let hours = this.entry.future_publish_date.getHours();\n let minutes: string | number = this.entry.future_publish_date.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n if (hours >= 12) {\n hours = hours % 12;\n hours = hours ? hours : 12;\n }\n minutes = minutes < 10 ? '0' + minutes : minutes;\n this.customScheduleTime = hours + ':' + minutes + ' ' + ampm;\n }\n setTimeout(() => {\n this.entryService.currentlyEditedEntry.next(this.entry);\n }, 10);\n } else {\n this.createNewEntry();\n }\n\n this.uploader.onCompleteItem = (item, response) => {\n // const responseObj = JSON.parse(response)\n // this.uploadId = responseObj.id;\n };\n\n this.uploader.onWhenAddingFileFailed = (item, uploadFilter, options) => {\n // this.error = 'This file is not a supported mimetype.'\n // this.uploading = false;\n };\n\n this.tags = this.entry.tags;\n }\n\n onFileSelected(e) {\n this.uploader.uploadAll();\n }\n\n startUploader(content) {\n const dialogRef = this.dialog.open(MediaUploadModalComponent, {\n });\n dialogRef.componentInstance.allowedMimeTypes = this.allowedMimeTypes;\n dialogRef.componentInstance.uploadUrlKey = this.uploadUrlKey;\n dialogRef.afterClosed().subscribe(() => {\n content.value = dialogRef.componentInstance.imgLink;\n content.additional = [];\n content.additional.push({key: Content.KEY_MIMETYPE, value: dialogRef.componentInstance.mimeType});\n this.onChange();\n });\n }\n\n addSection() {\n this.entry.sections.push(new Section());\n this.onChange();\n }\n\n removeSection(section) {\n const remove = confirm('Are you sure you want to remove this section?');\n if (remove) {\n this.entry.sections =\n filter(this.entry.sections, (sct) => sct.id !== section.id);\n this.onChange();\n }\n }\n\n addContent(section) {\n section.contents.push(new Content());\n this.onChange();\n }\n\n removeContent(content) {\n const remove = confirm('Are you sure you want to remove this content?');\n\n if (remove) {\n for (const section of this.entry.sections) {\n section.contents = filter(\n section.contents,\n (ct) => ct.id !== content.id\n );\n }\n this.onChange();\n }\n }\n\n onChange() {\n this.entry.slug = slugify(this.entry.title).toLowerCase();\n localStorage.setItem(\n EntryCreatorComponent.CURRENT_ENTRY,\n JSON.stringify(this.entry)\n );\n this.entry.sort();\n this.cdr.detectChanges();\n this.entryService.currentlyEditedEntry.next(this.entry);\n this.entryService._currentlyEditedEntry = this.entry;\n }\n\n resetDate() {\n this.entry.create_date = new Date();\n this.entry.edit_date = new Date();\n\n this.onChange();\n }\n\n startNew() {\n const finish = confirm('Are you sure your finished? The JSON and entry displayed will be removed. Make sure you have already copied it.');\n if (finish) {\n\n this.entry = new Entry();\n this.entry.title = EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE;\n this.entry.published = false;\n this.entry.version = 1;\n\n this.entryService.currentlyEditedEntry.next(this.entry);\n localStorage.setItem(\n EntryCreatorComponent.CURRENT_ENTRY,\n JSON.stringify(this.entry)\n );\n this.entryService.create(this.entry).subscribe((next) => {\n });\n }\n }\n\n seeEntries() {\n const dialogRef = this.dialog.open(EntrySelectorDialogComponent, {\n width: '500px',\n data: {name: 'test', animal: 'test'}\n });\n\n dialogRef.afterClosed().subscribe((id) => {\n if (id) {\n this.entryService.getUnpublishedById(id).subscribe((result) => {\n const entry = result;\n this.entryService.currentlyEditedEntry.next(entry);\n localStorage.setItem(\n EntryCreatorComponent.CURRENT_ENTRY,\n JSON.stringify(entry)\n );\n this.entry = entry;\n });\n }\n });\n }\n\n postPublishCallback() {\n this.entry = new Entry();\n this.entry.title = EntryCreatorComponent.DEFAULT_NEW_ENTRY_TITLE;\n this.entry.published = false;\n this.entry.version = 1;\n this.entryService.currentlyEditedEntry.next(this.entry);\n localStorage.setItem(\n EntryCreatorComponent.CURRENT_ENTRY,\n JSON.stringify(this.entry)\n );\n this.entryService.create(this.entry).subscribe((next) => {\n this.tags = [];\n this.refreshTags();\n });\n }\n\n cancelScheduling() {\n this.entry.future_publish_date = null;\n this.entry.should_publish_in_future = false;\n this.scheduling = false;\n this.onChange();\n }\n\n exposeScheduling() {\n const scheduledDate = new Date();\n scheduledDate.setDate(scheduledDate.getDate() + 1);\n\n this.entry.future_publish_date = scheduledDate;\n this.setTime(this.customScheduleTime);\n\n this.entry.should_publish_in_future = true;\n this.scheduling = true;\n this.onChange();\n }\n publish() {\n const publish = confirm('Are you sure you want to publish? Once an article is published it is available to everyone.');\n if (publish) {\n this.entry.published = true;\n this.entry.publish_date = new Date();\n this.entry.edit_date = new Date();\n this.entryService.updateUnpublishedEntry(this.entry).subscribe(this.postPublishCallback.bind(this));\n }\n }\n delete() {\n const confirmDelete = confirm('Are you sure you want to delete this draft? Once it is deleted it cannot be recovered.');\n if (confirmDelete) {\n this.entryService.delete(this.entry).subscribe(() => {\n this.entry = null;\n });\n }\n }\n onDateChange() {\n this.entry.future_publish_date.setHours(this.hours);\n this.entry.future_publish_date.setMinutes(this.minutes);\n this.onChange();\n }\n\n\n setTime(e) {\n const firstTimeSplit = e.split(' ');\n const secondTimeSplit = firstTimeSplit[0].split(':');\n this.hours = Number(secondTimeSplit[0]);\n this.minutes = Number(secondTimeSplit[1]);\n\n if (firstTimeSplit[1] === 'PM') {\n this.hours = Number(this.hours) + 12;\n }\n\n this.entry.future_publish_date.setHours(this.hours);\n this.entry.future_publish_date.setMinutes(this.minutes);\n\n this.onChange();\n }\n}\n","import {AfterViewChecked, Component, Input, NgZone, OnDestroy, OnInit} from '@angular/core';\nimport {orderBy} from 'lodash';\nimport {ActivatedRoute, NavigationEnd, NavigationStart, Router} from '@angular/router';\n\nimport {Entry} from '../../data/entry';\nimport {Content} from '../../data/content';\nimport {ContentType} from '../../data/content-type';\nimport {Identity} from '../../data/identity';\n\nimport {IdentityService} from '../../services/identity.service';\nimport {EntryService} from '../../services/entry.service';\nimport {CommentService} from '../../services/comment.service';\nimport {PrismService} from '../../services/prism.service';\n\n\nimport {EntryCreatorComponent} from '../../components/entry-creator/entry-creator.component';\n\n@Component({\n selector: 'app-entry-renderer',\n templateUrl: './entry-renderer.component.html',\n styleUrls: ['./entry-renderer.component.scss']\n})\nexport class EntryRendererComponent implements OnInit, AfterViewChecked {\n\n me: Identity;\n @Input() entry: Entry;\n\n ContentType = ContentType;\n comments = [];\n commentText = '';\n\n alert = alert;\n\n @Input() editMode = false;\n\n constructor(\n private prismService: PrismService,\n private ngZone: NgZone,\n private identityService: IdentityService,\n private commentService: CommentService,\n private router: Router,\n private entryService: EntryService,\n ) {\n }\n\n\n ngOnInit() {\n this.identityService.getMe().subscribe((me) => {\n this.me = me;\n });\n this.commentService.getComments(this.entry.id).subscribe((response) => {\n this.comments = (response as any).results;\n for (const comment of this.comments) {\n comment.date_obj = new Date(comment.created_on);\n }\n });\n }\n\n ngAfterViewChecked(): void {\n if (!this.editMode) {\n this.ngZone.runOutsideAngular(() => {\n try {\n this.prismService.highlightAll();\n } catch (e) {\n\n }\n });\n }\n }\n edit(entry: Entry) {\n entry.version++;\n entry.published = false;\n delete entry.publish_date;\n\n this.entryService.create(entry).subscribe((response) => {\n localStorage.setItem(EntryCreatorComponent.CURRENT_ENTRY, JSON.stringify(response));\n this.router.navigateByUrl('create(left-col:create//right-col:create)').then(() => {\n\n });\n });\n }\n postComment(e) {\n e.preventDefault();\n if (this.commentText !== '') {\n this.commentService.postComment({entry: this.entry.id, content: this.commentText}).subscribe((comment) => {\n this.comments.push(comment);\n });\n this.commentText = '';\n }\n }\n mediaIsZip(content: Content): boolean {\n let mediaIsZip = false;\n if (content.additional) {\n for (const add of content.additional) {\n if (add.key === Content.KEY_MIMETYPE) {\n if (add.value === 'application/zip') {\n mediaIsZip = true;\n }\n }\n }\n }\n return mediaIsZip;\n }\n approve(comment: any) {\n comment.approved = !comment.approved;\n this.commentService.patchComment(Object.assign({}, {approved: true}, comment)).subscribe((rComment) => {\n\n });\n }\n unapprove(comment: any) {\n comment.approved = !comment.approved;\n this.commentService.patchComment(Object.assign({}, {approved: false}, comment)).subscribe((rComment) => {\n\n });\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {Entry} from '../../data/entry';\nimport {ContentType} from '../../data/content-type';\n\n@Component({\n selector: 'app-entry-summary',\n templateUrl: './entry-summary.component.html',\n styleUrls: ['./entry-summary.component.scss']\n})\nexport class EntrySummaryComponent implements OnInit {\n\n ContentType = ContentType;\n\n @Input() entry: Entry;\n\n\n constructor(\n private router: Router,\n ) {\n }\n\n ngOnInit(): void {\n }\n\n routeTo(entry) {\n this.router.navigate(['/', 'blog', entry.slug]).then(() => {\n\n });\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {Entry} from '../../data/entry';\nimport {EntryService} from '../../services/entry.service';\n\n@Component({\n selector: 'app-json-renderer',\n templateUrl: './json-renderer.component.html',\n styleUrls: ['./json-renderer.component.scss']\n})\nexport class JsonRendererComponent implements OnInit {\n\n JSON = JSON;\n @Input() entry: Entry = new Entry();\n\n constructor(\n private entryService: EntryService,\n ) {\n }\n\n ngOnInit() {\n this.entryService.currentlyEditedEntry.subscribe((entry) => {\n this.entry = entry;\n });\n }\n\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {map} from 'lodash';\n\nimport {Entry} from '../../data/entry';\nimport {EntryService} from '../../services/entry.service';\n\n@Component({\n selector: 'app-landing-page',\n templateUrl: './landing-page.component.html',\n styleUrls: ['./landing-page.component.scss']\n})\nexport class LandingPageComponent implements OnInit, OnDestroy {\n\n JSON = JSON;\n\n entries;\n source;\n sourceSub;\n\n constructor(\n private router: Router,\n private entryService: EntryService,\n ) {\n\n }\n\n ngOnInit() {\n this.entryService.get().subscribe((response) => {\n this.entries = map((response as any).results.slice(0, 3), (result) => {\n return { id: result.id, entry: new Entry(result)};\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.sourceSub) {\n this.sourceSub.unsubscribe();\n this.sourceSub = null;\n }\n }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\n\nimport {Entry} from '../../data/entry';\nimport {EntryService} from '../../services/entry.service';\n\n@Component({\n selector: 'app-outline-view',\n templateUrl: './outline-view.component.html',\n styleUrls: ['./outline-view.component.scss']\n})\nexport class OutlineViewComponent implements OnInit {\n\n entry: Entry = new Entry();\n Math = Math;\n\n constructor(\n private entryService: EntryService\n ) {\n }\n\n ngOnInit() {\n this.entryService.currentlyEditedEntry.subscribe((entry) => {\n this.entry = entry;\n });\n }\n\n sectionDrop(e) {\n const entry = this.entry;\n const diff = e.currentIndex - e.previousIndex;\n entry.sections[e.previousIndex].order = e.currentIndex * 10 + (diff > 0 ? 1 : -1);\n entry.sort();\n this.entryService.currentlyEditedEntry.next(this.entry);\n }\n\n contentDrop(e, section) {\n const entry = this.entry;\n const diff = e.currentIndex - e.previousIndex;\n section.contents[e.previousIndex].order = e.currentIndex * 10 + (diff > 0 ? 1 : -1);\n entry.sort();\n this.entryService.currentlyEditedEntry.next(this.entry);\n }\n}\n","import {Component, EventEmitter, OnDestroy, OnInit, Output} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {filter} from 'lodash';\nimport {map} from 'lodash';\n\nimport {Entry} from '../../data/entry';\nimport {Identity} from '../../data/identity';\n\nimport {EntryService} from '../../services/entry.service';\nimport {IdentityService} from '../../services/identity.service';\n\n@Component({\n selector: 'app-side-navigation',\n templateUrl: './side-navigation.component.html',\n styleUrls: ['./side-navigation.component.scss']\n})\nexport class SideNavigationComponent implements OnInit, OnDestroy {\n\n sourceSub;\n identity: Identity;\n\n entries: {id: string, entry: Entry}[] = [];\n entriesByMonthAndYear: {month_year: string, month_year_number: number, entries: Entry[]}[] = [];\n\n constructor(\n private entryService: EntryService,\n private router: Router,\n private identityService: IdentityService,\n ) {\n }\n\n ngOnInit() {\n this.identityService.getMe().subscribe((identity) => {\n this.identity = identity;\n }, (err) => {\n this.identity = null;\n });\n\n this.getEntries();\n\n }\n\n getEntriesWithUrl(url: string) {\n this.entryService.getListByUrl(url).subscribe((response) => {\n this.entries = this.entries.concat(\n map((response as any).results, (result) => {\n return { id: result.id, entry: new Entry(result)};\n })\n );\n if ((response as any).next) {\n this.getEntriesWithUrl(response.next);\n } else {\n this.organizeEntries();\n }\n });\n }\n\n organizeEntries() {\n for (const entryWrapper of this.entries) {\n const entry = entryWrapper.entry;\n const create_date = new Date(entry.create_date);\n const month = create_date.getMonth();\n const year = create_date.getFullYear();\n const key = month + '/' + year;\n const sort_index = (year * 100) + month;\n const containers = filter(this.entriesByMonthAndYear, (entryContainer) => entryContainer.month_year === key);\n if (containers.length > 0) {\n const container = containers[0];\n const entriesWithId = filter(container.entries, (e) => e.id === entryWrapper.entry.id);\n if (entriesWithId.length === 0) {\n container.entries.push(entry);\n }\n } else {\n const newContainer = {month_year: key, month_year_number: sort_index, entries: [entry]};\n this.entriesByMonthAndYear.push(newContainer);\n }\n }\n this.entriesByMonthAndYear.sort(\n (entry_a, entry_b) => {\n return entry_a.month_year_number - entry_b.month_year_number;\n });\n this.entriesByMonthAndYear.reverse();\n }\n\n getEntries() {\n this.entryService.get().subscribe((response) => {\n this.entries = map(response.results, (result) => {\n return { id: result.id, entry: new Entry(result)};\n });\n if ((response as any).next) {\n this.getEntriesWithUrl(response.next);\n } else {\n this.organizeEntries();\n }\n });\n }\n\n render() {\n }\n\n routeTo(entry) {\n if (!entry) {\n this.router.navigateByUrl('create(left-col:create//right-col:create)').then(() => {\n\n });\n } else {\n this.router.navigate(['/', 'blog', entry.slug]).then(() => {\n // Noop\n });\n }\n }\n\n getMonthAndYearFromKey(key: string) {\n let subheading = '';\n const parts = key.split('/');\n\n switch (Number(parts[0])) {\n case 0:\n subheading += 'January ';\n break;\n case 1:\n subheading += 'February ';\n break;\n case 2:\n subheading += 'March ';\n break;\n case 3:\n subheading += 'April ';\n break;\n case 4:\n subheading += 'May ';\n break;\n case 5:\n subheading += 'June ';\n break;\n case 6:\n subheading += 'July ';\n break;\n case 7:\n subheading += 'August ';\n break;\n case 8:\n subheading += 'September ';\n break;\n case 9:\n subheading += 'October ';\n break;\n case 10:\n subheading += 'November ';\n break;\n case 11:\n subheading += 'December ';\n break;\n default:\n subheading += 'January ';\n }\n subheading += parts[1];\n\n return subheading;\n }\n\n ngOnDestroy(): void {\n if (this.sourceSub) {\n this.sourceSub.unsubscribe();\n this.sourceSub = null;\n }\n }\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\nimport {StaticHtmlService} from '../../services/static-html.service';\n\n@Component({\n selector: 'app-static-html',\n templateUrl: './static-html.component.html',\n styleUrls: ['./static-html.component.css']\n})\nexport class StaticHtmlComponent implements OnInit, OnChanges {\n\n innerHtml: SafeHtml;\n @Input() value;\n\n constructor(\n private staticHtmlService: StaticHtmlService,\n private domSanitizer: DomSanitizer\n ) { }\n\n refreshContent() {\n this.innerHtml = this.domSanitizer.bypassSecurityTrustHtml(this.staticHtmlService.mapStaticHtml(this.value, false));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.refreshContent();\n }\n\n ngOnInit(): void {\n this.refreshContent();\n }\n\n}\n","import { Component, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {Subject, Subscription} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\n\n@Component({\n selector: 'lib-main',\n templateUrl: './main.component.html',\n styleUrls: ['./main.component.css']\n})\nexport class MainComponent implements OnInit, OnDestroy {\n\n loaded = true;\n subs: Subscription = new Subscription();\n showRightCol: boolean;\n showLeftCol: boolean;\n\n public innerWidth: any;\n\n resizeSubject = new Subject<number>();\n\n constructor(\n private router: Router,\n ) {\n\n }\n\n ngOnInit(): void {\n this.subs.add(this.router.events.subscribe((e) => {\n if (e instanceof NavigationEnd) {\n if (e.urlAfterRedirects.includes('create')) {\n this.showLeftCol = true;\n this.showRightCol = true;\n } else {\n this.showLeftCol = true;\n this.showRightCol = false;\n this.innerWidth = window.innerWidth;\n this.collapseLeftColIfTooNarrow();\n }\n }\n }));\n\n this.subs.add(this.resizeSubject.pipe(\n debounceTime(100)\n ).subscribe((width) => {\n this.innerWidth = width;\n this.collapseLeftColIfTooNarrow();\n }));\n }\n\n collapseLeftColIfTooNarrow() {\n this.showLeftCol = this.innerWidth >= 800;\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.resizeSubject.next(window.innerWidth);\n }\n\n ngOnDestroy(): void {\n this.subs.unsubscribe();\n }\n\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport {ActivatedRoute, NavigationEnd, Router} from '@angular/router';\nimport {InteractionService} from '../../services/analytics/interaction.service';\nimport {ViewService} from '../../services/analytics/view.service';\nimport {EntryService} from '../../services/entry.service';\nimport {Interaction} from '../../services/interaction';\nimport {View} from '../../services/view';\n\n@Component({\n selector: 'lib-entry-renderer-wrapper',\n templateUrl: './entry-renderer-wrapper.component.html',\n styleUrls: ['./entry-renderer-wrapper.component.css']\n})\nexport class EntryRendererWrapperComponent implements OnInit, OnDestroy {\n entries;\n currentEntry;\n seeAllEntries = false;\n routerSub;\n\n seeAll(toggle: boolean) {\n this.seeAllEntries = toggle;\n }\n\n constructor(\n private entryService: EntryService,\n private router: Router,\n private route: ActivatedRoute,\n private viewService: ViewService,\n private interactionService: InteractionService\n ) {\n }\n\n getEntry() {\n const slug = this.route.snapshot.paramMap.get('slug');\n if (slug) {\n this.entryService.getBySlug(slug).subscribe((response) => {\n this.currentEntry = response;\n const view = new View();\n view.entry = this.currentEntry.id;\n\n this.viewService.create(view).subscribe((viewResponse) => {\n // Noop\n });\n });\n }\n\n this.route.queryParams.subscribe(params => {\n const campaign = params['campaign'];\n if (campaign && campaign !== '') {\n\n const interaction = new Interaction();\n interaction.content = {'campaign': campaign, slug};\n this.interactionService.create(interaction).subscribe((response) => {\n\n });\n setTimeout(() => {\n const urlMinsCampaign = this.router.url.replace(new RegExp('.campaign=' + campaign), '');\n this.router.navigateByUrl(urlMinsCampaign);\n }, 0);\n }\n });\n }\n\n ngOnInit() {\n this.routerSub = this.router.events.subscribe((e) => {\n if (e instanceof NavigationEnd) {\n this.currentEntry = null;\n this.seeAll(false);\n setTimeout(() => {\n this.getEntry();\n }, 10);\n }\n });\n\n this.getEntry();\n }\n\n ngOnDestroy(): void {\n if (this.routerSub) {\n this.routerSub.complete();\n this.routerSub = null;\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport Autolinker from 'autolinker';\n\n@Pipe({ name: 'linky' })\nexport class LinkyPipe implements PipeTransform {\n transform(value: string, options?: any): string {\n return Autolinker.link(value, Object.assign({}, options, {newWindow: true, stripPrefix: false}));\n }\n}\n","import {Pipe, PipeTransform, NgZone, ChangeDetectorRef, OnDestroy} from \"@angular/core\";\n@Pipe({\n name:'timeAgo',\n pure:false\n})\nexport class TimeAgoPipe implements PipeTransform, OnDestroy {\n private timer: number;\n constructor(private changeDetectorRef: ChangeDetectorRef, private ngZone: NgZone) {}\n transform(value:string) {\n this.removeTimer();\n let d = new Date(value);\n let now = new Date();\n let seconds = Math.round(Math.abs((now.getTime() - d.getTime())/1000));\n let timeToUpdate = (Number.isNaN(seconds)) ? 1000 : this.getSecondsUntilUpdate(seconds) *1000;\n this.timer = this.ngZone.runOutsideAngular(() => {\n if (typeof window !== 'undefined') {\n return window.setTimeout(() => {\n this.ngZone.run(() => this.changeDetectorRef.markForCheck());\n }, timeToUpdate);\n }\n return null;\n });\n let minutes = Math.round(Math.abs(seconds / 60));\n let hours = Math.round(Math.abs(minutes / 60));\n let days = Math.round(Math.abs(hours / 24));\n let months = Math.round(Math.abs(days/30.416));\n let years = Math.round(Math.abs(days/365));\n if (Number.isNaN(seconds)){\n return '';\n } else if (seconds <= 45) {\n return 'a few seconds ago';\n } else if (seconds <= 90) {\n return 'a minute ago';\n } else if (minutes <= 45) {\n return minutes + ' minutes ago';\n } else if (minutes <= 90) {\n return 'an hour ago';\n } else if (hours <= 22) {\n return hours + ' hours ago';\n } else if (hours <= 36) {\n return 'a day ago';\n } else if (days <= 25) {\n return days + ' days ago';\n } else if (days <= 45) {\n return 'a month ago';\n } else if (days <= 345) {\n return months + ' months ago';\n } else if (days <= 545) {\n return 'a year ago';\n } else { // (days > 545)\n return years + ' years ago';\n }\n }\n ngOnDestroy(): void {\n this.removeTimer();\n }\n private removeTimer() {\n if (this.timer) {\n window.clearTimeout(this.timer);\n this.timer = null;\n }\n }\n private getSecondsUntilUpdate(seconds:number) {\n let min = 60;\n let hr = min * 60;\n let day = hr * 24;\n if (seconds < min) { // less than 1 min, update every 2 secs\n return 2;\n } else if (seconds < hr) { // less than an hour, update every 30 secs\n return 30;\n } else if (seconds < day) { // less then a day, update every 5 mins\n return 300;\n } else { // update every hour\n return 3600;\n }\n }\n}\n","import {Routes as AngularRoutes, RouterModule} from '@angular/router';\nimport {EntryCreatorComponent} from '../components/entry-creator/entry-creator.component';\nimport {EntryRendererWrapperComponent} from '../components/entry-renderer-wrapper/entry-renderer-wrapper.component';\nimport {JsonRendererComponent} from '../components/json-renderer/json-renderer.component';\nimport {MainComponent} from '../components/main/main.component';\nimport {OutlineViewComponent} from '../components/outline-view/outline-view.component';\nimport {SideNavigationComponent} from '../components/side-navigation/side-navigation.component';\n\nconst routes: AngularRoutes = [\n {path: '', component: SideNavigationComponent, outlet: 'left-col'},\n {\n path: 'landing',\n component: MainComponent\n },\n {path: 'blog/:slug', component: EntryRendererWrapperComponent},\n {path: 'create', component: EntryCreatorComponent},\n {path: 'create', component: OutlineViewComponent, outlet: 'left-col'},\n {path: 'create', component: JsonRendererComponent, outlet: 'right-col'},\n {path: '', redirectTo: '/landing', pathMatch: 'full'},\n {path: '**', redirectTo: '/404error'}\n];\n\nexport class Routes {\n routes: AngularRoutes = routes;\n}\n","export class SchedulePublishDialogData {\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {SchedulePublishDialogData} from './schedule-publish-dialog-data';\n\n@Component({\n selector: 'lib-schedule-publish-dialog',\n templateUrl: './schedule-publish-dialog.component.html',\n styleUrls: ['./schedule-publish-dialog.component.css']\n})\nexport class SchedulePublishDialogComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<SchedulePublishDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: SchedulePublishDialogData,\n ) { }\n\n ngOnInit(): void {\n }\n\n onNoClick(): void {\n }\n\n onYesClick(): void {\n this.dialogRef.close('test');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {BrowserModule} from '@angular/platform-browser';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nimport {DragDropModule} from '@angular/cdk/drag-drop';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatCardModule} from '@angular/material/card';\nimport {MatSidenavModule} from '@angular/material/sidenav';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatListModule} from '@angular/material/list';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatNativeDateModule} from '@angular/material/core';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {FontAwesomeModule, FaIconLibrary} from '@fortawesome/angular-fontawesome';\nimport {faSpinner} from '@fortawesome/free-solid-svg-icons';\nimport {FileUploadModule} from 'ng2-file-upload';\nimport {NgxMaterialTimepickerModule} from 'ngx-material-timepicker';\n\nimport { CommentService } from './services/comment.service';\nimport { EntryService } from './services/entry.service';\nimport { UploadService } from './services/upload.service';\nimport { PrismService } from './services/prism.service';\nimport { IdentityService } from './services/identity.service';\nimport { DjangoRestFrameworkEndpointService } from './services/django-rest-framework-endpoint.service';\nimport {EntryRendererComponent} from './components/entry-renderer/entry-renderer.component';\nimport {EntryCreatorComponent} from './components/entry-creator/entry-creator.component';\nimport {OutlineViewComponent} from './components/outline-view/outline-view.component';\nimport {SideNavigationComponent} from './components/side-navigation/side-navigation.component';\nimport {LandingPageComponent} from './components/landing-page/landing-page.component';\nimport {JsonRendererComponent} from './components/json-renderer/json-renderer.component';\nimport {EntrySummaryComponent} from './components/entry-summary/entry-summary.component';\nimport { MediaUploadModalComponent } from './components/media-upload-modal/media-upload-modal.component';\nimport { EntrySelectorDialogComponent } from './components/entry-selector-dialog/entry-selector-dialog.component';\nimport {TimeAgoPipe} from './pipes/TimeAgoPipe';\nimport {LinkyPipe} from './pipes/LinkyPipe';\nimport { StaticHtmlComponent } from './components/static-html/static-html.component';\nimport {TagService} from './services/tag.service';\nimport { MainComponent } from './components/main/main.component';\nimport { EntryRendererWrapperComponent } from './components/entry-renderer-wrapper/entry-renderer-wrapper.component';\nimport {RouterModule} from '@angular/router';\nimport { SchedulePublishDialogComponent } from './components/schedule-publish-dialog/schedule-publish-dialog.component';\n\n\n@NgModule({\n declarations: [\n EntryRendererComponent,\n EntryCreatorComponent,\n LandingPageComponent,\n SideNavigationComponent,\n OutlineViewComponent,\n JsonRendererComponent,\n EntrySummaryComponent,\n EntrySelectorDialogComponent,\n MediaUploadModalComponent,\n TimeAgoPipe,\n LinkyPipe,\n StaticHtmlComponent,\n MainComponent,\n EntryRendererWrapperComponent,\n SchedulePublishDialogComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatCardModule,\n MatSidenavModule,\n MatButtonModule,\n MatInputModule,\n MatListModule,\n MatRadioModule,\n MatDialogModule,\n MatCheckboxModule,\n MatDividerModule,\n MatAutocompleteModule,\n MatChipsModule,\n MatIconModule,\n MatDatepickerModule,\n MatNativeDateModule,\n FontAwesomeModule,\n FileUploadModule,\n NgxMaterialTimepickerModule,\n ],\n providers: [\n CommentService,\n EntryService,\n UploadService,\n PrismService,\n IdentityService,\n DjangoRestFrameworkEndpointService,\n TagService,\n ],\n exports: [\n EntryRendererComponent,\n EntryCreatorComponent,\n LandingPageComponent,\n SideNavigationComponent,\n OutlineViewComponent,\n JsonRendererComponent,\n EntrySummaryComponent,\n EntrySelectorDialogComponent,\n MediaUploadModalComponent,\n TimeAgoPipe,\n LinkyPipe,\n StaticHtmlComponent,\n MainComponent,\n EntryRendererWrapperComponent,\n ]\n})\nexport class CoreModule {\n constructor(\n private library: FaIconLibrary\n ) {\n this.library.addIcons(faSpinner);\n }\n}\n"]}
|