├── .angular-cli.json ├── .editorconfig ├── .gitignore ├── .vscode └── settings.json ├── README.md ├── e2e ├── app.e2e-spec.ts ├── app.po.ts └── tsconfig.e2e.json ├── karma.conf.js ├── package.json ├── protractor.conf.js ├── src ├── app │ ├── animations │ │ ├── fade-in.ts │ │ └── fly-in.ts │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── app.routing.ts │ ├── base-data │ │ ├── base-data.module.ts │ │ ├── base-data.routing.ts │ │ ├── model │ │ │ └── table-person-item.ts │ │ ├── person-add │ │ │ ├── person-add.component.css │ │ │ ├── person-add.component.html │ │ │ ├── person-add.component.spec.ts │ │ │ └── person-add.component.ts │ │ ├── person-edit │ │ │ ├── person-edit.component.css │ │ │ ├── person-edit.component.html │ │ │ ├── person-edit.component.spec.ts │ │ │ └── person-edit.component.ts │ │ ├── person-list │ │ │ ├── person-list.component.css │ │ │ ├── person-list.component.html │ │ │ ├── person-list.component.spec.ts │ │ │ └── person-list.component.ts │ │ ├── person-manage.service.spec.ts │ │ └── person-manage.service.ts │ ├── home │ │ ├── home.module.ts │ │ └── home │ │ │ ├── home.component.css │ │ │ ├── home.component.html │ │ │ ├── home.component.spec.ts │ │ │ └── home.component.ts │ ├── layout │ │ ├── body │ │ │ ├── body.component.css │ │ │ ├── body.component.html │ │ │ ├── body.component.spec.ts │ │ │ └── body.component.ts │ │ ├── header │ │ │ ├── header.component.css │ │ │ ├── header.component.html │ │ │ ├── header.component.spec.ts │ │ │ ├── header.component.ts │ │ │ └── tab │ │ │ │ ├── TabControlServiceModal.ts │ │ │ │ ├── tab.component.css │ │ │ │ ├── tab.component.html │ │ │ │ ├── tab.component.spec.ts │ │ │ │ ├── tab.component.ts │ │ │ │ ├── tabControl.service.ts │ │ │ │ └── tabs.ts │ │ ├── layout.module.ts │ │ └── nav │ │ │ ├── menu.service.ts │ │ │ ├── menu.ts │ │ │ ├── nav.component.css │ │ │ ├── nav.component.html │ │ │ ├── nav.component.spec.ts │ │ │ └── nav.component.ts │ ├── share │ │ ├── app-alert │ │ │ ├── app-alert.component.css │ │ │ ├── app-alert.component.html │ │ │ ├── app-alert.component.spec.ts │ │ │ └── app-alert.component.ts │ │ ├── app-amap │ │ │ ├── amap-demo.component.css │ │ │ ├── amap-demo.component.html │ │ │ ├── amap-demo.component.spec.ts │ │ │ ├── amap-demo.component.ts │ │ │ └── amap │ │ │ │ ├── amap.component.css │ │ │ │ ├── amap.component.html │ │ │ │ └── amap.component.ts │ │ ├── app-calendar │ │ │ ├── calendar-demo.component.css │ │ │ ├── calendar-demo.component.html │ │ │ ├── calendar-demo.component.spec.ts │ │ │ ├── calendar-demo.component.ts │ │ │ └── calendar │ │ │ │ ├── calendar.component.css │ │ │ │ ├── calendar.component.html │ │ │ │ └── calendar.component.ts │ │ ├── app-charts │ │ │ ├── app-charts.component.css │ │ │ ├── app-charts.component.html │ │ │ ├── app-charts.component.spec.ts │ │ │ └── app-charts.component.ts │ │ ├── app-ckeditor │ │ │ ├── app-ckeditor.component.css │ │ │ ├── app-ckeditor.component.html │ │ │ ├── app-ckeditor.component.spec.ts │ │ │ └── app-ckeditor.component.ts │ │ ├── app-jsplumb │ │ │ ├── app-jsplumb.component.css │ │ │ ├── app-jsplumb.component.html │ │ │ ├── app-jsplumb.component.spec.ts │ │ │ └── app-jsplumb.component.ts │ │ ├── app-tree │ │ │ ├── app-tree.component.css │ │ │ ├── app-tree.component.html │ │ │ ├── app-tree.component.spec.ts │ │ │ └── app-tree.component.ts │ │ ├── share.module.ts │ │ └── share.routing.ts │ └── user │ │ ├── model │ │ └── user.ts │ │ ├── user-change-pwd │ │ ├── user-change-pwd.component.css │ │ ├── user-change-pwd.component.html │ │ ├── user-change-pwd.component.spec.ts │ │ └── user-change-pwd.component.ts │ │ ├── user-forgetpwd │ │ ├── user-forgetpwd.component.css │ │ ├── user-forgetpwd.component.html │ │ ├── user-forgetpwd.component.spec.ts │ │ └── user-forgetpwd.component.ts │ │ ├── user-info │ │ ├── dynamic-form │ │ │ ├── form-control.component.html │ │ │ ├── form-control.component.ts │ │ │ └── form-field │ │ │ │ ├── field-base.ts │ │ │ │ ├── image.ts │ │ │ │ ├── index.ts │ │ │ │ ├── textarea.ts │ │ │ │ └── textbox.ts │ │ ├── user-info.component.css │ │ ├── user-info.component.html │ │ ├── user-info.component.spec.ts │ │ └── user-info.component.ts │ │ ├── user-login │ │ ├── user-login.component.css │ │ ├── user-login.component.html │ │ ├── user-login.component.spec.ts │ │ └── user-login.component.ts │ │ ├── user-register │ │ ├── user-register.component.css │ │ ├── user-register.component.html │ │ ├── user-register.component.spec.ts │ │ └── user-register.component.ts │ │ ├── user.module.ts │ │ ├── user.routing.ts │ │ ├── user.service.spec.ts │ │ └── user.service.ts ├── assets │ ├── .gitkeep │ ├── global │ │ ├── css │ │ │ └── material.blue-cyan.min.css │ │ ├── img │ │ │ ├── angular2-small.png │ │ │ └── ngLogo.png │ │ ├── plugins │ │ │ ├── bootstrap │ │ │ │ ├── css │ │ │ │ │ └── bootstrap.min.css │ │ │ │ ├── fonts │ │ │ │ │ └── bootstrap │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ └── js │ │ │ │ │ └── bootstrap.min.js │ │ │ ├── ckeditor │ │ │ │ ├── CHANGES.md │ │ │ │ ├── LICENSE.md │ │ │ │ ├── README.md │ │ │ │ ├── build-config.js │ │ │ │ ├── ckeditor.js │ │ │ │ ├── config.js │ │ │ │ ├── contents.css │ │ │ │ ├── lang │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── bn.js │ │ │ │ │ ├── bs.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── cy.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de-ch.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-au.js │ │ │ │ │ ├── en-ca.js │ │ │ │ │ ├── en-gb.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fo.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── gu.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ku.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── mn.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── no.js │ │ │ │ │ ├── oc.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── si.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── tt.js │ │ │ │ │ ├── ug.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh.js │ │ │ │ ├── plugins │ │ │ │ │ ├── a11yhelp │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ ├── a11yhelp.js │ │ │ │ │ │ │ └── lang │ │ │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ │ │ ├── af.js │ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ │ ├── ca.js │ │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ │ ├── cy.js │ │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ │ ├── de-ch.js │ │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ │ ├── en-gb.js │ │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ │ ├── et.js │ │ │ │ │ │ │ ├── eu.js │ │ │ │ │ │ │ ├── fa.js │ │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ │ ├── fo.js │ │ │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ │ ├── gl.js │ │ │ │ │ │ │ ├── gu.js │ │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ │ ├── hi.js │ │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ │ ├── id.js │ │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ │ ├── km.js │ │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ │ ├── ku.js │ │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ │ ├── lv.js │ │ │ │ │ │ │ ├── mk.js │ │ │ │ │ │ │ ├── mn.js │ │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ │ ├── no.js │ │ │ │ │ │ │ ├── oc.js │ │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ │ ├── pt-br.js │ │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ │ ├── si.js │ │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ │ ├── sl.js │ │ │ │ │ │ │ ├── sq.js │ │ │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ │ ├── th.js │ │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ │ ├── tt.js │ │ │ │ │ │ │ ├── ug.js │ │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ │ ├── vi.js │ │ │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ │ │ └── zh.js │ │ │ │ │ ├── about │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ ├── about.js │ │ │ │ │ │ │ ├── hidpi │ │ │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ ├── colordialog │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ ├── colordialog.css │ │ │ │ │ │ │ └── colordialog.js │ │ │ │ │ ├── copyformatting │ │ │ │ │ │ ├── cursors │ │ │ │ │ │ │ ├── cursor-disabled.svg │ │ │ │ │ │ │ └── cursor.svg │ │ │ │ │ │ └── styles │ │ │ │ │ │ │ └── copyformatting.css │ │ │ │ │ ├── dialog │ │ │ │ │ │ └── dialogDefinition.js │ │ │ │ │ ├── div │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ └── div.js │ │ │ │ │ ├── find │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ └── find.js │ │ │ │ │ ├── flash │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── flash.js │ │ │ │ │ │ └── images │ │ │ │ │ │ │ └── placeholder.png │ │ │ │ │ ├── forms │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── button.js │ │ │ │ │ │ │ ├── checkbox.js │ │ │ │ │ │ │ ├── form.js │ │ │ │ │ │ │ ├── hiddenfield.js │ │ │ │ │ │ │ ├── radio.js │ │ │ │ │ │ │ ├── select.js │ │ │ │ │ │ │ ├── textarea.js │ │ │ │ │ │ │ └── textfield.js │ │ │ │ │ │ └── images │ │ │ │ │ │ │ └── hiddenfield.gif │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── icons_hidpi.png │ │ │ │ │ ├── iframe │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── iframe.js │ │ │ │ │ │ └── images │ │ │ │ │ │ │ └── placeholder.png │ │ │ │ │ ├── image │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── image.js │ │ │ │ │ │ └── images │ │ │ │ │ │ │ └── noimage.png │ │ │ │ │ ├── link │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── anchor.js │ │ │ │ │ │ │ └── link.js │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── anchor.png │ │ │ │ │ │ │ └── hidpi │ │ │ │ │ │ │ └── anchor.png │ │ │ │ │ ├── liststyle │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ └── liststyle.js │ │ │ │ │ ├── magicline │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── hidpi │ │ │ │ │ │ │ ├── icon-rtl.png │ │ │ │ │ │ │ └── icon.png │ │ │ │ │ │ │ ├── icon-rtl.png │ │ │ │ │ │ │ └── icon.png │ │ │ │ │ ├── pagebreak │ │ │ │ │ │ └── images │ │ │ │ │ │ │ └── pagebreak.gif │ │ │ │ │ ├── pastefromword │ │ │ │ │ │ └── filter │ │ │ │ │ │ │ └── default.js │ │ │ │ │ ├── preview │ │ │ │ │ │ └── preview.html │ │ │ │ │ ├── scayt │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ │ ├── options.js │ │ │ │ │ │ │ └── toolbar.css │ │ │ │ │ │ └── skins │ │ │ │ │ │ │ └── moono-lisa │ │ │ │ │ │ │ └── scayt.css │ │ │ │ │ ├── showblocks │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── block_address.png │ │ │ │ │ │ │ ├── block_blockquote.png │ │ │ │ │ │ │ ├── block_div.png │ │ │ │ │ │ │ ├── block_h1.png │ │ │ │ │ │ │ ├── block_h2.png │ │ │ │ │ │ │ ├── block_h3.png │ │ │ │ │ │ │ ├── block_h4.png │ │ │ │ │ │ │ ├── block_h5.png │ │ │ │ │ │ │ ├── block_h6.png │ │ │ │ │ │ │ ├── block_p.png │ │ │ │ │ │ │ └── block_pre.png │ │ │ │ │ ├── smiley │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── smiley.js │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── angel_smile.gif │ │ │ │ │ │ │ ├── angel_smile.png │ │ │ │ │ │ │ ├── angry_smile.gif │ │ │ │ │ │ │ ├── angry_smile.png │ │ │ │ │ │ │ ├── broken_heart.gif │ │ │ │ │ │ │ ├── broken_heart.png │ │ │ │ │ │ │ ├── confused_smile.gif │ │ │ │ │ │ │ ├── confused_smile.png │ │ │ │ │ │ │ ├── cry_smile.gif │ │ │ │ │ │ │ ├── cry_smile.png │ │ │ │ │ │ │ ├── devil_smile.gif │ │ │ │ │ │ │ ├── devil_smile.png │ │ │ │ │ │ │ ├── embaressed_smile.gif │ │ │ │ │ │ │ ├── embarrassed_smile.gif │ │ │ │ │ │ │ ├── embarrassed_smile.png │ │ │ │ │ │ │ ├── envelope.gif │ │ │ │ │ │ │ ├── envelope.png │ │ │ │ │ │ │ ├── heart.gif │ │ │ │ │ │ │ ├── heart.png │ │ │ │ │ │ │ ├── kiss.gif │ │ │ │ │ │ │ ├── kiss.png │ │ │ │ │ │ │ ├── lightbulb.gif │ │ │ │ │ │ │ ├── lightbulb.png │ │ │ │ │ │ │ ├── omg_smile.gif │ │ │ │ │ │ │ ├── omg_smile.png │ │ │ │ │ │ │ ├── regular_smile.gif │ │ │ │ │ │ │ ├── regular_smile.png │ │ │ │ │ │ │ ├── sad_smile.gif │ │ │ │ │ │ │ ├── sad_smile.png │ │ │ │ │ │ │ ├── shades_smile.gif │ │ │ │ │ │ │ ├── shades_smile.png │ │ │ │ │ │ │ ├── teeth_smile.gif │ │ │ │ │ │ │ ├── teeth_smile.png │ │ │ │ │ │ │ ├── thumbs_down.gif │ │ │ │ │ │ │ ├── thumbs_down.png │ │ │ │ │ │ │ ├── thumbs_up.gif │ │ │ │ │ │ │ ├── thumbs_up.png │ │ │ │ │ │ │ ├── tongue_smile.gif │ │ │ │ │ │ │ ├── tongue_smile.png │ │ │ │ │ │ │ ├── tounge_smile.gif │ │ │ │ │ │ │ ├── whatchutalkingabout_smile.gif │ │ │ │ │ │ │ ├── whatchutalkingabout_smile.png │ │ │ │ │ │ │ ├── wink_smile.gif │ │ │ │ │ │ │ └── wink_smile.png │ │ │ │ │ ├── specialchar │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ ├── lang │ │ │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ │ │ ├── af.js │ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ │ ├── ca.js │ │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ │ ├── cy.js │ │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ │ ├── de-ch.js │ │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ │ ├── en-au.js │ │ │ │ │ │ │ ├── en-ca.js │ │ │ │ │ │ │ ├── en-gb.js │ │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ │ ├── et.js │ │ │ │ │ │ │ ├── eu.js │ │ │ │ │ │ │ ├── fa.js │ │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ │ ├── gl.js │ │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ │ ├── id.js │ │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ │ ├── km.js │ │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ │ ├── ku.js │ │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ │ ├── lv.js │ │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ │ ├── no.js │ │ │ │ │ │ │ ├── oc.js │ │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ │ ├── pt-br.js │ │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ │ ├── si.js │ │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ │ ├── sl.js │ │ │ │ │ │ │ ├── sq.js │ │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ │ ├── th.js │ │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ │ ├── tt.js │ │ │ │ │ │ │ ├── ug.js │ │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ │ ├── vi.js │ │ │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ │ │ └── zh.js │ │ │ │ │ │ │ └── specialchar.js │ │ │ │ │ ├── table │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ └── table.js │ │ │ │ │ ├── tableselection │ │ │ │ │ │ └── styles │ │ │ │ │ │ │ └── tableselection.css │ │ │ │ │ ├── tabletools │ │ │ │ │ │ └── dialogs │ │ │ │ │ │ │ └── tableCell.js │ │ │ │ │ ├── templates │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── templates.css │ │ │ │ │ │ │ └── templates.js │ │ │ │ │ │ └── templates │ │ │ │ │ │ │ ├── default.js │ │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── template1.gif │ │ │ │ │ │ │ ├── template2.gif │ │ │ │ │ │ │ └── template3.gif │ │ │ │ │ └── wsc │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── ciframe.html │ │ │ │ │ │ ├── tmpFrameset.html │ │ │ │ │ │ ├── wsc.css │ │ │ │ │ │ ├── wsc.js │ │ │ │ │ │ └── wsc_ie.js │ │ │ │ │ │ └── skins │ │ │ │ │ │ └── moono-lisa │ │ │ │ │ │ └── wsc.css │ │ │ │ ├── skins │ │ │ │ │ └── moono-lisa │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ ├── dialog_ie.css │ │ │ │ │ │ ├── dialog_ie8.css │ │ │ │ │ │ ├── dialog_iequirks.css │ │ │ │ │ │ ├── editor.css │ │ │ │ │ │ ├── editor_gecko.css │ │ │ │ │ │ ├── editor_ie.css │ │ │ │ │ │ ├── editor_ie8.css │ │ │ │ │ │ ├── editor_iequirks.css │ │ │ │ │ │ ├── icons.png │ │ │ │ │ │ ├── icons_hidpi.png │ │ │ │ │ │ ├── images │ │ │ │ │ │ ├── arrow.png │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ ├── hidpi │ │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ │ ├── lock-open.png │ │ │ │ │ │ │ ├── lock.png │ │ │ │ │ │ │ └── refresh.png │ │ │ │ │ │ ├── lock-open.png │ │ │ │ │ │ ├── lock.png │ │ │ │ │ │ ├── refresh.png │ │ │ │ │ │ └── spinner.gif │ │ │ │ │ │ └── readme.md │ │ │ │ └── styles.js │ │ │ ├── font-awesome-4.7.0 │ │ │ │ ├── css │ │ │ │ │ └── font-awesome.min.css │ │ │ │ └── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ └── sweet-alert │ │ │ │ ├── sweetalert.css │ │ │ │ └── sweetalert.min.js │ │ └── scripts │ │ │ ├── common.js │ │ │ └── sweetalert.js │ ├── i18n │ │ ├── en.json │ │ └── zh.json │ └── mock-data │ │ ├── forget-pwd.json │ │ ├── menu.json │ │ ├── person.json │ │ ├── user-login.json │ │ └── user-register.json ├── document │ └── 0.1.0_alpha.gif ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.css ├── test.ts ├── tsconfig.app.json ├── tsconfig.spec.json └── typings.d.ts ├── tsconfig.json ├── tsd.json └── tslint.json /.angular-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "project": { 4 | "name": "angular4-admin" 5 | }, 6 | "apps": [{ 7 | "root": "src", 8 | "outDir": "dist", 9 | "assets": [ 10 | "assets", 11 | "favicon.ico" 12 | ], 13 | "index": "index.html", 14 | "main": "main.ts", 15 | "polyfills": "polyfills.ts", 16 | "test": "test.ts", 17 | "tsconfig": "tsconfig.app.json", 18 | "testTsconfig": "tsconfig.spec.json", 19 | "prefix": "app", 20 | "styles": [ 21 | "styles.css" 22 | ], 23 | "scripts": [ 24 | "../node_modules/jquery/dist/jquery.min.js", 25 | "./assets/global/scripts/common.js", 26 | "./assets/global/plugins/sweet-alert/sweetalert.min.js", 27 | "./assets/global/scripts/sweetalert.js", 28 | "../node_modules/echarts/dist/echarts.min.js", 29 | "../node_modules/moment/min/moment.min.js", 30 | "../node_modules/fullcalendar/dist/fullcalendar.min.js", 31 | "../node_modules/ztree/js/jquery.ztree.all.min.js", 32 | "../node_modules/jsplumb/dist/js/jsplumb.min.js" 33 | ], 34 | "environmentSource": "environments/environment.ts", 35 | "environments": { 36 | "dev": "environments/environment.ts", 37 | "prod": "environments/environment.prod.ts" 38 | } 39 | }], 40 | "e2e": { 41 | "protractor": { 42 | "config": "./protractor.conf.js" 43 | } 44 | }, 45 | "lint": [{ 46 | "project": "src/tsconfig.app.json" 47 | }, 48 | { 49 | "project": "src/tsconfig.spec.json" 50 | }, 51 | { 52 | "project": "e2e/tsconfig.e2e.json" 53 | } 54 | ], 55 | "test": { 56 | "karma": { 57 | "config": "./karma.conf.js" 58 | } 59 | }, 60 | "defaults": { 61 | "styleExt": "css", 62 | "component": {} 63 | } 64 | } -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | testem.log 34 | /typings 35 | 36 | # e2e 37 | /e2e/*.js 38 | /e2e/*.map 39 | 40 | # System Files 41 | .DS_Store 42 | Thumbs.db 43 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "vsicons.presets.angular": true 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Angular4Admin 2 | 3 | # 最近工作比较忙,用的技术栈没有包含angular,这个项目是以前学习时写的,不再进行维护了,不推荐用于生产环境,如果有些地方能够帮到大家万分荣幸 4 | 5 | 基于Angular4的后台管理系统,使用Angular-cli构建。 6 | 7 | # 使用 8 | 9 | ``` 10 | git clone https://github.com/weihomechen/angular4-admin.git; 11 | ``` 12 | 切换到项目目录, 13 | 14 | ``` 15 | // 如果不能科学上网,请使用cnpm代替npm 16 | // npm i -g cnpm 17 | // 如果未安装angular-cli 18 | // npm i -g @angular/cli 19 | npm install 20 | ``` 21 | 启动开发模式: 22 | ``` 23 | ng serve 24 | ``` 25 | 如果顺利,项目会运行在本地 http://localhost:4200 26 | 27 | # 主要功能点 28 | 29 | ### angular4基本功能的使用 30 | ### 带管理功能可切换的tab 31 | - tab可管理; 32 | - 自定义路由重用机制 33 | ### 一个增改查删的Demo(见人员管理) 34 | - 增改查删的实现 35 | - 多种表单控件 36 | ### 集成一些插件 37 | - 文本编辑器 38 | - 图表 39 | - 地图 40 | - 弹出框 41 | - 流程图 42 | - 树目录 43 | - 日程安排 44 | ### 与后台交互使用Rxjs 45 | - 异步编程使用Rxjs 46 | ### 集成Material Design风格和Bootstrap风格的UI 47 | 48 | 如果喜欢,还请挪一下鼠标给我一个star~~ 49 | 50 | # 效果图 51 | 52 | ![0.1.0_alpha](https://github.com/weihomechen/angular4-admin/blob/master/src/document/0.1.0_alpha.gif) 53 | 54 | #### 人员管理 55 | ![person-list](http://oqtn5nfde.bkt.clouddn.com/person-list.png) 56 | 57 | #### Tab管理 58 | ![tab](http://oqtn5nfde.bkt.clouddn.com/tab.png) 59 | 60 | #### 弹出框 61 | ![alert](http://oqtn5nfde.bkt.clouddn.com/alert.png) 62 | 63 | #### 日程安排 64 | ![calendar](http://oqtn5nfde.bkt.clouddn.com/calendar.png) 65 | 66 | #### 图表 67 | ![echarts](http://oqtn5nfde.bkt.clouddn.com/echarts.png) 68 | 69 | #### 流程图 70 | ![jsplumb](http://oqtn5nfde.bkt.clouddn.com/jsplumb.png) 71 | 72 | #### 树结构 73 | ![ztree](http://oqtn5nfde.bkt.clouddn.com/ztree.png) 74 | 75 | #### 地图 76 | ![amap](http://oqtn5nfde.bkt.clouddn.com/amap.png) 77 | 78 | PS: 个人项目,一些琐碎的细节没有实现;与后台交互使用的是mock-data,增删改也是模拟成功返回; 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Angular4AdminPage } from './app.po'; 2 | 3 | describe('angular4-admin App', () => { 4 | let page: Angular4AdminPage; 5 | 6 | beforeEach(() => { 7 | page = new Angular4AdminPage(); 8 | }); 9 | 10 | it('should display message saying app works', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('app works!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class Angular4AdminPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types": [ 8 | "jasmine", 9 | "node" 10 | ] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/0.13/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular/cli'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular/cli/plugins/karma') 14 | ], 15 | client:{ 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | files: [ 19 | { pattern: './src/test.ts', watched: false } 20 | ], 21 | preprocessors: { 22 | './src/test.ts': ['@angular/cli'] 23 | }, 24 | mime: { 25 | 'text/x-typescript': ['ts','tsx'] 26 | }, 27 | coverageIstanbulReporter: { 28 | reports: [ 'html', 'lcovonly' ], 29 | fixWebpackSourcePaths: true 30 | }, 31 | angularCli: { 32 | environment: 'dev' 33 | }, 34 | reporters: config.angularCli && config.angularCli.codeCoverage 35 | ? ['progress', 'coverage-istanbul'] 36 | : ['progress', 'kjhtml'], 37 | port: 9876, 38 | colors: true, 39 | logLevel: config.LOG_INFO, 40 | autoWatch: true, 41 | browsers: ['Chrome'], 42 | singleRun: false 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular4-admin", 3 | "version": "0.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "ng": "ng", 7 | "start": "ng serve", 8 | "build": "ng build", 9 | "test": "ng test", 10 | "lint": "ng lint", 11 | "e2e": "ng e2e" 12 | }, 13 | "private": true, 14 | "dependencies": { 15 | "@angular-mdl/core": "4.0.8", 16 | "@angular/animations": "^4.2.2", 17 | "@angular/common": "^4.2.2", 18 | "@angular/compiler": "^4.2.2", 19 | "@angular/core": "^4.2.2", 20 | "@angular/forms": "^4.2.2", 21 | "@angular/http": "^4.2.2", 22 | "@angular/material": "^2.0.0-beta.6", 23 | "@angular/platform-browser": "^4.2.2", 24 | "@angular/platform-browser-dynamic": "^4.2.2", 25 | "@angular/router": "^4.2.2", 26 | "@types/hammerjs": "^2.0.34", 27 | "@types/jquery": "^2.0.45", 28 | "core-js": "^2.4.1", 29 | "echarts": "^3.6.1", 30 | "fullcalendar": "^3.4.0", 31 | "hammerjs": "^2.0.8", 32 | "jquery": "^3.2.1", 33 | "jsplumb": "^2.4.2", 34 | "material-design-icons": "^3.0.1", 35 | "material-design-lite": "^1.3.0", 36 | "moment": "^2.18.1", 37 | "ng2-ckeditor": "^1.1.8", 38 | "ng2-toastr": "^4.1.0", 39 | "ng2-translate": "^5.0.0", 40 | "ngx-echarts": "^1.2.1", 41 | "rxjs": "^5.1.0", 42 | "zone.js": "^0.8.4", 43 | "ztree": "^3.5.24" 44 | }, 45 | "devDependencies": { 46 | "@angular/cli": "^1.1.1", 47 | "@angular/compiler-cli": "^4.2.2", 48 | "@types/jasmine": "2.5.38", 49 | "@types/node": "~6.0.60", 50 | "codelyzer": "~2.0.0", 51 | "jasmine-core": "~2.5.2", 52 | "jasmine-spec-reporter": "~3.2.0", 53 | "karma": "~1.4.1", 54 | "karma-chrome-launcher": "~2.1.1", 55 | "karma-cli": "~1.0.1", 56 | "karma-coverage-istanbul-reporter": "^0.2.0", 57 | "karma-jasmine": "~1.1.0", 58 | "karma-jasmine-html-reporter": "^0.2.2", 59 | "protractor": "~5.1.0", 60 | "ts-node": "~2.0.0", 61 | "tslint": "~4.5.0", 62 | "typescript": "^2.3.4" 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './e2e/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | beforeLaunch: function() { 23 | require('ts-node').register({ 24 | project: 'e2e/tsconfig.e2e.json' 25 | }); 26 | }, 27 | onPrepare() { 28 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /src/app/animations/fade-in.ts: -------------------------------------------------------------------------------- 1 | import { trigger, style, transition, animate } from '@angular/animations'; 2 | 3 | export const fadeIn = trigger('fadeIn', [ 4 | transition("void => *", [ 5 | style({ opacity: 0 }), 6 | animate(600, style({ opacity: 1 })) 7 | ]), 8 | transition("* => void", [ 9 | animate(600, style({ opacity: 0 })) 10 | ]) 11 | ]); 12 | -------------------------------------------------------------------------------- /src/app/animations/fly-in.ts: -------------------------------------------------------------------------------- 1 | import { trigger, state, style, transition, animate, keyframes } from '@angular/animations'; 2 | 3 | export const flyIn = trigger('flyIn', [ 4 | state('in', style({ transform: 'translateX(0)' })), 5 | transition('void => *', [ 6 | animate(300, keyframes([ 7 | style({ opacity: 0, transform: 'translateX(-100%)', offset: 0 }), 8 | style({ opacity: 1, transform: 'translateX(25px)', offset: 0.3 }), 9 | style({ opacity: 1, transform: 'translateX(0)', offset: 1.0 }) 10 | ])) 11 | ]), 12 | transition('* => void', [ 13 | animate(300, keyframes([ 14 | style({ opacity: 1, transform: 'translateX(0)', offset: 0 }), 15 | style({ opacity: 1, transform: 'translateX(-25px)', offset: 0.7 }), 16 | style({ opacity: 0, transform: 'translateX(100%)', offset: 1.0 }) 17 | ])) 18 | ]) 19 | ]); -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/app.component.css -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async(() => { 7 | TestBed.configureTestingModule({ 8 | declarations: [ 9 | AppComponent 10 | ], 11 | }).compileComponents(); 12 | })); 13 | 14 | it('should create the app', async(() => { 15 | const fixture = TestBed.createComponent(AppComponent); 16 | const app = fixture.debugElement.componentInstance; 17 | expect(app).toBeTruthy(); 18 | })); 19 | 20 | it(`should have as title 'app works!'`, async(() => { 21 | const fixture = TestBed.createComponent(AppComponent); 22 | const app = fixture.debugElement.componentInstance; 23 | expect(app.title).toEqual('app works!'); 24 | })); 25 | 26 | it('should render title in a h1 tag', async(() => { 27 | const fixture = TestBed.createComponent(AppComponent); 28 | fixture.detectChanges(); 29 | const compiled = fixture.debugElement.nativeElement; 30 | expect(compiled.querySelector('h1').textContent).toContain('app works!'); 31 | })); 32 | }); 33 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | import { TranslateService } from 'ng2-translate'; 4 | 5 | declare var Common; 6 | 7 | declare var $: any; 8 | @Component({ 9 | selector: 'app-root', 10 | templateUrl: './app.component.html', 11 | styleUrls: ['./app.component.css'] 12 | }) 13 | export class AppComponent implements OnInit { 14 | 15 | constructor(private translate: TranslateService) { 16 | Common.startLoading(); 17 | } 18 | ngOnInit() { 19 | // 简陋的根据屏幕大小定右边内容容器的宽高 20 | const windowWidth = window.innerWidth, 21 | windowHeight = window.innerHeight; 22 | $('.app-body, .body-footer').css('width', windowWidth - 246 + 'px'); 23 | $('.app-body').css('height', windowHeight - 111 + 'px'); 24 | 25 | // 国际化处理,现在只做中英文的 26 | this.translate.addLangs(["zh", "en"]); 27 | this.translate.setDefaultLang('zh'); 28 | const browserLang = this.translate.getBrowserLang(); 29 | // console.log("检测到的浏览器语言>" + browserLang); 30 | this.translate.use(browserLang.match(/zh|en/) ? browserLang : 'zh'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | // Angular模块 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 4 | import { NgModule } from '@angular/core'; 5 | import { FormsModule } from '@angular/forms'; 6 | import { HttpModule, Http } from '@angular/http'; 7 | import { RouteReuseStrategy } from '@angular/router'; 8 | 9 | // App模块 10 | import { AppComponent } from './app.component'; 11 | import { routing, CustomReuseStrategy } from './app.routing'; 12 | 13 | // 第三方模块 14 | import { MdlModule } from '@angular-mdl/core'; 15 | import { TranslateModule, TranslateLoader, TranslateStaticLoader } from 'ng2-translate'; 16 | import 'hammerjs'; 17 | 18 | // 项目内模块 19 | import { LayoutModule } from './layout/layout.module'; 20 | import { ShareModule } from './share/share.module'; 21 | import { HomeModule } from './home/home.module'; 22 | import { BaseDataModule } from './base-data/base-data.module' 23 | import { UserModule } from './user/user.module'; 24 | import { TabControlService } from './layout/header/tab/tabControl.service'; 25 | import { UserService } from './user/user.service'; 26 | 27 | export function createTranslateLoader(http: Http) { 28 | return new TranslateStaticLoader(http, './assets/i18n', '.json'); 29 | } 30 | 31 | @NgModule({ 32 | declarations: [ 33 | AppComponent 34 | ], 35 | imports: [ 36 | // Angular模块 37 | BrowserModule, 38 | BrowserAnimationsModule, 39 | FormsModule, 40 | HttpModule, 41 | // 第三方模块 42 | MdlModule, 43 | TranslateModule.forRoot({ 44 | provide: TranslateLoader, 45 | useFactory: (createTranslateLoader), 46 | deps: [Http] 47 | }), 48 | // 项目内模块 49 | LayoutModule, 50 | ShareModule, 51 | HomeModule, 52 | BaseDataModule, 53 | UserModule, 54 | // App模块 55 | routing 56 | ], 57 | providers: [ 58 | TabControlService, 59 | UserService, 60 | { provide: RouteReuseStrategy, useClass: CustomReuseStrategy } 61 | ], 62 | bootstrap: [AppComponent] 63 | }) 64 | export class AppModule { } 65 | -------------------------------------------------------------------------------- /src/app/base-data/base-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { CommonModule } from '@angular/common'; 4 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 5 | import { RouterModule } from '@angular/router'; 6 | 7 | import { MaterialModule, MdNativeDateModule } from '@angular/material'; 8 | import { MdlModule } from '@angular-mdl/core'; 9 | import { PersonListComponent } from './person-list/person-list.component'; 10 | import { PersonAddComponent } from './person-add/person-add.component'; 11 | import { PersonEditComponent } from './person-edit/person-edit.component'; 12 | import { baseDataRoutes } from './base-data.routing'; 13 | import { PersonManageService } from './person-manage.service'; 14 | 15 | @NgModule({ 16 | imports: [ 17 | BrowserAnimationsModule, 18 | CommonModule, 19 | FormsModule, 20 | MaterialModule, 21 | MdNativeDateModule, 22 | ReactiveFormsModule, 23 | MdlModule 24 | // RouterModule.forChild(baseDataRoutes) 25 | ], 26 | declarations: [PersonListComponent, PersonAddComponent, PersonEditComponent], 27 | providers: [ 28 | PersonManageService 29 | ] 30 | }) 31 | export class BaseDataModule { } 32 | -------------------------------------------------------------------------------- /src/app/base-data/base-data.routing.ts: -------------------------------------------------------------------------------- 1 | import { RouterModule } from '@angular/router'; 2 | 3 | import { PersonListComponent } from './person-list/person-list.component'; 4 | import { PersonAddComponent } from './person-add/person-add.component'; 5 | import { PersonEditComponent } from './person-edit/person-edit.component'; 6 | 7 | export const baseDataRoutes = [ 8 | { 9 | path: 'person-list', 10 | component: PersonListComponent 11 | }, 12 | { 13 | path: 'person-add', 14 | component: PersonAddComponent 15 | }, 16 | { 17 | path: 'person-edit/:id', 18 | component: PersonEditComponent 19 | } 20 | ] 21 | 22 | -------------------------------------------------------------------------------- /src/app/base-data/model/table-person-item.ts: -------------------------------------------------------------------------------- 1 | import { IMdlTableModelItem } from '@angular-mdl/core'; 2 | export interface IPersonItem extends IMdlTableModelItem { 3 | id: string; 4 | name: string; 5 | sex: string; 6 | team: string; 7 | account: string; 8 | role: string; 9 | position: string; 10 | selected: boolean; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/base-data/person-add/person-add.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/base-data/person-add/person-add.component.css -------------------------------------------------------------------------------- /src/app/base-data/person-add/person-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { PersonAddComponent } from './person-add.component'; 4 | 5 | describe('PersonAddComponent', () => { 6 | let component: PersonAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ PersonAddComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(PersonAddComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/base-data/person-edit/person-edit.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/base-data/person-edit/person-edit.component.css -------------------------------------------------------------------------------- /src/app/base-data/person-edit/person-edit.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 查看人员 5 |
6 |
7 |
8 |
9 | 10 |
11 |
12 | 13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 |
23 | 24 |
25 | 26 |
27 |
28 | 29 |
30 | 31 | 32 |
33 | 38 |
-------------------------------------------------------------------------------- /src/app/base-data/person-edit/person-edit.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { PersonEditComponent } from './person-edit.component'; 4 | 5 | describe('PersonEditComponent', () => { 6 | let component: PersonEditComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ PersonEditComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(PersonEditComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/base-data/person-list/person-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/base-data/person-list/person-list.component.css -------------------------------------------------------------------------------- /src/app/base-data/person-list/person-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { PersonListComponent } from './person-list.component'; 4 | 5 | describe('PersonListComponent', () => { 6 | let component: PersonListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ PersonListComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(PersonListComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/base-data/person-manage.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Http } from '@angular/http'; 3 | 4 | import { IPersonItem } from './model/table-person-item'; 5 | import 'rxjs/add/operator/toPromise'; 6 | @Injectable() 7 | export class PersonManageService { 8 | 9 | private personUrl = 'assets/mock-data/person.json'; 10 | constructor(private http: Http) { } 11 | 12 | getPersons(): Promise { 13 | return this.http 14 | .get(this.personUrl) 15 | .toPromise() 16 | .then(response => response.json() as IPersonItem[]) 17 | .catch(this.handleError); 18 | } 19 | 20 | private handleError(error: any): Promise { 21 | console.error('An error occurred', error); 22 | return Promise.reject(error.message || error); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/home/home.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { HomeComponent } from './home/home.component'; 4 | 5 | @NgModule({ 6 | imports: [ 7 | CommonModule 8 | ], 9 | declarations: [HomeComponent] 10 | }) 11 | export class HomeModule { } 12 | -------------------------------------------------------------------------------- /src/app/home/home/home.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/home/home/home.component.css -------------------------------------------------------------------------------- /src/app/home/home/home.component.html: -------------------------------------------------------------------------------- 1 |
2 |

这里是系统首页

3 |
4 | -------------------------------------------------------------------------------- /src/app/home/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HomeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HomeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/home/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | declare var Common; 3 | @Component({ 4 | selector: 'app-home', 5 | templateUrl: './home.component.html', 6 | styleUrls: ['./home.component.css'] 7 | }) 8 | export class HomeComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | Common.stopLoading(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/layout/body/body.component.css: -------------------------------------------------------------------------------- 1 | .copy-right { 2 | text-align: center; 3 | margin-left: -12%; 4 | padding-top: 10px; 5 | } 6 | 7 | .copy-right-link { 8 | cursor: pointer; 9 | color: #F38181; 10 | } -------------------------------------------------------------------------------- /src/app/layout/body/body.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /src/app/layout/body/body.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BodyComponent } from './body.component'; 4 | 5 | describe('BodyComponent', () => { 6 | let component: BodyComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ BodyComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(BodyComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/body/body.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-layout-body', 5 | templateUrl: './body.component.html', 6 | styleUrls: ['./body.component.css'] 7 | }) 8 | export class BodyComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/layout/header/header.component.css: -------------------------------------------------------------------------------- 1 | .header-top-row { 2 | height: 30px; 3 | } 4 | 5 | .header-bottom-row { 6 | height: 35px; 7 | } 8 | 9 | .header-logo { 10 | position: absolute; 11 | top: 10px; 12 | left: 20px; 13 | } 14 | 15 | .header-user { 16 | margin-top: 5px; 17 | } 18 | 19 | .header-user .mdl-button { 20 | margin-right: 10px; 21 | } 22 | 23 | .header-user-menu i { 24 | margin-right: 10px; 25 | } -------------------------------------------------------------------------------- /src/app/layout/header/header.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/app/layout/header/header.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HeaderComponent } from './header.component'; 4 | 5 | describe('HeaderComponent', () => { 6 | let component: HeaderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HeaderComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HeaderComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/header/header.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { UserService } from '../../user/user.service'; 3 | import { TabControlService } from '../../layout/header/tab/tabControl.service'; 4 | declare var SweetAlert: any; 5 | 6 | @Component({ 7 | selector: 'app-layout-header', 8 | templateUrl: './header.component.html', 9 | styleUrls: ['./header.component.css'] 10 | }) 11 | export class HeaderComponent implements OnInit { 12 | 13 | private currentUser; 14 | constructor( 15 | private userService: UserService, 16 | private tabControlService: TabControlService 17 | ) { } 18 | 19 | ngOnInit() { 20 | this.userService.currentUser.subscribe({ 21 | next: (data) => this.currentUser = data, 22 | error: error => console.log(error) 23 | }); 24 | } 25 | 26 | getUserInfo() { 27 | if (!this.currentUser) { 28 | SweetAlert.notice('请先登录'); 29 | return; 30 | } 31 | this.tabControlService.newTab({ name: '用户信息', link: 'user-info' }); 32 | } 33 | 34 | changePwd() { 35 | if (!this.currentUser) { 36 | SweetAlert.notice('请先登录'); 37 | return; 38 | } 39 | this.tabControlService.newTab({ name: '修改密码', link: 'user-change-pwd' }); 40 | } 41 | 42 | logout() { 43 | this.userService.logout(); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/app/layout/header/tab/TabControlServiceModal.ts: -------------------------------------------------------------------------------- 1 | import { Menu } from '../../nav/menu'; 2 | 3 | export interface TabControlServiceModal { 4 | tabs: Menu[]; 5 | activeTab: number; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/layout/header/tab/tab.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{menuTab.name}} 5 | close 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/app/layout/header/tab/tab.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TabComponent } from './tab.component'; 4 | 5 | describe('TabComponent', () => { 6 | let component: TabComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TabComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TabComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/header/tab/tab.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewChild } from '@angular/core'; 2 | 3 | import { TabControlServiceModal } from './TabControlServiceModal'; 4 | import { TabControlService } from './tabControl.service'; 5 | import { Md2Tabs } from './tabs'; 6 | 7 | 8 | @Component({ 9 | selector: 'app-layout-tab', 10 | templateUrl: 'tab.component.html', 11 | styleUrls: ['tab.component.css'], 12 | }) 13 | export class TabComponent implements OnInit { 14 | tabsModel: TabControlServiceModal; 15 | reallyTab: any; 16 | @ViewChild(Md2Tabs) 17 | private md2Tabs: Md2Tabs; 18 | constructor( 19 | private tabControlService: TabControlService 20 | ) { } 21 | 22 | ngOnInit(): void { 23 | this.tabsModel = this.tabControlService.tabsModel; 24 | } 25 | 26 | goToTab(menuTab) { 27 | this.tabControlService.goToTab(menuTab); 28 | } 29 | 30 | closeTab(tab: any) { 31 | this.tabControlService.closeTab(tab); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /src/app/layout/layout.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { RouterModule } from '@angular/router'; 4 | 5 | import { MdlModule } from '@angular-mdl/core'; 6 | 7 | import { HeaderComponent } from './header/header.component'; 8 | import { TabComponent } from './header/tab/tab.component'; 9 | import { Md2TabsModule } from "./header/tab/tabs"; 10 | import { NavComponent } from './nav/nav.component'; 11 | import { BodyComponent } from './body/body.component'; 12 | import { MenuService } from './nav/menu.service'; 13 | 14 | @NgModule({ 15 | imports: [ 16 | CommonModule, MdlModule, RouterModule, Md2TabsModule 17 | ], 18 | declarations: [HeaderComponent, BodyComponent, NavComponent, TabComponent], 19 | providers: [ 20 | MenuService 21 | ], 22 | exports: [ 23 | HeaderComponent, NavComponent, BodyComponent 24 | ] 25 | }) 26 | export class LayoutModule { } 27 | -------------------------------------------------------------------------------- /src/app/layout/nav/menu.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Http } from '@angular/http'; 3 | 4 | import { Menu } from './menu'; 5 | import { Observable } from 'rxjs/Observable'; 6 | import 'rxjs/add/operator/map'; 7 | 8 | @Injectable() 9 | export class MenuService { 10 | private menusUrl = '/assets/mock-data/menu.json'; 11 | constructor(private http: Http) { } 12 | 13 | getMenus(): Observable { 14 | return this.http 15 | .get(this.menusUrl) 16 | .map(response => response.json() as Menu[]); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/app/layout/nav/menu.ts: -------------------------------------------------------------------------------- 1 | export class Menu { 2 | name: string; 3 | icon?: string; 4 | submenu?: Menu[]; 5 | link?: string; 6 | params?: string; 7 | fragment?: string; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/layout/nav/nav.component.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'openSans'; 3 | src: url('/assets/open sans/OpenSans-Light.ttf'); 4 | } 5 | 6 | * { 7 | margin: 0; 8 | padding: 0; 9 | } 10 | 11 | ul { 12 | list-style: none; 13 | } 14 | 15 | a, 16 | a:visited { 17 | transition: color 0s; 18 | } 19 | 20 | .mdl-layout__drawer .mdl-navigation .top-menu-link { 21 | padding: 10px 8px; 22 | font-size: 15px; 23 | } 24 | 25 | .mdl-layout__drawer .mdl-navigation .second-menu-link { 26 | padding: 8px; 27 | } 28 | 29 | .mdl-navigation__link .material-icons { 30 | vertical-align: bottom; 31 | } 32 | 33 | .has-sub { 34 | margin-left: 90px; 35 | } 36 | 37 | .mdl-layout__drawer { 38 | overflow-y: visible; 39 | background: #FFFDFB; 40 | height: auto; 41 | min-height: 100%; 42 | max-height: none; 43 | z-index: 5; 44 | } 45 | 46 | .mdl-layout__drawer .mdl-navigation { 47 | padding-top: 0; 48 | } 49 | 50 | .mdl-layout__drawer .mdl-navigation__link { 51 | padding-left: 10px; 52 | color: darkslategrey; 53 | cursor: pointer; 54 | } 55 | 56 | .mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover { 57 | background-color: darkcyan; 58 | color: #fff; 59 | text-decoration: none; 60 | } 61 | 62 | .mdl-layout__drawer .mdl-navigation .third-menu-link:hover { 63 | color: rgb(255, 255, 255); 64 | background-color: rgb(28, 175, 154); 65 | text-decoration: none; 66 | } 67 | 68 | .top-menu-item a i { 69 | padding-right: 20px; 70 | } 71 | 72 | .isexpand { 73 | position: absolute; 74 | right: 10px; 75 | } 76 | 77 | .second-nav { 78 | padding-left: 35px; 79 | } 80 | 81 | .secMenuItme { 82 | position: relative; 83 | } 84 | 85 | .third-menu-nav { 86 | position: absolute; 87 | top: 0px; 88 | box-shadow: 0 0 4px #000; 89 | } 90 | 91 | .mdl-layout__drawer .mdl-navigation .third-menu-link { 92 | width: 200px; 93 | padding: 4px 0px; 94 | background-color: #fff; 95 | opacity: 1; 96 | } -------------------------------------------------------------------------------- /src/app/layout/nav/nav.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 22 | 23 | -------------------------------------------------------------------------------- /src/app/layout/nav/nav.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NavComponent } from './nav.component'; 4 | 5 | describe('NavComponent', () => { 6 | let component: NavComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NavComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NavComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/nav/nav.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; 2 | 3 | import { Menu } from './menu'; 4 | import { MenuService } from './menu.service'; 5 | import { TabControlService } from '../header/tab/tabControl.service'; 6 | 7 | @Component({ 8 | selector: 'app-layout-nav', 9 | templateUrl: 'nav.component.html', 10 | styleUrls: ['nav.component.css'] 11 | }) 12 | export class NavComponent implements OnInit { 13 | menus: Menu[]; 14 | 15 | constructor( 16 | private menuService: MenuService, 17 | private tabControlService: TabControlService 18 | ) { } 19 | 20 | ngOnInit(): void { 21 | this.getMenus(); 22 | } 23 | 24 | getMenus(): void { 25 | this.menuService 26 | .getMenus() 27 | .subscribe(menus => this.menus = menus); 28 | } 29 | 30 | openTopMenuTab(menu, secondNav, expandIcon) { 31 | if (menu.link) { 32 | this.tabControlService.newTab(menu); 33 | } else { 34 | this.secondMenuToggle(secondNav, expandIcon); 35 | } 36 | } 37 | 38 | openSecMenuTab(menu) { 39 | this.tabControlService.newTab(menu); 40 | } 41 | 42 | openThirdMenuTab(menu, secondNav, expandIcon) { 43 | this.tabControlService.newTab(menu); 44 | } 45 | 46 | secondMenuToggle(secondNav, expandIcon) { 47 | secondNav.hidden = !secondNav.hidden; 48 | if (expandIcon && !secondNav.hidden) { 49 | expandIcon.innerText = 'keyboard_arrow_down'; 50 | } else { 51 | expandIcon.innerText = 'keyboard_arrow_left'; 52 | } 53 | } 54 | 55 | thirdMenuToggle(secMenu, thirdNav) { 56 | thirdNav.style.left = secMenu.offsetLeft + secMenu.offsetWidth - 35 + 'px'; 57 | thirdNav.hidden = !thirdNav.hidden; 58 | } 59 | 60 | }; 61 | -------------------------------------------------------------------------------- /src/app/share/app-alert/app-alert.component.css: -------------------------------------------------------------------------------- 1 | h4 { 2 | margin-left: 20px; 3 | } 4 | 5 | .btn-group { 6 | margin: 10px; 7 | } -------------------------------------------------------------------------------- /src/app/share/app-alert/app-alert.component.html: -------------------------------------------------------------------------------- 1 |

SweetAlert

2 |
3 | 4 | 5 | 6 | 7 |
8 |

Toastr

9 |
10 | 11 | 12 | 13 | 14 |
-------------------------------------------------------------------------------- /src/app/share/app-alert/app-alert.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AppAlertComponent } from './app-alert.component'; 4 | 5 | describe('AppAlertComponent', () => { 6 | let component: AppAlertComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AppAlertComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AppAlertComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/app-alert/app-alert.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewContainerRef } from '@angular/core'; 2 | import { ToastsManager } from 'ng2-toastr/ng2-toastr'; 3 | declare var SweetAlert: any; 4 | @Component({ 5 | selector: 'app-app-alert', 6 | templateUrl: './app-alert.component.html', 7 | styleUrls: ['./app-alert.component.css'] 8 | }) 9 | export class AppAlertComponent implements OnInit { 10 | 11 | constructor( 12 | private toastr: ToastsManager, 13 | private vcr: ViewContainerRef 14 | ) { 15 | this.toastr.setRootViewContainerRef(vcr); 16 | } 17 | 18 | ngOnInit() { 19 | } 20 | 21 | alertSuccess() { 22 | SweetAlert.alert('操作成功', '成功提示'); 23 | } 24 | 25 | alertNotice() { 26 | SweetAlert.notice('信息提示', '信息提示'); 27 | } 28 | 29 | alertWarning() { 30 | SweetAlert.warning('警告的信息', '警告提示'); 31 | } 32 | 33 | alertConfirm() { 34 | SweetAlert.confirm('需要确认', '', function () { 35 | SweetAlert.alert('点击了确认'); 36 | }); 37 | } 38 | 39 | toastrSuccess() { 40 | this.toastr.success('操作成功', '成功提示'); 41 | } 42 | 43 | toastrNotice() { 44 | this.toastr.info('信息提示', '信息提示'); 45 | } 46 | 47 | toastrWarning() { 48 | this.toastr.warning('警告的信息', '警告提示'); 49 | } 50 | 51 | toastrConfirm() { 52 | this.toastr.error('发生错误', '错误提示'); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/app/share/app-amap/amap-demo.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/share/app-amap/amap-demo.component.css -------------------------------------------------------------------------------- /src/app/share/app-amap/amap-demo.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /src/app/share/app-amap/amap-demo.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AmapDemoComponent } from './amap-demo.component'; 4 | 5 | describe('AmapDemoComponent', () => { 6 | let component: AmapDemoComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AmapDemoComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AmapDemoComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/app-amap/amap-demo.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { flyIn } from '../../animations/fly-in'; 3 | import { AmapComponent } from './amap/amap.component'; 4 | 5 | @Component({ 6 | selector: 'app-amap-demo', 7 | templateUrl: './amap-demo.component.html', 8 | styleUrls: ['./amap-demo.component.css'], 9 | animations: [flyIn] 10 | }) 11 | export class AmapDemoComponent implements OnInit { 12 | 13 | constructor() { } 14 | 15 | ngOnInit() { 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/share/app-amap/amap/amap.component.css: -------------------------------------------------------------------------------- 1 | #container{ 2 | width:1000px; 3 | height:600px; 4 | } -------------------------------------------------------------------------------- /src/app/share/app-amap/amap/amap.component.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /src/app/share/app-amap/amap/amap.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | declare var AMap: any; 3 | @Component({ 4 | moduleId: module.id, 5 | selector: 'amap', 6 | templateUrl: 'amap.component.html', 7 | styleUrls: ['amap.component.css'] 8 | }) 9 | export class AmapComponent implements OnInit { 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | let map = new AMap.Map('container'); 14 | map.plugin('AMap.Geolocation', () => { 15 | let geolocation = new AMap.Geolocation({ 16 | enableHighAccuracy: true,//是否使用高精度定位,默认:true 17 | timeout: 10000, //超过10秒后停止定位,默认:无穷大 18 | maximumAge: 0, //定位结果缓存0毫秒,默认:0 19 | convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true 20 | showButton: true, //显示定位按钮,默认:true 21 | buttonPosition: 'LB', //定位按钮停靠位置,默认:'LB',左下角 22 | buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20) 23 | showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true 24 | showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true 25 | panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true 26 | zoomToAccuracy: true //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false 27 | }); 28 | map.addControl(geolocation); 29 | }); 30 | } 31 | } -------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar-demo.component.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar-demo.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar-demo.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CalendarDemoComponent } from './calendar-demo.component'; 4 | 5 | describe('CalendarDemoComponent', () => { 6 | let component: CalendarDemoComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CalendarDemoComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CalendarDemoComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar-demo.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewContainerRef } from '@angular/core'; 2 | import { ToastsManager } from 'ng2-toastr/ng2-toastr'; 3 | 4 | @Component({ 5 | selector: 'app-calendar', 6 | templateUrl: './calendar-demo.component.html', 7 | styleUrls: ['./calendar-demo.component.css'] 8 | }) 9 | export class CalendarDemoComponent implements OnInit { 10 | events: any[] = [ 11 | { 12 | title: '整天事件', 13 | start: '2017-03-11' 14 | }, 15 | { 16 | title: '长事件', 17 | start: '2017-03-11', 18 | end: '2017-03-15' 19 | }, { 20 | title: "重要事件", 21 | start: '2017-03-16', 22 | type: 1 23 | } 24 | ]; 25 | calendarOptions: Object = { 26 | height: 'parent', 27 | fixedWeekCount: false, 28 | defaultDate: '2017-03-09', 29 | editable: true, 30 | eventLimit: true, // allow "more" link when too many events 31 | events: this.events, 32 | eventClick: (calEvent, jsEvent, view) => { 33 | console.log(calEvent, jsEvent, view); 34 | this.toastr.success(calEvent.title, '你点击了事件,事件详情见控制台:'); 35 | console.log(view.calendar); 36 | }, 37 | eventRender: function (event, element) { 38 | if (1 === event.type) { 39 | element.css('backgroundColor', '#C93A36'); 40 | element.css('border', '1px solid #C93A36'); 41 | } 42 | } 43 | }; 44 | constructor(public toastr: ToastsManager, vcr: ViewContainerRef) { 45 | this.toastr.setRootViewContainerRef(vcr); 46 | } 47 | 48 | ngOnInit() { 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar/calendar.component.css: -------------------------------------------------------------------------------- 1 | @import url("//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.2.0/fullcalendar.min.css"); 2 | .calendar-container{ 3 | min-height: 800px; 4 | } -------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar/calendar.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
-------------------------------------------------------------------------------- /src/app/share/app-calendar/calendar/calendar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input, ElementRef, ViewChild } from '@angular/core'; 2 | import { Options } from 'fullcalendar'; 3 | 4 | declare var $: any; 5 | 6 | @Component({ 7 | moduleId: module.id, 8 | selector: 'calendar', 9 | templateUrl: './calendar.component.html', 10 | styleUrls: ["./calendar.component.css"] 11 | }) 12 | export class CalendarComponent implements OnInit { 13 | @Input() options: Options; 14 | @ViewChild('calendar') calendar: ElementRef 15 | 16 | constructor() { } 17 | 18 | ngOnInit() { 19 | $(this.calendar.nativeElement).fullCalendar(this.options); 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /src/app/share/app-charts/app-charts.component.css: -------------------------------------------------------------------------------- 1 | .demo-chart { 2 | width: 1000px; 3 | height: 400px; 4 | margin: 20px auto; 5 | } -------------------------------------------------------------------------------- /src/app/share/app-charts/app-charts.component.html: -------------------------------------------------------------------------------- 1 |
2 |

demo1

3 |
4 | 5 |

demo2

6 | 7 |
8 | 9 |

demo3

10 | 11 | 12 |
13 | 14 |

demo4

15 |
16 |
17 |
-------------------------------------------------------------------------------- /src/app/share/app-charts/app-charts.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AppChartsComponent } from './app-charts.component'; 4 | 5 | describe('AppChartsComponent', () => { 6 | let component: AppChartsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AppChartsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AppChartsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/app-ckeditor/app-ckeditor.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/share/app-ckeditor/app-ckeditor.component.css -------------------------------------------------------------------------------- /src/app/share/app-ckeditor/app-ckeditor.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |

触发的事件:
{{ eventInfo }}

5 |

输入的内容:
{{ ckeditorContent }}

6 |
-------------------------------------------------------------------------------- /src/app/share/app-ckeditor/app-ckeditor.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AppCkeditorComponent } from './app-ckeditor.component'; 4 | 5 | describe('AppCkeditorComponent', () => { 6 | let component: AppCkeditorComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AppCkeditorComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AppCkeditorComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/app-ckeditor/app-ckeditor.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { flyIn } from '../../animations/fly-in'; 3 | import { CKEditorComponent } from 'ng2-ckeditor'; 4 | 5 | declare var Common: any; 6 | 7 | @Component({ 8 | selector: 'app-app-ckeditor', 9 | templateUrl: './app-ckeditor.component.html', 10 | styleUrls: ['./app-ckeditor.component.css'], 11 | animations: [flyIn] 12 | }) 13 | export class AppCkeditorComponent implements OnInit { 14 | 15 | ckeditorContent = ''; 16 | config = { 17 | filebrowserBrowseUrl: '&&&&&', 18 | filebrowserUploadUrl: '这里是上传地址' 19 | }; 20 | eventInfo = ''; 21 | constructor() { } 22 | 23 | ngOnInit() { 24 | } 25 | 26 | onReady(event) { 27 | this.eventInfo = '编辑器准备就绪'; 28 | Common.stopLoading(); 29 | } 30 | onChange(event) { 31 | this.eventInfo = '编辑器内容发生改变'; 32 | } 33 | 34 | onFocus(event) { 35 | // this.eventInfo = '编辑器获得焦点'; 36 | } 37 | onBlur(event) { 38 | // this.eventInfo = '编辑器失去焦点'; 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/app/share/app-jsplumb/app-jsplumb.component.css: -------------------------------------------------------------------------------- 1 | .flowchart-demo { 2 | min-height: 800px; 3 | } 4 | 5 | .flowchart-demo .window { 6 | border: 1px solid #346789; 7 | box-shadow: 2px 2px 19px #aaa; 8 | -o-box-shadow: 2px 2px 19px #aaa; 9 | -webkit-box-shadow: 2px 2px 19px #aaa; 10 | -moz-box-shadow: 2px 2px 19px #aaa; 11 | -moz-border-radius: 0.5em; 12 | border-radius: 0.5em; 13 | opacity: 0.8; 14 | width: 80px; 15 | height: 80px; 16 | line-height: 80px; 17 | cursor: pointer; 18 | text-align: center; 19 | z-index: 20; 20 | position: absolute; 21 | background-color: #eeeeef; 22 | color: black; 23 | font-family: helvetica, sans-serif; 24 | padding: 0.5em; 25 | font-size: 0.9em; 26 | -webkit-transition: -webkit-box-shadow 0.15s ease-in; 27 | -moz-transition: -moz-box-shadow 0.15s ease-in; 28 | -o-transition: -o-box-shadow 0.15s ease-in; 29 | transition: box-shadow 0.15s ease-in; 30 | } 31 | 32 | .flowchart-demo .window:hover { 33 | box-shadow: 2px 2px 19px #444; 34 | -o-box-shadow: 2px 2px 19px #444; 35 | -webkit-box-shadow: 2px 2px 19px #444; 36 | -moz-box-shadow: 2px 2px 19px #444; 37 | opacity: 0.6; 38 | } 39 | 40 | .flowchart-demo .active { 41 | border: 1px dotted green; 42 | } 43 | 44 | .flowchart-demo .hover { 45 | border: 1px dotted red; 46 | } 47 | 48 | #flowchartWindow1 { 49 | top: 34em; 50 | left: 5em; 51 | } 52 | 53 | #flowchartWindow2 { 54 | top: 7em; 55 | left: 36em; 56 | } 57 | 58 | #flowchartWindow3 { 59 | top: 27em; 60 | left: 48em; 61 | } 62 | 63 | #flowchartWindow4 { 64 | top: 23em; 65 | left: 22em; 66 | } 67 | 68 | .flowchart-demo .jtk-connector { 69 | z-index: 4; 70 | } 71 | 72 | .flowchart-demo .jtk-endpoint, 73 | .endpointTargetLabel, 74 | .endpointSourceLabel { 75 | z-index: 21; 76 | cursor: pointer; 77 | } 78 | 79 | .flowchart-demo .aLabel { 80 | background-color: white; 81 | padding: 0.4em; 82 | font: 12px sans-serif; 83 | color: #444; 84 | z-index: 21; 85 | border: 1px dotted gray; 86 | opacity: 0.8; 87 | cursor: pointer; 88 | } 89 | 90 | .flowchart-demo .aLabel.jtk-hover { 91 | background-color: #5C96BC; 92 | color: white; 93 | border: 1px solid white; 94 | } 95 | 96 | .window.jtk-connected { 97 | border: 1px solid green; 98 | } 99 | 100 | .jtk-drag { 101 | outline: 4px solid pink !important; 102 | } 103 | 104 | path, 105 | .jtk-endpoint { 106 | cursor: pointer; 107 | } 108 | 109 | .jtk-overlay { 110 | background-color: transparent; 111 | } -------------------------------------------------------------------------------- /src/app/share/app-jsplumb/app-jsplumb.component.html: -------------------------------------------------------------------------------- 1 |

简单流程图

2 |
3 |
开始

4 |
提交申请

5 |
审批

6 |
结束

7 |
-------------------------------------------------------------------------------- /src/app/share/app-jsplumb/app-jsplumb.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AppJsplumbComponent } from './app-jsplumb.component'; 4 | 5 | describe('AppJsplumbComponent', () => { 6 | let component: AppJsplumbComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AppJsplumbComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AppJsplumbComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/app-tree/app-tree.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/share/app-tree/app-tree.component.css -------------------------------------------------------------------------------- /src/app/share/app-tree/app-tree.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

demo1:简单json

4 |
    5 |
    6 |
    7 |

    demo2:可选择

    8 |
    9 | 选择节点禁用或启用: 10 | 11 | 12 |
    13 |
      14 |
      15 |
      -------------------------------------------------------------------------------- /src/app/share/app-tree/app-tree.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AppTreeComponent } from './app-tree.component'; 4 | 5 | describe('AppTreeComponent', () => { 6 | let component: AppTreeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AppTreeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AppTreeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/share/share.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { CommonModule } from '@angular/common'; 4 | import { RouterModule } from '@angular/router'; 5 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 6 | 7 | import { MdlModule } from '@angular-mdl/core'; 8 | import { ToastModule } from 'ng2-toastr/ng2-toastr'; 9 | import { CKEditorModule } from 'ng2-ckeditor'; 10 | 11 | import { AmapComponent } from './app-amap/amap/amap.component'; 12 | import { CalendarComponent } from './app-calendar/calendar/calendar.component'; 13 | import { AngularEchartsModule } from 'ngx-echarts'; 14 | 15 | import { FormControlComponent } from '../user/user-info/dynamic-form/form-control.component'; 16 | import { AppCkeditorComponent } from './app-ckeditor/app-ckeditor.component'; 17 | import { AppChartsComponent } from './app-charts/app-charts.component'; 18 | import { AmapDemoComponent } from './app-amap/amap-demo.component'; 19 | import { CalendarDemoComponent } from './app-calendar/calendar-demo.component'; 20 | import { AppAlertComponent } from './app-alert/app-alert.component'; 21 | import { shareRoutes } from './share.routing'; 22 | import { AppTreeComponent } from './app-tree/app-tree.component'; 23 | import { AppJsplumbComponent } from './app-jsplumb/app-jsplumb.component'; 24 | 25 | 26 | @NgModule({ 27 | imports: [ 28 | BrowserAnimationsModule, 29 | CommonModule, 30 | FormsModule, 31 | ReactiveFormsModule, 32 | MdlModule, 33 | ToastModule.forRoot(), 34 | CKEditorModule, 35 | AngularEchartsModule, 36 | // RouterModule.forChild(shareRoutes) 37 | ], 38 | declarations: [ 39 | FormControlComponent, 40 | AppCkeditorComponent, 41 | AppChartsComponent, 42 | AmapComponent, 43 | AmapDemoComponent, 44 | CalendarComponent, 45 | CalendarDemoComponent, 46 | AppAlertComponent, 47 | AppTreeComponent, 48 | AppJsplumbComponent 49 | ], 50 | exports: [ 51 | MdlModule, 52 | FormControlComponent, 53 | AppCkeditorComponent 54 | ] 55 | }) 56 | export class ShareModule { } 57 | -------------------------------------------------------------------------------- /src/app/share/share.routing.ts: -------------------------------------------------------------------------------- 1 | import { RouterModule } from '@angular/router'; 2 | 3 | import { AppCkeditorComponent } from './app-ckeditor/app-ckeditor.component'; 4 | import { AppChartsComponent } from './app-charts/app-charts.component'; 5 | 6 | export const shareRoutes = [ 7 | { 8 | path: 'ckeditor', 9 | component: AppCkeditorComponent 10 | }, 11 | { 12 | path: 'charts', 13 | component: AppChartsComponent 14 | } 15 | ] 16 | 17 | -------------------------------------------------------------------------------- /src/app/user/model/user.ts: -------------------------------------------------------------------------------- 1 | export class User { 2 | userId: string; 3 | userName: string; 4 | nickName: string; 5 | password: string; 6 | confirmPassword: string; 7 | remeberMe: boolean; 8 | email: string; 9 | vcode: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/user/user-change-pwd/user-change-pwd.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/user/user-change-pwd/user-change-pwd.component.css -------------------------------------------------------------------------------- /src/app/user/user-change-pwd/user-change-pwd.component.html: -------------------------------------------------------------------------------- 1 |

      2 | user-change-pwd works! 3 |

      4 | -------------------------------------------------------------------------------- /src/app/user/user-change-pwd/user-change-pwd.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserChangePwdComponent } from './user-change-pwd.component'; 4 | 5 | describe('UserChangePwdComponent', () => { 6 | let component: UserChangePwdComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserChangePwdComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserChangePwdComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/user/user-change-pwd/user-change-pwd.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-user-change-pwd', 5 | templateUrl: './user-change-pwd.component.html', 6 | styleUrls: ['./user-change-pwd.component.css'] 7 | }) 8 | export class UserChangePwdComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/user/user-forgetpwd/user-forgetpwd.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/user/user-forgetpwd/user-forgetpwd.component.css -------------------------------------------------------------------------------- /src/app/user/user-forgetpwd/user-forgetpwd.component.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 |
      5 |

      设置新密码

      6 |
      7 |
      8 |
      9 |
      10 | 11 |
      12 | 13 |
      请输入邮箱!
      14 |
      15 |
      16 |
      {{error}}
      17 |
      18 |
      19 | 20 | 21 |
      22 |
      23 |
      24 |
      25 |
      26 |
      27 |
      -------------------------------------------------------------------------------- /src/app/user/user-forgetpwd/user-forgetpwd.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserForgetpwdComponent } from './user-forgetpwd.component'; 4 | 5 | describe('UserForgetpwdComponent', () => { 6 | let component: UserForgetpwdComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserForgetpwdComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserForgetpwdComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/user/user-forgetpwd/user-forgetpwd.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | 5 | import { UserService } from '../user.service'; 6 | 7 | declare var SweetAlert: any; 8 | declare var Common: any; 9 | 10 | @Component({ 11 | selector: 'app-user-forgetpwd', 12 | templateUrl: './user-forgetpwd.component.html', 13 | styleUrls: ['./user-forgetpwd.component.css'] 14 | }) 15 | export class UserForgetpwdComponent implements OnInit { 16 | mail; 17 | private error: Error; 18 | 19 | 20 | constructor( 21 | private userService: UserService, 22 | private router: Router 23 | ) { } 24 | 25 | ngOnInit() { 26 | } 27 | 28 | doGetNewPwd() { 29 | Common.startLoading(); 30 | this.userService.forgetPwd(this.mail).subscribe({ 31 | next: msg => { Common.stopLoading(); SweetAlert.alert(msg) }, 32 | error: error => console.log(error) 33 | }); 34 | } 35 | 36 | goBackLogin() { 37 | this.router.navigate([{ outlets: { user: ['user-login'] } }]); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-control.component.html: -------------------------------------------------------------------------------- 1 |
      2 | 3 |
      4 |
      5 | 6 | 7 | 8 |
      9 |
      10 |
      -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-control.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | import { FormGroup } from '@angular/forms'; 3 | 4 | import { FieldBase } from './form-field'; 5 | 6 | @Component({ 7 | selector: 'form-control', 8 | templateUrl: 'form-control.component.html' 9 | }) 10 | export class FormControlComponent implements OnInit { 11 | @Input() field: FieldBase; 12 | @Input() form: FormGroup; 13 | 14 | constructor() { } 15 | 16 | ngOnInit() { } 17 | 18 | } -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-field/field-base.ts: -------------------------------------------------------------------------------- 1 | export class FieldBase{ 2 | value: T; 3 | key: string; 4 | label: string; 5 | controlType: string; 6 | placeholder: string; 7 | 8 | constructor(options: { 9 | value?: T, 10 | key?: string, 11 | label?: string, 12 | required?: boolean, 13 | order?: number, 14 | controlType?: string, 15 | placeholder?: string 16 | } = {}) { 17 | this.value = options.value; 18 | this.key = options.key || ''; 19 | this.label = options.label || ''; 20 | this.controlType = options.controlType || ''; 21 | this.placeholder = options.placeholder || ''; 22 | } 23 | } -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-field/image.ts: -------------------------------------------------------------------------------- 1 | import { FieldBase } from './field-base'; 2 | 3 | export class Image extends FieldBase { 4 | controlType = 'image'; 5 | src: string; 6 | constructor(options: {} = {}) { 7 | super(options); 8 | this.src = options['src'] || ''; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-field/index.ts: -------------------------------------------------------------------------------- 1 | export { FieldBase } from './field-base'; 2 | export { Textbox } from './textbox'; 3 | export { TextArea } from './textarea'; 4 | export { Image } from './image'; -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-field/textarea.ts: -------------------------------------------------------------------------------- 1 | import { FieldBase } from './field-base'; 2 | 3 | export class TextArea extends FieldBase { 4 | controlType = 'textarea'; 5 | rows: number; 6 | constructor(options: {} = {}) { 7 | super(options); 8 | this.rows = options['rows'] || 1; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/user/user-info/dynamic-form/form-field/textbox.ts: -------------------------------------------------------------------------------- 1 | import { FieldBase } from './field-base'; 2 | 3 | export class Textbox extends FieldBase { 4 | controlType = 'textbox'; 5 | type: string; 6 | constructor(options: {} = {}) { 7 | super(options); 8 | this.type = options['type'] || ''; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/user/user-info/user-info.component.css: -------------------------------------------------------------------------------- 1 | .user-info-container { 2 | margin-top: 20px; 3 | } 4 | 5 | .form-control { 6 | height: 38px; 7 | } -------------------------------------------------------------------------------- /src/app/user/user-info/user-info.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/user/user-info/user-info.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserInfoComponent } from './user-info.component'; 4 | 5 | describe('UserInfoComponent', () => { 6 | let component: UserInfoComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserInfoComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserInfoComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/user/user-info/user-info.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | import { FormControl, FormGroup, Validators } from '@angular/forms'; 3 | import { ActivatedRoute, Router } from '@angular/router'; 4 | 5 | import { FieldBase, Textbox, TextArea, Image } from './dynamic-form/form-field'; 6 | 7 | @Component({ 8 | selector: 'app-user-info', 9 | templateUrl: './user-info.component.html', 10 | styleUrls: ['./user-info.component.css'] 11 | }) 12 | export class UserInfoComponent implements OnInit { 13 | 14 | @Input() fields: FieldBase[] = [ 15 | new Image({ 16 | src: 'assets/global/img/angular2-small.png' 17 | }), 18 | new Textbox({ 19 | label: '头像:', 20 | placeholder: '请选择头像上传', 21 | type: 'file' 22 | }), 23 | new Textbox({ 24 | label: '用户名:', 25 | placeholder: '用户名' 26 | }), 27 | new Textbox({ 28 | label: '常用邮箱:', 29 | placeholder: '常用邮箱' 30 | }), 31 | new Textbox({ 32 | label: 'QQ:', 33 | placeholder: 'QQ' 34 | }), 35 | new Textbox({ 36 | label: '手机号码:', 37 | placeholder: '手机号码' 38 | }), 39 | new TextArea({ 40 | label: '个人简介:', 41 | placeholder: '个人简介,最多140字,不能放链接。', 42 | rows: 3, 43 | }) 44 | ]; 45 | 46 | public form: FormGroup; 47 | 48 | constructor(public router: Router, 49 | public activeRoute: ActivatedRoute) { 50 | 51 | } 52 | 53 | ngOnInit() { 54 | this.form = this.toFormGroup(this.fields); 55 | 56 | this.activeRoute.params.subscribe( 57 | params => { console.log(params); } 58 | ); 59 | } 60 | 61 | toFormGroup(fields: FieldBase[]) { 62 | let group: any = {}; 63 | 64 | fields.forEach(field => { 65 | group[field.key] = new FormControl(field.value || ''); 66 | }); 67 | return new FormGroup(group); 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /src/app/user/user-login/user-login.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/app/user/user-login/user-login.component.css -------------------------------------------------------------------------------- /src/app/user/user-login/user-login.component.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 |
      5 |

      登陆

      6 |
      7 |
      8 |
      9 |
      10 | 11 |
      12 | 13 |
      请输入用户名!
      14 |
      15 |
      16 |
      17 | 18 |
      19 | 20 |
      请输入密码!
      21 |
      22 |
      23 |
      24 |
      25 |
      26 | 27 | 记住我 28 | 29 | 注册 30 |
      31 |
      32 |
      33 |
      {{error}}
      34 |
      35 |
      36 | 37 | 38 |
      39 |
      40 |
      41 |
      42 |
      43 |
      44 |
      -------------------------------------------------------------------------------- /src/app/user/user-login/user-login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserLoginComponent } from './user-login.component'; 4 | 5 | describe('UserLoginComponent', () => { 6 | let component: UserLoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserLoginComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserLoginComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/user/user-login/user-login.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | import { ActivatedRoute, Router, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot } from '@angular/router'; 3 | import { UserService } from '../user.service'; 4 | import { Observable } from 'rxjs/Observable'; 5 | 6 | import { User } from '../model/user'; 7 | import { fadeIn } from '../../animations/fade-in'; 8 | import { TabControlService } from '../../layout/header/tab/tabControl.service'; 9 | 10 | @Component({ 11 | selector: 'app-user-login', 12 | templateUrl: './user-login.component.html', 13 | styleUrls: ['./user-login.component.css'], 14 | animations: [fadeIn] 15 | }) 16 | export class UserLoginComponent implements OnInit { 17 | public user: User = new User(); 18 | public error: Error; 19 | 20 | constructor( 21 | public router: Router, 22 | public activatedRoute: ActivatedRoute, 23 | public userService: UserService, 24 | public tabControlService: TabControlService 25 | ) { 26 | } 27 | 28 | ngOnInit() { 29 | // console.log("--- user-login-component ---"); 30 | // console.log(this.router); 31 | // console.log(this.activatedRoute); 32 | 33 | // let activatedRouteSnapshot: ActivatedRouteSnapshot = this.activatedRoute.snapshot; 34 | // let routerState: RouterState = this.router.routerState; 35 | // let routerStateSnapshot: RouterStateSnapshot = routerState.snapshot; 36 | 37 | // console.log(activatedRouteSnapshot); 38 | // console.log(routerState); 39 | // console.log(routerStateSnapshot); 40 | } 41 | 42 | public doLogin(): void { 43 | // console.log(this.user); 44 | this.userService.login(this.user); 45 | } 46 | 47 | public doLogout(): void { 48 | this.userService.logout(); 49 | } 50 | 51 | public doRegister(): void { 52 | this.router.navigate([{ outlets: { user: ['user-register'] } }]); 53 | } 54 | 55 | public forgetPwd(): void { 56 | this.router.navigate([{ outlets: { user: ['user-forgetpwd'] } }]); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/app/user/user-register/user-register.component.css: -------------------------------------------------------------------------------- 1 | .user-register-container { 2 | position: fixed; 3 | z-index: 15; 4 | top: 10%; 5 | left: 30%; 6 | } 7 | 8 | #vcode_img { 9 | margin: 4px 20px 0 0; 10 | } 11 | 12 | .user-register-btn-group button { 13 | margin-right: 40px; 14 | } -------------------------------------------------------------------------------- /src/app/user/user-register/user-register.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserRegisterComponent } from './user-register.component'; 4 | 5 | describe('UserRegisterComponent', () => { 6 | let component: UserRegisterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserRegisterComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserRegisterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/user/user.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { RouterModule } from '@angular/router'; 4 | import { Http } from '@angular/http'; 5 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 6 | 7 | import { TranslateModule, TranslateLoader, TranslateStaticLoader } from 'ng2-translate'; 8 | 9 | import { ShareModule } from '../share/share.module'; 10 | import { UserLoginComponent } from './user-login/user-login.component'; 11 | import { UserRegisterComponent } from './user-register/user-register.component'; 12 | import { UserInfoComponent } from './user-info/user-info.component'; 13 | import { UserForgetpwdComponent } from './user-forgetpwd/user-forgetpwd.component'; 14 | import { UserChangePwdComponent } from './user-change-pwd/user-change-pwd.component'; 15 | 16 | export function createTranslateLoader(http: Http) { 17 | return new TranslateStaticLoader(http, './assets/i18n', '.json'); 18 | } 19 | 20 | @NgModule({ 21 | imports: [ 22 | CommonModule, 23 | FormsModule, 24 | ReactiveFormsModule, 25 | TranslateModule.forRoot({ 26 | provide: TranslateLoader, 27 | useFactory: (createTranslateLoader), 28 | deps: [Http] 29 | }), 30 | ShareModule 31 | ], 32 | declarations: [UserLoginComponent, UserRegisterComponent, UserInfoComponent, UserForgetpwdComponent, UserChangePwdComponent] 33 | }) 34 | export class UserModule { } 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/app/user/user.routing.ts: -------------------------------------------------------------------------------- 1 | import { RouterModule } from '@angular/router'; 2 | 3 | import { UserRegisterComponent } from './user-register/user-register.component'; 4 | import { UserLoginComponent } from './user-login/user-login.component'; 5 | import { UserInfoComponent } from './user-info/user-info.component'; 6 | import { UserForgetpwdComponent } from './user-forgetpwd/user-forgetpwd.component'; 7 | 8 | export const userRoutes = [ 9 | { 10 | path: 'user-register', 11 | component: UserRegisterComponent, 12 | outlet: 'user' 13 | }, 14 | { 15 | path: 'user-login', 16 | component: UserLoginComponent, 17 | outlet: 'user' 18 | }, 19 | { 20 | path: 'user-info', 21 | component: UserInfoComponent 22 | }, 23 | { 24 | path: 'user-forgetpwd', 25 | component: UserForgetpwdComponent 26 | }, 27 | ]; 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/app/user/user.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { UserService } from './user.service'; 4 | 5 | describe('UserService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [UserService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([UserService], (service: UserService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/assets/global/img/angular2-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/img/angular2-small.png -------------------------------------------------------------------------------- /src/assets/global/img/ngLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/img/ngLogo.png -------------------------------------------------------------------------------- /src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/README.md: -------------------------------------------------------------------------------- 1 | CKEditor 4 2 | ========== 3 | 4 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 5 | http://ckeditor.com - See LICENSE.md for license information. 6 | 7 | CKEditor is a text editor to be used inside web pages. It's not a replacement 8 | for desktop text editors like Word or OpenOffice, but a component to be used as 9 | part of web applications and websites. 10 | 11 | ## Documentation 12 | 13 | The full editor documentation is available online at the following address: 14 | http://docs.ckeditor.com 15 | 16 | ## Installation 17 | 18 | Installing CKEditor is an easy task. Just follow these simple steps: 19 | 20 | 1. **Download** the latest version from the CKEditor website: 21 | http://ckeditor.com. You should have already completed this step, but be 22 | sure you have the very latest version. 23 | 2. **Extract** (decompress) the downloaded file into the root of your website. 24 | 25 | **Note:** CKEditor is by default installed in the `ckeditor` folder. You can 26 | place the files in whichever you want though. 27 | 28 | ## Checking Your Installation 29 | 30 | The editor comes with a few sample pages that can be used to verify that 31 | installation proceeded properly. Take a look at the `samples` directory. 32 | 33 | To test your installation, just call the following page at your website: 34 | 35 | http:////samples/index.html 36 | 37 | For example: 38 | 39 | http://www.example.com/ckeditor/samples/index.html 40 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | * For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | 6 | CKEDITOR.editorConfig = function( config ) { 7 | // Define changes to default configuration here. For example: 8 | // config.language = 'fr'; 9 | // config.uiColor = '#AADC6E'; 10 | }; 11 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("a11yHelp",function(h){var a=h.lang.a11yhelp,b=h.lang.common.keyboard,n=CKEDITOR.tools.getNextId(),e={8:b[8],9:a.tab,13:b[13],16:b[16],17:b[17],18:b[18],19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:b[35],36:b[36],37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:b[46],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, 6 | 105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=b[18];e[CKEDITOR.SHIFT]=b[16];e[CKEDITOR.CTRL]=b[17];var g=[CKEDITOR.ALT,CKEDITOR.SHIFT, 7 | CKEDITOR.CTRL],p=/\$\{(.*?)\}/g,t=function(){var a=h.keystrokeHandler.keystrokes,b={},d;for(d in a)b[a[d]]=d;return function(a,d){var c;if(b[d]){c=b[d];for(var k,l,m=[],f=0;f=k&&(c-=l,m.push(e[l]));m.push(e[c]||String.fromCharCode(c));c=m.join("+")}else c=a;return c}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:h.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()}, 8 | html:function(){for(var b='\x3cdiv class\x3d"cke_accessibility_legend" role\x3d"document" aria-labelledby\x3d"'+n+'_arialbl" tabIndex\x3d"-1"\x3e%1\x3c/div\x3e\x3cspan id\x3d"'+n+'_arialbl" class\x3d"cke_voice_label"\x3e'+a.contents+" \x3c/span\x3e",e=[],d=a.legend,h=d.length,g=0;g 2 | 3 | cursor 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/copyformatting/styles/copyformatting.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | 6 | html.cke_copyformatting_active { 7 | min-height: 100%; 8 | } 9 | 10 | /* There is no cursor in CUR format for IE/Edge as that browser 11 | does not support custom cursor in [contenteditable] area. 12 | Ticket for this issue: 13 | https://connect.microsoft.com/IE/feedback/details/1070215/cant-change-cursor-in-contenteditable-using-css */ 14 | .cke_copyformatting_disabled, 15 | .cke_copyformatting_disabled a, 16 | .cke_copyformatting_disabled .cke_editable { 17 | cursor: url(../cursors/cursor-disabled.svg) 12 1, auto; 18 | } 19 | 20 | .cke_copyformatting_disabled .cke_top a, 21 | .cke_copyformatting_disabled .cke_bottom a { 22 | cursor: default; 23 | } 24 | 25 | /* Added `!important` rule as a fix for overriding the cursor by the Table Resize plugin. 26 | The `!important` rule is used because the Table Resize plugin creates a `
      ` which changes the cursor using inlined styles. */ 27 | .cke_copyformatting_active, 28 | .cke_copyformatting_active.cke_editable, 29 | .cke_copyformatting_active .cke_editable, 30 | .cke_copyformatting_active a, 31 | .cke_copyformatting_active table, 32 | .cke_copyformatting_active div[data-cke-temp], 33 | .cke_copyformatting_tableresize_cursor div[data-cke-temp] { 34 | cursor: url(../cursors/cursor.svg) 12 1, auto !important; 35 | } 36 | 37 | .cke_screen_reader_only { 38 | position: absolute; 39 | clip: rect(1px, 1px, 1px, 1px); 40 | padding: 0; 41 | border: 0; 42 | height: 1px; 43 | width: 1px; 44 | overflow: hidden; 45 | } 46 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/dialog/dialogDefinition.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/flash/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/flash/images/placeholder.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/dialogs/button.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("button",function(b){function d(a){var b=this.getValue();b?(a.attributes[this.id]=b,"name"==this.id&&(a.attributes["data-cke-saved-name"]=b)):(delete a.attributes[this.id],"name"==this.id&&delete a.attributes["data-cke-saved-name"])}return{title:b.lang.forms.button.title,minWidth:350,minHeight:150,onShow:function(){delete this.button;var a=this.getParentEditor().getSelection().getSelectedElement();a&&a.is("input")&&a.getAttribute("type")in{button:1,reset:1,submit:1}&&(this.button= 6 | a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.button,d=!b,c=b?CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element("input");this.commitContent(c);var e=new CKEDITOR.htmlParser.basicWriter;c.writeHtml(e);c=CKEDITOR.dom.element.createFromHtml(e.getHtml(),a.document);d?a.insertElement(c):(c.replace(b),a.getSelection().selectElement(c))},contents:[{id:"info",label:b.lang.forms.button.title,title:b.lang.forms.button.title,elements:[{id:"name", 7 | type:"text",bidi:!0,label:b.lang.common.name,"default":"",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:d},{id:"value",type:"text",label:b.lang.forms.button.text,accessKey:"V","default":"",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:d},{id:"type",type:"select",label:b.lang.forms.button.type,"default":"button",accessKey:"T",items:[[b.lang.forms.button.typeBtn,"button"],[b.lang.forms.button.typeSbm,"submit"],[b.lang.forms.button.typeRst, 8 | "reset"]],setup:function(a){this.setValue(a.getAttribute("type")||"")},commit:d}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/dialogs/checkbox.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("checkbox",function(d){return{title:d.lang.forms.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){delete this.checkbox;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"checkbox"==a.getAttribute("type")&&(this.checkbox=a,this.setupContent(a))},onOk:function(){var a,b=this.checkbox;b||(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","checkbox"),a.insertElement(b));this.commitContent({element:b})},contents:[{id:"info", 6 | label:d.lang.forms.checkboxAndRadio.checkboxTitle,title:d.lang.forms.checkboxAndRadio.checkboxTitle,startupFocus:"txtName",elements:[{id:"txtName",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",label:d.lang.forms.checkboxAndRadio.value, 7 | "default":"",accessKey:"V",setup:function(a){a=a.getAttribute("value");this.setValue(CKEDITOR.env.ie&&"on"==a?"":a)},commit:function(a){var b=a.element,c=this.getValue();!c||CKEDITOR.env.ie&&"on"==c?CKEDITOR.env.ie?(c=new CKEDITOR.dom.element("input",b.getDocument()),b.copyAttributes(c,{value:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c):b.removeAttribute("value"):b.setAttribute("value",c)}},{id:"cmbSelected",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"", 8 | accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=!!b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('\x3cinput type\x3d"checkbox"'+(e?' checked\x3d"checked"':"")+"/\x3e",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else a=this.getValue(),CKEDITOR.env.webkit&&(b.$.checked=a),a?b.setAttribute("checked", 9 | "checked"):b.removeAttribute("checked")}},{id:"required",type:"checkbox",label:d.lang.forms.checkboxAndRadio.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},commit:function(a){a=a.element;this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/dialogs/form.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),a.appendBogus());c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)|| 6 | "")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",bidi:!0,type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()): 7 | (a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target", 8 | type:"select",label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/dialogs/hiddenfield.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type")&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name"), 6 | b=this.getParentEditor(),a=CKEDITOR.env.ie&&8>CKEDITOR.document.$.documentMode?b.document.createElement('\x3cinput name\x3d"'+CKEDITOR.tools.htmlEncode(a)+'"\x3e'):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title,elements:[{id:"_cke_saved_name", 7 | type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/dialogs/radio.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("radio",function(b){return{title:b.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"input"==a.getName()&&"radio"==a.getAttribute("type")&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,c=this.radioButton,b=!c;b&&(a=this.getParentEditor(),c=a.document.createElement("input"),c.setAttribute("type","radio"));b&&a.insertElement(c);this.commitContent({element:c})}, 6 | contents:[{id:"info",label:b.lang.forms.checkboxAndRadio.radioTitle,title:b.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:b.lang.forms.checkboxAndRadio.value,"default":"", 7 | accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:b.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var c=a.element;if(CKEDITOR.env.ie){var d=c.getAttribute("checked"),e=!!this.getValue();d!=e&&(d=CKEDITOR.dom.element.createFromHtml('\x3cinput type\x3d"radio"'+ 8 | (e?' checked\x3d"checked"':"")+"\x3e\x3c/input\x3e",b.document),c.copyAttributes(d,{type:1,checked:1}),d.replace(c),b.getSelection().selectElement(d),a.element=d)}else a=this.getValue(),CKEDITOR.env.webkit&&(c.$.checked=a),a?c.setAttribute("checked","checked"):c.removeAttribute("checked")}},{id:"required",type:"checkbox",label:b.lang.forms.checkboxAndRadio.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},commit:function(a){a=a.element; 9 | this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/dialogs/textarea.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("textarea",function(b){return{title:b.lang.forms.textarea.title,minWidth:350,minHeight:220,onShow:function(){delete this.textarea;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"textarea"==a.getName()&&(this.textarea=a,this.setupContent(a))},onOk:function(){var a,b=this.textarea,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("textarea"));this.commitContent(b);c&&a.insertElement(b)},contents:[{id:"info",label:b.lang.forms.textarea.title,title:b.lang.forms.textarea.title, 6 | elements:[{id:"_cke_saved_name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{type:"hbox",widths:["50%","50%"],children:[{id:"cols",type:"text",label:b.lang.forms.textarea.cols,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed), 7 | setup:function(a){a=a.hasAttribute("cols")&&a.getAttribute("cols");this.setValue(a||"")},commit:function(a){this.getValue()?a.setAttribute("cols",this.getValue()):a.removeAttribute("cols")}},{id:"rows",type:"text",label:b.lang.forms.textarea.rows,"default":"",accessKey:"R",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),setup:function(a){a=a.hasAttribute("rows")&&a.getAttribute("rows");this.setValue(a||"")},commit:function(a){this.getValue()?a.setAttribute("rows", 8 | this.getValue()):a.removeAttribute("rows")}}]},{id:"value",type:"textarea",label:b.lang.forms.textfield.value,"default":"",setup:function(a){this.setValue(a.$.defaultValue)},commit:function(a){a.$.value=a.$.defaultValue=this.getValue()}},{id:"required",type:"checkbox",label:b.lang.forms.textfield.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},commit:function(a){this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/forms/images/hiddenfield.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/forms/images/hiddenfield.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/icons.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/icons_hidpi.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/iframe/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/iframe/images/placeholder.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/image/images/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/image/images/noimage.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/link/dialogs/anchor.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.dialog.add("anchor",function(c){function e(b,a){return b.createFakeElement(b.document.createElement("a",{attributes:a}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var b=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:b,name:b,"data-cke-saved-name":b};this._.selectedElement?this._.selectedElement.data("cke-realelement")?(b=e(c,a),b.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(b)):this._.selectedElement.setAttributes(a): 6 | (b=(b=c.getSelection())&&b.getRanges()[0],b.collapsed?(a=e(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,a.applyToRange(b)))},onHide:function(){delete this._.selectedElement},onShow:function(){var b=c.getSelection(),a;a=b.getRanges()[0];var d=b.getSelectedElement();d?d.is("a")?a=d:(a.shrink(CKEDITOR.SHRINK_ELEMENT),d=a.getEnclosedNode(),a=d.type===CKEDITOR.NODE_ELEMENT&&d.is("a")&& 7 | d):a=null;var f=(d=a&&a.data("cke-realelement"))?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a):CKEDITOR.plugins.link.getSelectedLink(c);if(f){this._.selectedElement=f;var e=f.data("cke-saved-name");this.setValueOf("info","txtName",e||"");!d&&b.selectElement(f);a&&(this._.selectedElement=a)}this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return this.getValue()? 8 | !0:(alert(c.lang.link.anchor.errorName),!1)}}]}]}}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/link/images/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/link/images/anchor.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/link/images/hidpi/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/link/images/hidpi/anchor.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/magicline/images/hidpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/magicline/images/hidpi/icon.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/magicline/images/icon-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/magicline/images/icon-rtl.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/magicline/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/magicline/images/icon.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/pagebreak/images/pagebreak.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/pagebreak/images/pagebreak.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/preview/preview.html: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/scayt/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | SCAYT plugin for CKEditor 4 Changelog 2 | ==================== 3 | ### CKEditor 4.5.6 4 | 5 | New Features: 6 | * CKEditor [language addon](http://ckeditor.com/addon/language) support 7 | * CKEditor [placeholder addon](http://ckeditor.com/addon/placeholder) support 8 | * Drag and Drop support 9 | * *Experimental* GRAYT functionality http://www.webspellchecker.net/samples/scayt-ckeditor-plugin.html#25 10 | 11 | Fixed issues: 12 | * [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98) SCAYT Affects Dialog Double Click. Fixed in SCAYT Core. 13 | * [#102](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/102) SCAYT Core performance enhancements 14 | * [#104](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/104) SCAYT's spans leak into the clipboard and after pasting 15 | * [#105](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/105) Javascript error fired in case of multiple instances of CKEditor in one page 16 | * [#107](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/107) SCAYT should not check non-editable parts of content 17 | * [#108](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/108) Latest SCAYT copies id of editor element to the iframe 18 | * SCAYT stops working when CKEditor Undo plug-in not enabled 19 | * Issue with pasting SCAYT markup in CKEditor 20 | * [#32](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/32) SCAYT stops working after pressing Cancel button in WSC dialog 21 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/scayt/LICENSE.md: -------------------------------------------------------------------------------- 1 | Software License Agreement 2 | ========================== 3 | 4 | **CKEditor SCAYT Plugin** 5 | Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. 6 | 7 | Licensed under the terms of any of the following licenses at your choice: 8 | 9 | * GNU General Public License Version 2 or later (the "GPL"): 10 | http://www.gnu.org/licenses/gpl.html 11 | 12 | * GNU Lesser General Public License Version 2.1 or later (the "LGPL"): 13 | http://www.gnu.org/licenses/lgpl.html 14 | 15 | * Mozilla Public License Version 1.1 or later (the "MPL"): 16 | http://www.mozilla.org/MPL/MPL-1.1.html 17 | 18 | You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. 19 | 20 | Sources of Intellectual Property Included in this plugin 21 | -------------------------------------------------------- 22 | 23 | Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. 24 | 25 | Trademarks 26 | ---------- 27 | 28 | CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. 29 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/scayt/README.md: -------------------------------------------------------------------------------- 1 | CKEditor SCAYT Plugin 2 | ===================== 3 | 4 | This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. 5 | 6 | SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. 7 | 8 | Installation 9 | ------------ 10 | 11 | 1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. 12 | 2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): 13 | 14 | config.extraPlugins = 'scayt'; 15 | 16 | That's all. SCAYT will appear on the editor toolbar and will be ready to use. 17 | 18 | License 19 | ------- 20 | 21 | Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). 22 | 23 | See LICENSE.md for more information. 24 | 25 | Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). 26 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/scayt/dialogs/dialog.css: -------------------------------------------------------------------------------- 1 | div.cke_dialog_ui_scaytItemList { 2 | border: 1px solid #c9cccf; 3 | } 4 | 5 | .cke_scaytItemList-child { 6 | position: relative; 7 | padding: 6px 30px 6px 5px; 8 | overflow: hidden; 9 | text-overflow: ellipsis; 10 | white-space: nowrap; 11 | } 12 | 13 | .cke_scaytItemList-child:hover { 14 | background: #ebebeb; 15 | } 16 | 17 | .cke_scaytItemList-child .cke_scaytItemList_remove { 18 | position: absolute; 19 | top: 0; 20 | right: 5px; 21 | width: 26px; 22 | height: 26px; 23 | } 24 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/scayt/dialogs/toolbar.css: -------------------------------------------------------------------------------- 1 | a 2 | { 3 | text-decoration:none; 4 | padding: 2px 4px 4px 6px; 5 | display : block; 6 | border-width: 1px; 7 | border-style: solid; 8 | margin : 0px; 9 | } 10 | 11 | a.cke_scayt_toogle:hover, 12 | a.cke_scayt_toogle:focus, 13 | a.cke_scayt_toogle:active 14 | { 15 | border-color: #316ac5; 16 | background-color: #dff1ff; 17 | color : #000; 18 | cursor: pointer; 19 | margin : 0px; 20 | } 21 | a.cke_scayt_toogle { 22 | color : #316ac5; 23 | border-color: #fff; 24 | } 25 | .scayt_enabled a.cke_scayt_item { 26 | color : #316ac5; 27 | border-color: #fff; 28 | margin : 0px; 29 | } 30 | .scayt_disabled a.cke_scayt_item { 31 | color : gray; 32 | border-color : #fff; 33 | } 34 | .scayt_enabled a.cke_scayt_item:hover, 35 | .scayt_enabled a.cke_scayt_item:focus, 36 | .scayt_enabled a.cke_scayt_item:active 37 | { 38 | border-color: #316ac5; 39 | background-color: #dff1ff; 40 | color : #000; 41 | cursor: pointer; 42 | } 43 | .scayt_disabled a.cke_scayt_item:hover, 44 | .scayt_disabled a.cke_scayt_item:focus, 45 | .scayt_disabled a.cke_scayt_item:active 46 | { 47 | border-color: gray; 48 | background-color: #dff1ff; 49 | color : gray; 50 | cursor: no-drop; 51 | } 52 | .cke_scayt_set_on, .cke_scayt_set_off 53 | { 54 | display: none; 55 | } 56 | .scayt_enabled .cke_scayt_set_on 57 | { 58 | display: none; 59 | } 60 | .scayt_disabled .cke_scayt_set_on 61 | { 62 | display: inline; 63 | } 64 | .scayt_disabled .cke_scayt_set_off 65 | { 66 | display: none; 67 | } 68 | .scayt_enabled .cke_scayt_set_off 69 | { 70 | display: inline; 71 | } 72 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css: -------------------------------------------------------------------------------- 1 | .scayt-lang-list > div 2 | { 3 | padding-bottom: 6px !important; 4 | } 5 | 6 | .scayt-lang-list > div input 7 | { 8 | margin-right: 4px; 9 | } 10 | 11 | #scayt_about_ 12 | { 13 | margin: 30px auto 0 auto; 14 | } 15 | 16 | #scayt_about_ p 17 | { 18 | text-align: center; 19 | margin-bottom: 10px; 20 | } 21 | 22 | .cke_dialog_contents_body div[name=dictionaries] .cke_dialog_ui_hbox_last > a.cke_dialog_ui_button 23 | { 24 | margin-top: 0; 25 | } 26 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_address.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_blockquote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_blockquote.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_div.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_div.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h1.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h2.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h3.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h4.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h5.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_h6.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_p.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/showblocks/images/block_pre.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/angel_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/angel_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/angel_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/angel_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/angry_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/angry_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/angry_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/angry_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/broken_heart.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/broken_heart.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/broken_heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/broken_heart.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/confused_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/confused_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/confused_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/confused_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/cry_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/cry_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/cry_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/cry_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/devil_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/devil_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/devil_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/devil_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/embaressed_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/embaressed_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/embarrassed_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/embarrassed_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/embarrassed_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/embarrassed_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/envelope.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/envelope.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/envelope.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/heart.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/heart.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/heart.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/kiss.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/kiss.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/kiss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/kiss.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/lightbulb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/lightbulb.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/lightbulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/lightbulb.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/omg_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/omg_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/omg_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/omg_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/regular_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/regular_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/regular_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/regular_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/sad_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/sad_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/sad_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/sad_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/shades_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/shades_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/shades_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/shades_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/teeth_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/teeth_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/teeth_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/teeth_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_down.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_down.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_down.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_up.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/thumbs_up.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/tongue_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/tongue_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/tongue_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/tongue_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/tounge_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/tounge_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/wink_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/wink_smile.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/smiley/images/wink_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/smiley/images/wink_smile.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 2 | For licensing, see LICENSE.md or http://ckeditor.com/license 3 | 4 | cs.js Found: 118 Missing: 0 5 | cy.js Found: 118 Missing: 0 6 | de.js Found: 118 Missing: 0 7 | el.js Found: 16 Missing: 102 8 | eo.js Found: 118 Missing: 0 9 | et.js Found: 31 Missing: 87 10 | fa.js Found: 24 Missing: 94 11 | fi.js Found: 23 Missing: 95 12 | fr.js Found: 118 Missing: 0 13 | hr.js Found: 23 Missing: 95 14 | it.js Found: 118 Missing: 0 15 | nb.js Found: 118 Missing: 0 16 | nl.js Found: 118 Missing: 0 17 | no.js Found: 118 Missing: 0 18 | tr.js Found: 118 Missing: 0 19 | ug.js Found: 39 Missing: 79 20 | zh-cn.js Found: 118 Missing: 0 21 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/specialchar/dialogs/lang/ja.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", 6 | frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", 7 | times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", 8 | ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", 9 | rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/specialchar/dialogs/lang/ko.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang("specialchar","ko",{euro:"유로화 기호",lsquo:"왼쪽 외 따옴표",rsquo:"오른쪽 외 따옴표",ldquo:"왼쪽 쌍 따옴표",rdquo:"오른쪽 쌍 따옴표",ndash:"반각 대시",mdash:"전각 대시",iexcl:"반전된 느낌표",cent:"센트 기호",pound:"파운드화 기호",curren:"커런시 기호",yen:"위안화 기호",brvbar:"파선",sect:"섹션 기호",uml:"분음 부호",copy:"저작권 기호",ordf:"Feminine ordinal indicator",laquo:"왼쪽 쌍꺽쇠 인용 부호",not:"금지 기호",reg:"등록 기호",macr:"장음 기호",deg:"도 기호",sup2:"위첨자 2",sup3:"위첨자 3",acute:"양음 악센트 부호",micro:"마이크로 기호",para:"단락 기호",middot:"가운데 점",cedil:"세디유",sup1:"위첨자 1",ordm:"Masculine ordinal indicator", 6 | raquo:"오른쪽 쌍꺽쇠 인용 부호",frac14:"분수 사분의 일",frac12:"분수 이분의 일",frac34:"분수 사분의 삼",iquest:"뒤집힌 물음표",Agrave:"억음 부호가 있는 라틴 대문자 A",Aacute:"양음 악센트 부호가 있는 라틴 대문자 A",Acirc:"곡절 악센트 부호가 있는 라틴 대문자 A",Atilde:"틸데가 있는 라틴 대문자 A",Auml:"분음 기호가 있는 라틴 대문자 A",Aring:"윗고리가 있는 라틴 대문자 A",AElig:"라틴 대문자 Æ",Ccedil:"세디유가 있는 라틴 대문자 C",Egrave:"억음 부호가 있는 라틴 대문자 E",Eacute:"양음 악센트 부호가 있는 라틴 대문자 E",Ecirc:"곡절 악센트 부호가 있는 라틴 대문자 E",Euml:"분음 기호가 있는 라틴 대문자 E",Igrave:"억음 부호가 있는 라틴 대문자 I",Iacute:"양음 악센트 부호가 있는 라틴 대문자 I",Icirc:"곡절 악센트 부호가 있는 라틴 대문자 I", 7 | Iuml:"분음 기호가 있는 라틴 대문자 I",ETH:"라틴 대문자 Eth",Ntilde:"틸데가 있는 라틴 대문자 N",Ograve:"억음 부호가 있는 라틴 대문자 O",Oacute:"양음 부호가 있는 라틴 대문자 O",Ocirc:"곡절 악센트 부호가 있는 라틴 대문자 O",Otilde:"틸데가 있는 라틴 대문자 O",Ouml:"분음 기호가 있는 라틴 대문자 O",times:"곱하기 기호",Oslash:"사선이 있는 라틴 대문자 O",Ugrave:"억음 부호가 있는 라틴 대문자 U",Uacute:"양음 부호가 있는 라틴 대문자 U",Ucirc:"곡절 악센트 부호가 있는 라틴 대문자 U",Uuml:"분음 기호가 있는 라틴 대문자 U",Yacute:"양음 부호가 있는 라틴 대문자 Y",THORN:"라틴 대문자 Thorn",szlig:"라틴 소문자 sharp s",agrave:"억음 부호가 있는 라틴 소문자 a",aacute:"양음 부호가 있는 라틴 소문자 a",acirc:"곡절 악센트 부호가 있는 라틴 소문자 a", 8 | atilde:"틸데가 있는 라틴 소문자 a",auml:"분음 기호가 있는 라틴 소문자 a",aring:"윗고리가 있는 라틴 소문자 a",aelig:"라틴 소문자 æ",ccedil:"세디유가 있는 라틴 소문자 c",egrave:"억음 부호가 있는 라틴 소문자 e",eacute:"양음 부호가 있는 라틴 소문자 e",ecirc:"곡절 악센트 부호가 있는 라틴 소문자 e",euml:"분음 기호가 있는 라틴 소문자 e",igrave:"억음 부호가 있는 라틴 소문자 i",iacute:"양음 부호가 있는 라틴 소문자 i",icirc:"곡절 악센트 부호가 있는 라틴 소문자 i",iuml:"분음 기호가 있는 라틴 소문자 i",eth:"라틴 소문자 eth",ntilde:"틸데가 있는 라틴 소문자 n",ograve:"억음 부호가 있는 라틴 소문자 o",oacute:"양음 부호가 있는 라틴 소문자 o",ocirc:"곡절 악센트 부호가 있는 라틴 소문자 o",otilde:"틸데가 있는 라틴 소문자 o",ouml:"분음 기호가 있는 라틴 소문자 o", 9 | divide:"나누기 기호",oslash:"사선이 있는 라틴 소문자 o",ugrave:"억음 부호가 있는 라틴 소문자 u",uacute:"양음 부호가 있는 라틴 소문자 u",ucirc:"곡절 악센트 부호가 있는 라틴 소문자 u",uuml:"분음 기호가 있는 라틴 소문자 u",yacute:"양음 부호가 있는 라틴 소문자 y",thorn:"라틴 소문자 thorn",yuml:"분음 기호가 있는 라틴 소문자 y",OElig:"라틴 대문합자 OE",oelig:"라틴 소문합자 oe",372:"곡절 악센트 부호가 있는 라틴 대문자 W",374:"곡절 악센트 부호가 있는 라틴 대문자 Y",373:"곡절 악센트 부호가 있는 라틴 소문자 w",375:"곡절 악센트 부호가 있는 라틴 소문자 y",sbquo:"외 아래-9 인용 부호",8219:"외 위쪽-뒤집힌-9 인용 부호",bdquo:"쌍 아래-9 인용 부호",hellip:"수평 생략 부호",trade:"상표 기호",9658:"검정 오른쪽 포인터",bull:"큰 점", 10 | rarr:"오른쪽 화살표",rArr:"오른쪽 두 줄 화살표",hArr:"양쪽 두 줄 화살표",diams:"검정 다이아몬드",asymp:"근사"}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", 6 | Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Æ",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", 7 | Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", 8 | iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", 9 | 373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/specialchar/dialogs/lang/zh.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"破折號",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"微",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"二分之一符號",frac34:"四分之三符號", 6 | iquest:"倒置的問號",Agrave:"拉丁大寫字母 A 帶抑音符號",Aacute:"拉丁大寫字母 A 帶尖音符號",Acirc:"拉丁大寫字母 A 帶揚抑符",Atilde:"拉丁大寫字母 A 帶波浪號",Auml:"拉丁大寫字母 A 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"拉丁大寫字母 E 帶抑音符號",Eacute:"拉丁大寫字母 E 帶尖音符號",Ecirc:"拉丁大寫字母 E 帶揚抑符",Euml:"拉丁大寫字母 E 帶分音符號",Igrave:"拉丁大寫字母 I 帶抑音符號",Iacute:"拉丁大寫字母 I 帶尖音符號",Icirc:"拉丁大寫字母 I 帶揚抑符",Iuml:"拉丁大寫字母 I 帶分音符號",ETH:"拉丁大寫字母 Eth",Ntilde:"拉丁大寫字母 N 帶波浪號",Ograve:"拉丁大寫字母 O 帶抑音符號",Oacute:"拉丁大寫字母 O 帶尖音符號",Ocirc:"拉丁大寫字母 O 帶揚抑符",Otilde:"拉丁大寫字母 O 帶波浪號", 7 | Ouml:"拉丁大寫字母 O 帶分音符號",times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"拉丁大寫字母 U 帶抑音符號",Uacute:"拉丁大寫字母 U 帶尖音符號",Ucirc:"拉丁大寫字母 U 帶揚抑符",Uuml:"拉丁大寫字母 U 帶分音符號",Yacute:"拉丁大寫字母 Y 帶尖音符號",THORN:"拉丁大寫字母 Thorn",szlig:"拉丁小寫字母 s",agrave:"拉丁小寫字母 a 帶抑音符號",aacute:"拉丁小寫字母 a 帶尖音符號",acirc:"拉丁小寫字母 a 帶揚抑符",atilde:"拉丁小寫字母 a 帶波浪號",auml:"拉丁小寫字母 a 帶分音符號",aring:"拉丁小寫字母 a 帶上圓圈",aelig:"拉丁小寫字母 æ",ccedil:"拉丁小寫字母 c 帶下尾符號",egrave:"拉丁小寫字母 e 帶抑音符號",eacute:"拉丁小寫字母 e 帶尖音符號",ecirc:"拉丁小寫字母 e 帶揚抑符",euml:"拉丁小寫字母 e 帶分音符號",igrave:"拉丁小寫字母 i 帶抑音符號", 8 | iacute:"拉丁小寫字母 i 帶尖音符號",icirc:"拉丁小寫字母 i 帶揚抑符",iuml:"拉丁小寫字母 i 帶分音符號",eth:"拉丁小寫字母 eth",ntilde:"拉丁小寫字母 n 帶波浪號",ograve:"拉丁小寫字母 o 帶抑音符號",oacute:"拉丁小寫字母 o 帶尖音符號",ocirc:"拉丁小寫字母 o 帶揚抑符",otilde:"拉丁小寫字母 o 帶波浪號",ouml:"拉丁小寫字母 o 帶分音符號",divide:"除號",oslash:"拉丁小寫字母 o 帶粗線符號",ugrave:"拉丁小寫字母 u 帶抑音符號",uacute:"拉丁小寫字母 u 帶尖音符號",ucirc:"拉丁小寫字母 u 帶揚抑符",uuml:"拉丁小寫字母 u 帶分音符號",yacute:"拉丁小寫字母 y 帶尖音符號",thorn:"拉丁小寫字母 thorn",yuml:"拉丁小寫字母 y 帶分音符號",OElig:"拉丁大寫字母 OE",oelig:"拉丁小寫字母 oe",372:"拉丁大寫字母 W 帶揚抑符",374:"拉丁大寫字母 Y 帶揚抑符",373:"拉丁小寫字母 w 帶揚抑符", 9 | 375:"拉丁小寫字母 y 帶揚抑符",sbquo:"低 9 單引號",8219:"高 9 反轉單引號",bdquo:"低 9 雙引號",hellip:"水平刪節號",trade:"商標符號",9658:"黑色向右指箭號",bull:"項目符號",rarr:"向右箭號",rArr:"向右雙箭號",hArr:"左右雙箭號",diams:"黑鑽套裝",asymp:"約等於"}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/tableselection/styles/tableselection.css: -------------------------------------------------------------------------------- 1 | .cke_table-faked-selection-editor *::selection, table.cke_table-faked-selection-table *::selection { 2 | background: transparent; 3 | } 4 | 5 | .cke_table-faked-selection-editor { 6 | /* With love, dedicated for Chrome, until https://bugs.chromium.org/p/chromium/issues/detail?id=702610 is resolved. 7 | It will force repaint (without reflow) so that selection is properly displayed. */ 8 | transform: translateZ( 0 ); 9 | } 10 | 11 | .cke_table-faked-selection { 12 | background: darkgray !important; 13 | color: black; 14 | } 15 | .cke_table-faked-selection a { 16 | color: black; 17 | } 18 | .cke_editable:focus .cke_table-faked-selection { 19 | /* We have to use !important here, as td might specify it's own background, thus table selection 20 | would not be visible. */ 21 | background: #0076cb !important; 22 | color: white; 23 | } 24 | .cke_editable:focus .cke_table-faked-selection a { 25 | color: white; 26 | } 27 | .cke_table-faked-selection::-moz-selection, .cke_table-faked-selection ::-moz-selection { 28 | background: transparent; 29 | } 30 | .cke_table-faked-selection::selection, .cke_table-faked-selection ::selection { 31 | background: transparent; 32 | } 33 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/templates/dialogs/templates.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | 6 | .cke_tpl_list 7 | { 8 | border: #dcdcdc 2px solid; 9 | background-color: #ffffff; 10 | overflow-y: auto; 11 | overflow-x: hidden; 12 | width: 100%; 13 | height: 220px; 14 | } 15 | 16 | .cke_tpl_item 17 | { 18 | margin: 5px; 19 | padding: 7px; 20 | border: #eeeeee 1px solid; 21 | *width: 88%; 22 | } 23 | 24 | .cke_tpl_preview 25 | { 26 | border-collapse: separate; 27 | text-indent:0; 28 | width: 100%; 29 | } 30 | .cke_tpl_preview td 31 | { 32 | padding: 2px; 33 | vertical-align: middle; 34 | } 35 | .cke_tpl_preview .cke_tpl_preview_img 36 | { 37 | width: 100px; 38 | } 39 | .cke_tpl_preview span 40 | { 41 | white-space: normal; 42 | } 43 | 44 | .cke_tpl_title 45 | { 46 | font-weight: bold; 47 | } 48 | 49 | .cke_tpl_list a:hover .cke_tpl_item, 50 | .cke_tpl_list a:focus .cke_tpl_item, 51 | .cke_tpl_list a:active .cke_tpl_item 52 | { 53 | border: #ff9933 1px solid; 54 | background-color: #fffacd; 55 | } 56 | 57 | .cke_tpl_list a:hover *, 58 | .cke_tpl_list a:focus *, 59 | .cke_tpl_list a:active * 60 | { 61 | cursor: pointer; 62 | } 63 | 64 | /* IE Quirks contextual selectors children will not get :hover transition until 65 | the hover style of the link itself contains certain CSS declarations. */ 66 | .cke_browser_quirks .cke_tpl_list a:active, 67 | .cke_browser_quirks .cke_tpl_list a:hover, 68 | .cke_browser_quirks .cke_tpl_list a:focus 69 | { 70 | background-position: 0 0; 71 | } 72 | 73 | .cke_hc .cke_tpl_list a:hover .cke_tpl_item, 74 | .cke_hc .cke_tpl_list a:focus .cke_tpl_item, 75 | .cke_hc .cke_tpl_list a:active .cke_tpl_item 76 | { 77 | border-width: 3px; 78 | } 79 | 80 | .cke_tpl_empty, .cke_tpl_loading 81 | { 82 | text-align: center; 83 | padding: 5px; 84 | } 85 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/templates/templates/default.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'\x3ch3\x3e\x3cimg src\x3d" " alt\x3d"" style\x3d"margin-right: 10px" height\x3d"100" width\x3d"100" align\x3d"left" /\x3eType the title here\x3c/h3\x3e\x3cp\x3eType the text here\x3c/p\x3e'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two columns, each one with a title, and some text.", 6 | html:'\x3ctable cellspacing\x3d"0" cellpadding\x3d"0" style\x3d"width:100%" border\x3d"0"\x3e\x3ctr\x3e\x3ctd style\x3d"width:50%"\x3e\x3ch3\x3eTitle 1\x3c/h3\x3e\x3c/td\x3e\x3ctd\x3e\x3c/td\x3e\x3ctd style\x3d"width:50%"\x3e\x3ch3\x3eTitle 2\x3c/h3\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd\x3eText 1\x3c/td\x3e\x3ctd\x3e\x3c/td\x3e\x3ctd\x3eText 2\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3cp\x3eMore text goes here.\x3c/p\x3e'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.", 7 | html:'\x3cdiv style\x3d"width: 80%"\x3e\x3ch3\x3eTitle goes here\x3c/h3\x3e\x3ctable style\x3d"width:150px;float: right" cellspacing\x3d"0" cellpadding\x3d"0" border\x3d"1"\x3e\x3ccaption style\x3d"border:solid 1px black"\x3e\x3cstrong\x3eTable title\x3c/strong\x3e\x3c/caption\x3e\x3ctr\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3cp\x3eType the text here\x3c/p\x3e\x3c/div\x3e'}]}); -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/templates/templates/images/template1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/templates/templates/images/template1.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/templates/templates/images/template2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/templates/templates/images/template2.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/templates/templates/images/template3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/plugins/templates/templates/images/template3.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/wsc/LICENSE.md: -------------------------------------------------------------------------------- 1 | Software License Agreement 2 | ========================== 3 | 4 | **CKEditor WSC Plugin** 5 | Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. 6 | 7 | Licensed under the terms of any of the following licenses at your choice: 8 | 9 | * GNU General Public License Version 2 or later (the "GPL"): 10 | http://www.gnu.org/licenses/gpl.html 11 | 12 | * GNU Lesser General Public License Version 2.1 or later (the "LGPL"): 13 | http://www.gnu.org/licenses/lgpl.html 14 | 15 | * Mozilla Public License Version 1.1 or later (the "MPL"): 16 | http://www.mozilla.org/MPL/MPL-1.1.html 17 | 18 | You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. 19 | 20 | Sources of Intellectual Property Included in this plugin 21 | -------------------------------------------------------- 22 | 23 | Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. 24 | 25 | Trademarks 26 | ---------- 27 | 28 | CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. 29 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/wsc/README.md: -------------------------------------------------------------------------------- 1 | CKEditor WebSpellChecker Plugin 2 | =============================== 3 | 4 | This plugin brings Web Spell Checker (WSC) into CKEditor. 5 | 6 | WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. 7 | 8 | Installation 9 | ------------ 10 | 11 | 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 12 | 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): 13 | 14 | config.extraPlugins = 'wsc'; 15 | 16 | That's all. WSC will appear on the editor toolbar and will be ready to use. 17 | 18 | License 19 | ------- 20 | 21 | Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). 22 | 23 | See LICENSE.md for more information. 24 | 25 | Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). 26 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/wsc/dialogs/ciframe.html: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 64 | 65 |

      66 | 67 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/wsc/dialogs/tmpFrameset.html: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/wsc/dialogs/wsc.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.html or http://ckeditor.com/license 4 | */ 5 | 6 | html, body 7 | { 8 | background-color: transparent; 9 | margin: 0px; 10 | padding: 0px; 11 | } 12 | 13 | body 14 | { 15 | padding: 10px; 16 | } 17 | 18 | body, td, input, select, textarea 19 | { 20 | font-size: 11px; 21 | font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; 22 | } 23 | 24 | .midtext 25 | { 26 | padding:0px; 27 | margin:10px; 28 | } 29 | 30 | .midtext p 31 | { 32 | padding:0px; 33 | margin:10px; 34 | } 35 | 36 | .Button 37 | { 38 | border: #737357 1px solid; 39 | color: #3b3b1f; 40 | background-color: #c7c78f; 41 | } 42 | 43 | .PopupTabArea 44 | { 45 | color: #737357; 46 | background-color: #e3e3c7; 47 | } 48 | 49 | .PopupTitleBorder 50 | { 51 | border-bottom: #d5d59d 1px solid; 52 | } 53 | .PopupTabEmptyArea 54 | { 55 | padding-left: 10px; 56 | border-bottom: #d5d59d 1px solid; 57 | } 58 | 59 | .PopupTab, .PopupTabSelected 60 | { 61 | border-right: #d5d59d 1px solid; 62 | border-top: #d5d59d 1px solid; 63 | border-left: #d5d59d 1px solid; 64 | padding: 3px 5px 3px 5px; 65 | color: #737357; 66 | } 67 | 68 | .PopupTab 69 | { 70 | margin-top: 1px; 71 | border-bottom: #d5d59d 1px solid; 72 | cursor: pointer; 73 | } 74 | 75 | .PopupTabSelected 76 | { 77 | font-weight: bold; 78 | cursor: default; 79 | padding-top: 4px; 80 | border-bottom: #f1f1e3 1px solid; 81 | background-color: #f1f1e3; 82 | } 83 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css: -------------------------------------------------------------------------------- 1 | .cke_dialog_body #overlayBlock, 2 | .cke_dialog_body #no_check_over 3 | { 4 | top: 39px !important; 5 | } 6 | 7 | div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_vbox td > .cke_dialog_ui_button:first-child 8 | { 9 | margin-top: 4px; 10 | } 11 | 12 | div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select > label 13 | { 14 | margin-left: 0; 15 | } 16 | 17 | div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select div.cke_dialog_ui_input_select 18 | { 19 | width: 140px !important; 20 | } 21 | 22 | div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select, 23 | div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select 24 | { 25 | margin-top: 1px; 26 | } 27 | 28 | div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select:focus, 29 | div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select:focus 30 | { 31 | margin-top: 0; 32 | } 33 | 34 | div[name=GrammTab] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button, 35 | div[name=Thesaurus] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button 36 | { 37 | margin-top: 4px !important; 38 | } 39 | 40 | div[name=Thesaurus] div.cke_dialog_ui_input_select 41 | { 42 | width: 180px !important; 43 | } 44 | -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/icons.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/icons_hidpi.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/arrow.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/close.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/close.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/lock.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/hidpi/refresh.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/lock-open.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/lock.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/refresh.png -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/ckeditor/skins/moono-lisa/images/spinner.gif -------------------------------------------------------------------------------- /src/assets/global/plugins/ckeditor/skins/moono-lisa/readme.md: -------------------------------------------------------------------------------- 1 | "Moono-lisa" Skin 2 | ================= 3 | 4 | This skin has been made a **default skin** starting from CKEditor 4.6.0 and is maintained by the core developers. 5 | 6 | For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) 7 | documentation. 8 | 9 | Features 10 | ------------------- 11 | "Moono-lisa" is a monochromatic skin, which offers a modern, flat and minimalistic look which blends very well in modern design. 12 | It comes with the following features: 13 | 14 | - Chameleon feature with brightness. 15 | - High-contrast compatibility. 16 | - Graphics source provided in SVG. 17 | 18 | Directory Structure 19 | ------------------- 20 | 21 | CSS parts: 22 | - **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, 23 | - **mainui.css**: the file contains styles of entire editor outline structures, 24 | - **toolbar.css**: the file contains styles of the editor toolbar space (top), 25 | - **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, 26 | - **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded 27 | until the first panel open up, 28 | - **elementspath.css**: the file contains styles of the editor elements path bar (bottom), 29 | - **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, 30 | it's not loaded until the first menu open up, 31 | - **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, 32 | - **reset.css**: the file defines the basis of style resets among all editor UI spaces, 33 | - **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, 34 | - **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. 35 | 36 | Other parts: 37 | - **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, 38 | - **images/**: contains a fill general used images, 39 | - **dev/**: contains SVG and PNG source of the skin icons. 40 | 41 | License 42 | ------- 43 | 44 | Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. 45 | 46 | For licensing, see LICENSE.md or [http://ckeditor.com/license](http://ckeditor.com/license) 47 | -------------------------------------------------------------------------------- /src/assets/global/plugins/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/assets/global/plugins/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/assets/global/scripts/common.js: -------------------------------------------------------------------------------- 1 | var Common = (function() { 2 | 3 | return { 4 | startLoading: function() { 5 | $('.loading-container').remove(); 6 | $('app-root').append(`
      7 |
      8 |
      9 |
      10 |
      11 |
      12 |
      13 |
      14 |
      15 |
      `) 16 | }, 17 | stopLoading: function() { 18 | $('.loading-container').remove(); 19 | } 20 | } 21 | })(); -------------------------------------------------------------------------------- /src/assets/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "app":{ 3 | "welcome":"Welcome", 4 | "logout":"Logout", 5 | "login":"Login", 6 | "register":"Register", 7 | "articles":"Articles", 8 | "doc":"Document", 9 | "console":"Console" 10 | }, 11 | "post":{ 12 | "publish":"publish" 13 | }, 14 | "userRegister":{ 15 | "userSignUp":"User Sign Up", 16 | "userName":"UserName:", 17 | "userName-placeholder":"4-32 characters", 18 | "nickName":"NickName:", 19 | "nickName-placeholder":"2-32 characters", 20 | "email":"Email:", 21 | "email-placeholder":"Frequently used mailboxes, sign in after verification.", 22 | "notice":"If you do not receive a verification email in your inbox, check your trash.", 23 | "password":"Password:", 24 | "password-placeholder":"Password, at least 8 characters.", 25 | "repeat-pwd":"Repeat PWD:", 26 | "repeat-pwd-placeholder":"Repeat password, two inputs must be consistent.", 27 | "signUp":"SignUp" 28 | }, 29 | "userLogin":{ 30 | "userLogin":"User Login" 31 | }, 32 | "search":"search", 33 | "submit":"Submit", 34 | "firstPage":"First", 35 | "lastPage":"Last", 36 | "previousPage":"Previous", 37 | "nextPage":"Next" 38 | } -------------------------------------------------------------------------------- /src/assets/i18n/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "articles": "动态", 4 | "welcome": "欢迎你", 5 | "logout": "退出", 6 | "login": "登录", 7 | "register": "注册", 8 | "doc": "官方文档", 9 | "console": "管理后台" 10 | }, 11 | "post": { 12 | "publish": "发布文章" 13 | }, 14 | "userRegister":{ 15 | "userSignUp":"用户注册", 16 | "userName":"用户名:", 17 | "userName-placeholder":"用户名4到32个字符", 18 | "nickName":"昵称:", 19 | "nickName-placeholder":"昵称2到32个字符", 20 | "email":"常用邮箱:", 21 | "email-placeholder":"常用邮箱,验证后才能登录", 22 | "notice":"【如果您未在收件箱收到验证邮件,请到垃圾箱查收。】", 23 | "password":"密码:", 24 | "password-placeholder":"密码,至少8位", 25 | "repeat-pwd":"重复密码:", 26 | "repeat-pwd-placeholder":"重复密码,两次输入必须一致", 27 | "signUp":"注册" 28 | }, 29 | "userLogin":{ 30 | "userLogin":"用户登录" 31 | }, 32 | "search": "搜索", 33 | "submit": "提交", 34 | "firstPage": "首页", 35 | "lastPage": "末页", 36 | "previousPage": "上一页", 37 | "nextPage": "下一页" 38 | } 39 | -------------------------------------------------------------------------------- /src/assets/mock-data/forget-pwd.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "邮件发送成功,请登录邮箱查看。" 3 | } -------------------------------------------------------------------------------- /src/assets/mock-data/menu.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "首页", 4 | "icon": "home", 5 | "link": "/home" 6 | }, 7 | { 8 | "name": "增改查删Demo", 9 | "icon": "star", 10 | "submenu": [ 11 | { 12 | "name": "人员管理", 13 | "icon": "person", 14 | "link": "/person-list" 15 | } 16 | ] 17 | }, 18 | { 19 | "name": "一些工具", 20 | "icon": "brightness_7", 21 | "submenu": [ 22 | { 23 | "name": "图表", 24 | "icon": "equalizer", 25 | "link": "/charts" 26 | }, 27 | { 28 | "name": "地图", 29 | "icon": "place", 30 | "link": "/amap" 31 | }, 32 | { 33 | "name": "日程安排", 34 | "icon": "date_range", 35 | "link": "/calendar" 36 | }, 37 | { 38 | "name": "弹出框", 39 | "icon": "sms", 40 | "link": "/alert" 41 | }, 42 | { 43 | "name": "树结构", 44 | "icon": "device_hub", 45 | "link": "/tree" 46 | }, 47 | { 48 | "name": "流程图", 49 | "icon": "widgets", 50 | "link": "/jsplumb" 51 | }, 52 | { 53 | "name": "文本编辑器", 54 | "icon": "mode_edit", 55 | "link": "/ckeditor" 56 | } 57 | ] 58 | } 59 | ] -------------------------------------------------------------------------------- /src/assets/mock-data/person.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "id": "1", "name": "叶修", "sex": "男", "team": "兴欣", "account": "君莫笑", "role": "散人", "position": "队长" }, 3 | { "id": "2", "name": "苏沐橙", "sex": "女", "team": "兴欣", "account": "风梳烟沐", "role": "枪炮师", "position": "队员" }, 4 | { "id": "3", "name": "方锐", "sex": "男", "team": "兴欣", "account": "海无量", "role": "气功师", "position": "队员" }, 5 | { "id": "4", "name": "叶修", "sex": "男", "team": "兴欣", "account": "君莫笑", "role": "散人", "position": "队长" }, 6 | { "id": "5", "name": "苏沐橙", "sex": "女", "team": "兴欣", "account": "风梳烟沐", "role": "枪炮师", "position": "队员" }, 7 | { "id": "6", "name": "方锐", "sex": "男", "team": "兴欣", "account": "海无量", "role": "气功师", "position": "队员" }, 8 | { "id": "7", "name": "叶修", "sex": "男", "team": "兴欣", "account": "君莫笑", "role": "散人", "position": "队长" }, 9 | { "id": "8", "name": "苏沐橙", "sex": "女", "team": "兴欣", "account": "风梳烟沐", "role": "枪炮师", "position": "队员" } 10 | ] -------------------------------------------------------------------------------- /src/assets/mock-data/user-login.json: -------------------------------------------------------------------------------- 1 | { 2 | "userId": "1", 3 | "userName": "Admin", 4 | "token": "fake-token" 5 | } -------------------------------------------------------------------------------- /src/assets/mock-data/user-register.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": 1, 3 | "username": "Admin", 4 | "email": "admin@gmail.com", 5 | "token": "fake-token" 6 | } -------------------------------------------------------------------------------- /src/document/0.1.0_alpha.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/document/0.1.0_alpha.gif -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false 8 | }; 9 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weihomechen/angular4-admin-front/39f53539df6fb18d3665ef634d9f7b7abfca5bcf/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Angular4Admin 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
      18 |
      19 |
      20 |
      21 |
      22 |
      23 |
      24 |
      25 |
      26 |
      27 |
      28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule); 12 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ 22 | // import 'core-js/es6/symbol'; 23 | // import 'core-js/es6/object'; 24 | // import 'core-js/es6/function'; 25 | // import 'core-js/es6/parse-int'; 26 | // import 'core-js/es6/parse-float'; 27 | // import 'core-js/es6/number'; 28 | // import 'core-js/es6/math'; 29 | // import 'core-js/es6/string'; 30 | // import 'core-js/es6/date'; 31 | // import 'core-js/es6/array'; 32 | // import 'core-js/es6/regexp'; 33 | // import 'core-js/es6/map'; 34 | // import 'core-js/es6/set'; 35 | 36 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 37 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 38 | 39 | /** IE10 and IE11 requires the following to support `@angular/animation`. */ 40 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 41 | 42 | 43 | /** Evergreen browsers require these. **/ 44 | import 'core-js/es6/reflect'; 45 | import 'core-js/es7/reflect'; 46 | 47 | 48 | /** ALL Firefox browsers require the following to support `@angular/animation`. **/ 49 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 50 | 51 | 52 | 53 | /*************************************************************************************************** 54 | * Zone JS is required by Angular itself. 55 | */ 56 | import 'zone.js/dist/zone'; // Included with Angular CLI. 57 | 58 | 59 | 60 | /*************************************************************************************************** 61 | * APPLICATION IMPORTS 62 | */ 63 | 64 | /** 65 | * Date, currency, decimal and percent pipes. 66 | * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 67 | */ 68 | // import 'intl'; // Run `npm install --save intl`. 69 | /** 70 | * Need to import at least one locale-data with intl. 71 | */ 72 | // import 'intl/locale-data/jsonp/en'; 73 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/long-stack-trace-zone'; 4 | import 'zone.js/dist/proxy.js'; 5 | import 'zone.js/dist/sync-test'; 6 | import 'zone.js/dist/jasmine-patch'; 7 | import 'zone.js/dist/async-test'; 8 | import 'zone.js/dist/fake-async-test'; 9 | import { getTestBed } from '@angular/core/testing'; 10 | import { 11 | BrowserDynamicTestingModule, 12 | platformBrowserDynamicTesting 13 | } from '@angular/platform-browser-dynamic/testing'; 14 | 15 | // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. 16 | declare var __karma__: any; 17 | declare var require: any; 18 | 19 | // Prevent Karma from running prematurely. 20 | __karma__.loaded = function () {}; 21 | 22 | // First, initialize the Angular testing environment. 23 | getTestBed().initTestEnvironment( 24 | BrowserDynamicTestingModule, 25 | platformBrowserDynamicTesting() 26 | ); 27 | // Then we find all the tests. 28 | const context = require.context('./', true, /\.spec\.ts$/); 29 | // And load the modules. 30 | context.keys().map(context); 31 | // Finally, start Karma to run the tests. 32 | __karma__.start(); 33 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "es2015", 6 | "baseUrl": "", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "baseUrl": "", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts" 15 | ], 16 | "include": [ 17 | "**/*.spec.ts", 18 | "**/*.d.ts" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "outDir": "./dist/out-tsc", 5 | "baseUrl": "src", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "target": "es5", 12 | "typeRoots": [ 13 | "node_modules/@types" 14 | ], 15 | "lib": [ 16 | "es2016", 17 | "dom" 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tsd.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "v4", 3 | "repo": "borisyankov/DefinitelyTyped", 4 | "ref": "master", 5 | "path": "typings", 6 | "bundle": "typings/tsd.d.ts", 7 | "installed": {} 8 | } 9 | --------------------------------------------------------------------------------