Browse Source

Initial commit

tags/v0.0.41
Kamil Biały 2 years ago
commit
83f8408bb8
56 changed files with 5027 additions and 0 deletions
  1. +19
    -0
      .gitignore
  2. +5
    -0
      .htaccess
  3. +269
    -0
      installer/languages/en/countries.ini
  4. +0
    -0
      installer/languages/en/languages.ini
  5. +176
    -0
      installer/languages/pl/countries.ini
  6. +5
    -0
      installer/languages/pl/languages.ini
  7. +219
    -0
      package-lock.json
  8. +24
    -0
      package.json
  9. +30
    -0
      prepare.js
  10. +9
    -0
      public/.htaccess
  11. +44
    -0
      public/index.php
  12. +822
    -0
      public/themes/pluto/css/admin.css
  13. +67
    -0
      public/themes/pluto/css/loading.css
  14. +208
    -0
      public/themes/pluto/css/login.css
  15. BIN
      public/themes/pluto/favicon.ico
  16. +8
    -0
      public/themes/pluto/html/index/index.html
  17. +72
    -0
      public/themes/pluto/html/menu/index.html
  18. +82
    -0
      public/themes/pluto/js/controls.js
  19. +89
    -0
      public/themes/pluto/js/main.js
  20. +49
    -0
      public/themes/pluto/js/src/bootstrap.ts
  21. +42
    -0
      public/themes/pluto/js/src/view/MainView.ts
  22. +15
    -0
      public/themes/pluto/js/tsconfig.json
  23. +9
    -0
      public/themes/pluto/js/typings.json
  24. +81
    -0
      pulsar/admin/Module.php
  25. +40
    -0
      pulsar/admin/controllers/IndexController.php
  26. +233
    -0
      pulsar/admin/controllers/MenuController.php
  27. +93
    -0
      pulsar/admin/controllers/SessionController.php
  28. +269
    -0
      pulsar/admin/languages/en/countries.ini
  29. +0
    -0
      pulsar/admin/languages/en/languages.ini
  30. +176
    -0
      pulsar/admin/languages/pl/countries.ini
  31. +5
    -0
      pulsar/admin/languages/pl/languages.ini
  32. +163
    -0
      pulsar/admin/views/pluto/dynamic.volt
  33. +2
    -0
      pulsar/admin/views/pluto/index/index.volt
  34. +31
    -0
      pulsar/admin/views/pluto/index/login.volt
  35. +15
    -0
      pulsar/admin/views/pluto/login.volt
  36. +95
    -0
      pulsar/admin/views/pluto/main.volt
  37. +23
    -0
      pulsar/admin/views/pluto/menu/edit.volt
  38. +42
    -0
      pulsar/admin/views/pluto/menu/index.volt
  39. +48
    -0
      pulsar/admin/views/pluto/menu/new.volt
  40. +108
    -0
      pulsar/admin/views/pluto/partial/menu.volt
  41. +0
    -0
      pulsar/admin/views/pluto/partial/pages.volt
  42. +42
    -0
      pulsar/admin/views/pluto/partial/settings.volt
  43. +44
    -0
      pulsar/config/config.php
  44. +46
    -0
      pulsar/config/loader.php
  45. +104
    -0
      pulsar/config/router.php
  46. +185
    -0
      pulsar/config/services.php
  47. +303
    -0
      pulsar/helpers/Tags.php
  48. +77
    -0
      pulsar/helpers/Utils.php
  49. +25
    -0
      pulsar/libraries/AccessControl.php
  50. +75
    -0
      pulsar/libraries/Authorization.php
  51. +123
    -0
      pulsar/models/Language.php
  52. +117
    -0
      pulsar/models/Menu.php
  53. +134
    -0
      pulsar/schema/schema.sql
  54. +11
    -0
      pulsar/themes/pluto.ini
  55. +27
    -0
      pulsar/website/controllers/AuthController.php
  56. +27
    -0
      pulsar/website/controllers/IndexController.php

+ 19
- 0
.gitignore View File

@@ -0,0 +1,19 @@
.sublime/*
.phalcon/*
.vs/*
public/themes/pluto/vendors/js/*
public/themes/pluto/vendors/css/*
public/themes/pluto/vendors/fonts/*
node_modules/*
pulsar/cache/*

public/themes/pluto/js/view/*
public/themes/pluto/js/typings/*
public/themes/pluto/fonts/*.*
.eslintrc.json
tslint.json
public/themes/pluto/css/font-awesome.css
cache/*
public/themes/pluto/js/bootstrap.js
app/installer/languages/*
app/admin/languages/*

+ 5
- 0
.htaccess View File

@@ -0,0 +1,5 @@
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>

+ 269
- 0
installer/languages/en/countries.ini View File

@@ -0,0 +1,269 @@
AC = Ascension Island
AD = Andorra
AE = United Arab Emirates
AF = Afghanistan
AG = Antigua and Barbuda
AI = Anguilla
AL = Albania
AM = Armenia
AN = Netherlands Antilles
AO = Angola
AQ = Antarctica
AR = Argentina
AS = American Samoa
AT = Austria
AU = Australia
AW = Aruba
AX = Åland Islands
AZ = Azerbaijan
BA = Bosnia and Herzegovina
BB = Barbados
BD = Bangladesh
BE = Belgium
BF = Burkina Faso
BG = Bulgaria
BH = Bahrain
BI = Burundi
BJ = Benin
BL = Saint Barthélemy
BM = Bermuda
BN = Brunei Darussalam
BO = Bolivia
BQ = Bonaire, Sint Eustatius and Saba
BR = Brazil
BS = Bahamas
BT = Bhutan
BU = Burma
BV = Bouvet Island
BW = Botswana
BY = Belarus
BZ = Belize
CA = Canada
CC = Cocos (Keeling) Islands
CD = The Democratic Republic of the Congo
CF = Central African Republic
CG = Congo
CH = Switzerland
CI = Côte d'Ivoire
CK = Cook Islands
CL = Chile
CM = Cameroon
CN = China
CO = Colombia
CP = Clipperton Island
CR = Costa Rica
CS = Serbia and Montenegro
CU = Cuba
CV = Cabo Verde
CW = Curaçao
CX = Christmas Island
CY = Cyprus
CZ = Czech Republic
DD = German Democratic Republic
DE = Germany
DG = Diego Garcia
DJ = Djibouti
DK = Denmark
DM = Dominica
DO = Dominican Republic
DZ = Algeria
EA = Ceuta, Melilla
EC = Ecuador
EE = Estonia
EG = Egypt
EH = Western Sahara
ER = Eritrea
ES = Spain
ET = Ethiopia
EU = European Union
EZ = Eurozone
FI = Finland
FJ = Fiji
FK = Falkland Islands (Malvinas)
FM = Federated States of Micronesia
FO = Faroe Islands
FR = France
FX = Metropolitan France
GA = Gabon
GB = United Kingdom
GD = Grenada
GE = Georgia
GF = French Guiana
GG = Guernsey
GH = Ghana
GI = Gibraltar
GL = Greenland
GM = Gambia
GN = Guinea
GP = Guadeloupe
GQ = Equatorial Guinea
GR = Greece
GS = South Georgia and the South Sandwich Islands
GT = Guatemala
GU = Guam
GW = Guinea-Bissau
GY = Guyana
HK = Hong Kong
HM = Heard Island and McDonald Islands
HN = Honduras
HR = Croatia
HT = Haiti
HU = Hungary
IC = Canary Islands
ID = Indonesia
IE = Ireland
IL = Israel
IM = Isle of Man
IN = India
IO = British Indian Ocean Territory
IQ = Iraq
IR = Islamic Republic of Iran
IS = Iceland
IT = Italy
JE = Jersey
JM = Jamaica
JO = Jordan
JP = Japan
KE = Kenya
KG = Kyrgyzstan
KH = Cambodia
KI = Kiribati
KM = Comoros
KN = Saint Kitts and Nevis
KP = Democratic People's Republic of Korea
KR = Republic of Korea
KW = Kuwait
KY = Cayman Islands
KZ = Kazakhstan
LA = Lao People's Democratic Republic
LB = Lebanon
LC = Saint Lucia
LI = Liechtenstein
LK = Sri Lanka
LR = Liberia
LS = Lesotho
LT = Lithuania
LU = Luxembourg
LV = Latvia
LY = Libya
MA = Morocco
MC = Monaco
MD = Moldova
ME = Montenegro
MF = Saint Martin (French part)
MG = Madagascar
MH = Marshall Islands
MK = The Former Yugoslav Republic of Macedonia
ML = Mali
MM = Myanmar
MN = Mongolia
MO = Macao
MP = Northern Mariana Islands
MQ = Martinique
MR = Mauritania
MS = Montserrat
MT = Malta
MU = Mauritius
MV = Maldives
MW = Malawi
MX = Mexico
MY = Malaysia
MZ = Mozambique
NA = Namibia
NC = New Caledonia
NE = Niger
NF = Norfolk Island
NG = Nigeria
NI = Nicaragua
NL = Netherlands
NO = Norway
NP = Nepal
NR = Nauru
NT = Neutral Zone
NU = Niue
NZ = New Zealand
OM = Oman
PA = Panama
PE = Peru
PF = French Polynesia
PG = Papua New Guinea
PH = Philippines
PK = Pakistan
PL = Poland
PM = Saint Pierre and Miquelon
PN = Pitcairn
PR = Puerto Rico
PS = State of Palestine
PT = Portugal
PW = Palau
PY = Paraguay
QA = Qatar
RE = Réunion
RO = Romania
RS = Serbia
RU = Russian Federation
RW = Rwanda
SA = Saudi Arabia
SB = Solomon Islands
SC = Seychelles
SD = Sudan
SE = Sweden
SG = Singapore
SH = Saint Helena, Ascension and Tristan da Cunha
SI = Slovenia
SJ = Svalbard and Jan Mayen
SK = Slovakia
SL = Sierra Leone
SM = San Marino
SN = Senegal
SO = Somalia
SR = Suriname
SS = South Sudan
ST = Sao Tome and Principe
SU = Union of Soviet Socialist Republics
SV = El Salvador
SX = Sint Maarten (Dutch part)
SY = Syrian Arab Republic
SZ = Swaziland
TA = Tristan da Cunha
TC = Turks and Caicos Islands
TD = Chad
TF = French Southern Territories
TG = Togo
TH = Thailand
TJ = Tajikistan
TK = Tokelau
TL = Timor-Leste
TM = Turkmenistan
TN = Tunisia
TO = Tonga
TP = East Timor
TR = Turkey
TT = Trinidad and Tobago
TV = Tuvalu
TW = Taiwan, Province of China
TZ = United Republic of Tanzania
UA = Ukraine
UG = Uganda
UM = United States Minor Outlying Islands
UN = United Nations
US = United States
UY = Uruguay
UZ = Uzbekistan
VA = Holy See (Vatican City State)
VC = Saint Vincent and the Grenadines
VE = Venezuela
VG = British Virgin Islands
VI = U.S. Virgin Islands
VN = Viet Nam
VU = Vanuatu
WF = Wallis and Futuna
WS = Samoa
YD = Democratic Yemen
YE = Yemen
YT = Mayotte
YU = Yugoslavia
ZA = South Africa
ZM = Zambia
ZR = Zaire
ZW = Zimbabwe

+ 0
- 0
installer/languages/en/languages.ini View File


+ 176
- 0
installer/languages/pl/countries.ini View File

@@ -0,0 +1,176 @@
AF = Afganistan
AL = Albania
DZ = Algieria
AD = Andora
AO = Angola
SA = Arabia Saudyjska
AR = Argentyna
AM = Armenia
AW = Aruba
AU = Australia
AT = Austria
AZ = Azerbejdżan
BS = Bahamy
BH = Bahrajn
BD = Bangladesz
BB = Barbados
BE = Belgia
BZ = Belize
BJ = Benin
BM = Bermudy
BT = Bhutan
BY = Białoruś
BO = Boliwia
BA = Bośnia i Hercegowina
BW = Botswana
BR = Brazylia
BN = Brunei
BG = Bułgaria
BF = Burkina Faso
BI = Burundi
CL = Chile
CN = Chiny
HR = Chorwacja
CY = Cypr
TD = Czad
ME = Czarnogóra
CZ = Czechy
DK = Dania
DM = Dominika
DO = Dominikana
DJ = Dżibuti
EG = Egipt
EC = Ekwador
ER = Erytera
EE = Estonia
ET = Etiopia
FJ = Fidżi
PH = Filipiny
FI = Finlandia
FR = Francja
GH = Ghana
GR = Grecja
GD = Grenada
GL = Grenlandia
GE = Gruzja
GU = Guam
GY = Gujana
GT = Gwatemala
GN = Gwinea
HT = Haiti
ES = Hiszpania
NL = Holandia
HN = Honduras
HK = Hongkong
IN = Indie
ID = Indonezja
IQ = Irak
IR = Iran
IE = Irlandia
IS = Islandia
IL = Izrael
JM = Jamajka
JP = Japonia
YE = Jemen
JO = Jordania
KH = Kambodża
CM = Kamerun
CA = Kanada
QA = Katar
KZ = Kazachstan
KG = Kirgistan
KI = Kiribati
CO = Kolumbia
CG = Kongo
KR = Korea Południowa
KP = Korea Północna
CR = Kostaryka
CU = Kuba
KW = Kuwejt
LA = Laos
LS = Lesotho
LB = Liban
LY = Libia
LI = Lichtensten
LT = Litwa
LU = Luksemburg
LV = Łotwa
MK = Macedonia
MG = Madagaskar
MO = Makau
MV = Malediwy
MY = Malezja
MT = Malta
MP = Mariany Północne
MA = Maroko
MX = Meksyk
FM = Mikronezja
MD = Mołdawia
MC = Monako
MN = Mongolia
MZ = Mozambik
NA = Nambia
NR = Nauru
NP = Nepal
DE = Niemcy
NG = Nigeria
NF = Norfolk
NO = Norwegia
NC = Nowa Kaledonia
NZ = Nowa Zelandia
OM = Oman
PK = Pakistan
PS = Palestyna
PA = Panama
PY = Paragwaj
PE = Peru
PL = Polska
PR = Portoryko
PT = Portugalia
RU = Rosja
RO = Rumunia
RW = Rwanda
LC = Saint Lucia
MF = Saint Martin
SV = Salwador
WS = Samoa
SM = San Marino
RS = Serbia
SL = Sierra Leone
SG = Singapur
SK = Słowacja
SI = Słowenia
SO = Somalia
LK = Sri Lanka
US = Stany Zjednoczone
SD = Sudan
SY = Syria
CH = Szwajcaria
SE = Szwecja
TH = Tajlandia
TW = Tajwan
TZ = Tanzania
TO = Tonga
TN = Tunezja
TR = Turcja
UG = Uganda
UA = Ukraina
UY = Urugwaj
UZ = Uzbekistan
VA = Watykan
VE = Wenezuela
HU = Węgry
GB = Wielka Brytania
VN = Wietnam
IT = Włochy
CI = Wybrzeże Kości Słoniowej
IM = Wyspa Man
AX = Wyspy Alandzkie
CK = Wyspy Cooka
VI = Wyspy Dziewicze
CC = Wyspy Kokosowe
MH = Wyspy Marshalla
FO = Wyspy Owcze
SB = Wyspy Salomona
ZW = Zimbabwe
AE = Zjednoczone Emiraty Arabskie

+ 5
- 0
installer/languages/pl/languages.ini View File

@@ -0,0 +1,5 @@
pl = Polski
en = Angielski
ru = Rosyjski
de = Niemiecki
fr = Francuski

+ 219
- 0
package-lock.json View File

@@ -0,0 +1,219 @@
{
"name": "pulsar.cms",
"version": "0.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"copyfiles": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-1.2.0.tgz",
"integrity": "sha1-qNo6xBqiIgrim9PFi2mEKU8sWTw=",
"requires": {
"glob": "7.1.2",
"ltcdr": "2.2.1",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"noms": "0.0.0",
"through2": "2.0.3"
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"font-awesome": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
"integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"jquery": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz",
"integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c="
},
"ltcdr": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ltcdr/-/ltcdr-2.2.1.tgz",
"integrity": "sha1-Wrh60dTB2rjowIu/A37gwZAih88="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "1.1.8"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
"minimist": "0.0.8"
}
},
"noms": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz",
"integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=",
"requires": {
"inherits": "2.0.3",
"readable-stream": "1.0.34"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
},
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
"through2": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"requires": {
"readable-stream": "2.3.3",
"xtend": "4.0.1"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
}
}
}

+ 24
- 0
package.json View File

@@ -0,0 +1,24 @@
{
"name": "pulsar.cms",
"version": "0.0.1",
"codename": "genesis",
"description": "Content Management System based on Phalcon",
"scripts": {
"postinstall": "node prepare.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/sobiemir/pulsar.git"
},
"author": "sobiemir",
"license": "GPL-3.0",
"bugs": {
"url": "https://pm.aculo.pl/projects/pulsar"
},
"homepage": "https://pulsar.aculo.pl",
"dependencies": {
"copyfiles": "^1.2.0",
"font-awesome": "^4.7.0",
"jquery": "^3.2.1"
}
}

+ 30
- 0
prepare.js View File

@@ -0,0 +1,30 @@
let copyfiles = require("copyfiles");

copyfiles([
"node_modules/font-awesome/css/font-awesome.css",
"node_modules/font-awesome/css/font-awesome.css.map",
"node_modules/font-awesome/css/font-awesome.min.css",
"public/themes/pluto/vendors/css"
], true, () => {
console.log("Skopiowano arkusze stylów.");
});

copyfiles([
"node_modules/font-awesome/fonts/FontAwesome.otf",
"node_modules/font-awesome/fonts/fontawesome-webfont.eot",
"node_modules/font-awesome/fonts/fontawesome-webfont.svg",
"node_modules/font-awesome/fonts/fontawesome-webfont.ttf",
"node_modules/font-awesome/fonts/fontawesome-webfont.woff",
"node_modules/font-awesome/fonts/fontawesome-webfont.woff2",
"public/themes/pluto/vendors/fonts"
], true, () => {
console.log("Skopiowano czcionki.");
});

copyfiles([
"node_modules/jquery/dist/jquery.js",
"node_modules/jquery/dist/jquery.min.js",
"public/themes/pluto/vendors/js"
], true, () => {
console.log("Skopiowano skrytpy.");
});

+ 9
- 0
public/.htaccess View File

@@ -0,0 +1,9 @@
SetEnv APPLICATION_ENV "development"

AddDefaultCharset UTF-8

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]

+ 44
- 0
public/index.php View File

@@ -0,0 +1,44 @@
<?php
/*
* This file is part of Pulsar CMS
* Copyright (c) by sobiemir <sobiemir@aculo.pl>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

use Phalcon\Loader;
use Phalcon\Mvc\Application;

// raportowanie błędów
ini_set( 'display_errors', true );
error_reporting( E_ALL );

define( 'BASE_PATH', dirname(__DIR__) . '/' );
define( 'APP_PATH', BASE_PATH . 'pulsar/' );

try
{
$di = require_once APP_PATH . 'config/services.php';
$application = new Application($di);

require_once APP_PATH . 'config/loader.php';
$response = $application->handle();
$response->send();
}
catch( Exception $ex )
{
echo '<h1>Pulsar</h1>';
echo $ex->getMessage() . '<br>';
echo nl2br(htmlentities($ex->getTraceAsString()));
}

+ 822
- 0
public/themes/pluto/css/admin.css View File

@@ -0,0 +1,822 @@
/*
* This file is part of Pulsar CMS
* Copyright (c) by sobiemir <sobiemir@aculo.pl>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

html {
height: 100%;
width: 100%;
font-size: 10px;
font-family: DejaVu Sans;
}
body {
height: 100%;
width: 100%;
background: #e8e8e8;
}
*,
input {
margin: 0;
padding: 0;
border: 0;
background: transparent;
color: #111;
font-size: 1.1rem;
line-height: 1.8rem;
box-sizing: border-box;
}
a {
cursor: pointer;
text-decoration: none;
color: #127899;
}
h1 {
font-size: 2.6rem;
padding-bottom: 2.0rem;
}
h2 {
font-size: 2.2rem;
padding-bottom: 1.6rem;
}
h3 {
font-size: 1.8rem;
padding-bottom: 1.2rem;
}
h4 {
font-size: 1.6rem;
padding-bottom: 1rem;
}
h5 {
font-size: 1.4rem;
padding-bottom: 0.8rem;
}
h6 {
font-size: 1.2rem;
padding-bottom: 0.6rem;
}
ul li {
margin-left: 2rem;
}
label {
user-select: none;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
STANDARDOWA TABELA
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

table {
column-gap: 0;
border-spacing: 0;
border-spacing: 0;
}

table tr th {
text-align: left;
padding: 0.3rem 0.6rem;
border-bottom: 0.1rem #ccc solid;
color: #127899;
font-size: 1rem;
text-transform: uppercase;
}
table tr td {
border-bottom: 0.1rem #ccc solid;
padding: 0.3rem 0.6rem;
cursor: default;
}
table.form tr td {
border-color: #ddd;
padding: 0.8rem;
}
table tr:last-child td {
border-bottom: 0;
}
table.zebra tr:nth-child(even) td {
background: #f4f4f4;
}
table.zebra tr:hover td {
background: #e0ecf1;
}
table tr th.identity {
width: 4rem;
}
table tr td .fa {
font-size: 1.4rem;
}
table tr td .fa {
padding-left: 0.3rem;
padding-right: 0.3rem;
}
table tr.noborder td {
border-bottom: 0 !important;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
POLA TEKSTOWE
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

input[type=text], input[type=password], .textbox {
padding: 0.3rem 0.6rem;
min-width: 10rem;
background: transparent;
border: 0.1rem #999 solid;
background: #fff;
}
input[type=text]:focus, input[type=password]:focus, .textbox:focus {
border-color: #127899;
outline: 0;
}
input[type=text].fa-icon, input[type=password].fa-icon, .textbox.fa-icon {
padding-left: 2.6rem;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
PRZYCISKI WYBORU
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

.checkbox input[type=checkbox] {
z-index: -1;
opacity: 0;
position: absolute;
visibility: none;
margin-top: 0.2rem;
}
.checkbox span {
width: 1.4rem;
height: 1.4rem;
margin-top: 0.2rem;
margin-right: 0.8rem;
border: 0.1rem #999 solid;
background: #fff;
font: normal normal normal 1.1rem FontAwesome;
text-rendering: auto;
color: #333;
line-height: 1.2rem !important;
text-align: center;
vertical-align: middle;
}
.checkbox.focused span {
border-color: #127899;
}
.checkbox.checked span:before {
content: "\f00c";
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
PRZYCISKI W KOLUMNIE
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

.tab-control {
list-style: none;
}

.tab-control li {
padding: 0 0.8rem;
margin-left: 0;
cursor: pointer;
line-height: 2rem;
user-select: none;
}

.tab-control li:hover {
background: #ccc;
}

.tab-control li.selected {
background: #222;
color: #fff;
cursor: default;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
PRZYCISKI
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

input[type=button], input[type=submit], input[type=reset], .button, button {
padding: 0.3rem 1.4rem;
background: #127899;
border: 0.1rem #127899 solid;
color: #fff;
cursor: pointer;
font-size: 1rem;
text-transform: uppercase;
}
.button .fa, button .fa {
font-size: 1.4rem;
color: inherit;
margin-right: 0.8rem;
border-right: 0.1rem #fff solid;
border-color: inherit;
padding-right: 0.8rem;
vertical-align: middle;
}
input[type=button]:focus, input[type=submit]:focus, input[type=reset]:focus, .button:focus, button:focus,
input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover, .button:hover, button:hover {
background: #1A8BB2;
outline: 0;
}
.button.red, button.red {
background: #c83737;
border-color: #982020;
}
.button.red:hover, button.red:hover,
.button.red:focus, button.red:focus {
background: #dc4343;
border-color: #a92929;
}
.button.green, button.green {
background: #3e8c26;
border-color: #2c6819;
}
.button.green:hover, button.green:hover,
.button.green:focus, button.green:focus {
background: #51a038;
border-color: #387925;
}
.button.simple, button.simple {
background-color: transparent;
border: none;
padding: 0 1rem;
text-transform: none;
font-size: 1.1rem;
}
.button.simple:hover, button.simple:hover
.button.simple:focus, button.simple:focus {
background: #ddd;
}
.button-container .button .fa, button .fa {
border-right: 0;
padding: 0 0.5rem 0 0;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
PANEL LOGOWANIA
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

#login-logo {
margin-top: 1.6rem;
}
#login-panel {
background: #fff;
padding: 1.6rem;
margin-top: 1.6rem;
border: 1px #a4a4a4 solid;
}
#login-panel .message {
margin-bottom: 0.7rem;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
NAGŁÓWEK
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

#header {
background: #222;
font-size: 0;
line-height: 0;
position: relative;
}
#header svg {
margin: 0.8rem;
}
#header h1 {
font-size: 2.4rem;
line-height: 2.8rem;
color: #eaeaea;
padding-bottom: 0;
font-weight: bold;
}
#header h2 {
font-size: 1rem;
line-height: 1rem;
color: #eaeaea;
font-weight: normal;
font-style: italic;
padding-bottom: 0;
}
#version-info {
font-size: 1rem;
margin-bottom: 1.2em;
margin-left: 0.8em;
color: #777;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
MENU
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

#navigation {
margin-left: 3rem;
}
#navigation aside {
position: absolute;
top: 0.5rem;
right: 0.5rem;
}
#navigation aside p, #navigation aside a {
color: #fff;
padding: 0.2rem 0.8rem;
font-size: 1.2rem;
line-height: 2.4rem;
}
#navigation aside p {
padding-right: 2.4rem;
}
#navigation aside p * {
color: #cacaca;
}
#navigation aside a:hover {
color: #fff;
background: #444;
}
#navigation aside a.fa {
font-size: 1.4rem;
}
#navigation nav * {
font-size: 1rem;
line-height: 2.4rem;
text-transform: uppercase;
}
#navigation nav {
font-size: 0;
line-height: 0;
}
#navigation nav .menu-position {
color: #fff;
padding: 0.2rem 0.8rem;
display: inline-block;
position: relative;
cursor: pointer;
}
#navigation nav .menu-position:hover {
background: #444;
color: #fff;
}
#navigation nav .menu-position .submenu {
display: none;
position: absolute;
top: 2.8rem;
left: 0;
background: #fff;
list-style: none;
border: 1px #1a1a1a solid;
margin-left: -1px;
min-width: 18rem;
padding: 0;
}
#navigation nav .menu-position:hover .submenu {
display: block;
padding: 1px;
}
#navigation nav .menu-position .submenu li {
margin: 0;
position: relative;
background: inherit;
}
#navigation nav .menu-position .submenu li .menu-icon {
background: #eaeaea;
height: 2.4rem;
font-size: 1.2rem;
border-right: 1px #aaa solid;
width: 2.4rem;
text-align: center;
vertical-align: middle;
color: #111;
}
#navigation nav .menu-position .submenu .separator .menu-icon {
height: 1px;
display: block;
position: absolute;
background: #eaeaea;
}
#navigation nav .menu-position .submenu .separator .menu-caption {
background: #bbb;
display: block;
height: 1px;
}
#navigation nav .menu-position .submenu li .menu-caption {
padding: 0 1.0rem;
display: inline-block;
color: #111;
}
#navigation nav .menu-position .submenu li:hover {
background: #e4e4e4;
color: #000;
}
#navigation nav .menu-position .submenu li:not(.separator):hover .menu-icon {
font-style: normal;
background: #ccc;
color: #000;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
PANEL BOCZNY
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

.menu-slider {
width: 0.8rem;
font-size: 1.4rem;
text-align: center;
border-left: 1px #bbb solid;
border-right: 1px #bbb solid;
background: #dadada;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
NAWIGACJA OKRUSZKOWA
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

.breadcrumb * {
color: #333;
}
.breadcrumb {
border-bottom: 1px #bbb solid;
background: #eee;
padding: 0 0 0 1.2rem;
font-size: 0;
line-height: 0;
cursor: default;
}
.breadcrumb.bottom {
border-top: 1px #b4b4b4 solid;
border-bottom: 0;
}
.breadcrumb p,
.breadcrumb i,
.breadcrumb a {
line-height: 3rem;
}
.breadcrumb .fa:hover {
background: #d4d4d4;
}
.breadcrumb .fa {
font-size: 1.4rem;
line-height: 3rem;
padding: 0 1.0rem;
margin: 0;
cursor: pointer;
}
.breadcrumb p.title {
font-weight: bold !important;
}
.breadcrumb.bottom .flag-switcher {
padding: 0 1rem;
}
.breadcrumb p.title a:hover {
color: #127899;
}
.breadcrumb p.title .raquo:last-child {
display: none;
}

/*
======================================================================================================================
------------------------------------------------------------------------------------------------------------------
??????
------------------------------------------------------------------------------------------------------------------
======================================================================================================================
*/

.form-row {
margin-bottom: 1rem;
border-bottom: 1px #cacaca solid;
padding-bottom: 1rem;
}
.form-row .description {
margin-top: 0.3rem;
}


.container {
padding: 1rem;
overflow: auto;
}
.hasoptions {
padding-right: 1rem;
}
#optionsbar header h5 {
border-bottom: 1px #cacaca solid;
font-weight: bold;
font-size: 1.2rem;
margin-bottom: 0.8rem;
padding-bottom: 0.4rem;
cursor: default;
}
#optionsbar section {
margin-bottom: 0.8rem;
}
#optionsbar header h5, #optionsbar header h5 i {
color: #127899;
}
#optionsbar h6 {
padding: 0.4rem;
padding-left: 0;
margin-bottom: 0;
margin-top: 0;
}

/*
===========================================================================================================
SZEROKOŚCI / MARGINESY / WCIĘCIA
===========================================================================================================
*/

.inline-block {
display: inline-block;
}
.mt1 {
margin-top: 0.1rem !important;
}
.mt2 {
margin-top: 0.2rem !important;
}
.mt3 {
margin-top: 0.3rem !important;
}
.mt5 {
margin-top: 0.5rem !important;
}
.mr02 {
margin-right: 0.2rem !important;
}
.mr05 {
margin-right: 0.5rem !important;
}
.mb5 {
margin-bottom: 0.5rem !important;
}
.mb7 {
margin-bottom: 0.7rem !important;
}
.mb10 {
margin-bottom: 1rem !important;
}
.mb12 {
margin-bottom: 1.2rem !important;
}
.h100p {
height: 100% !important;
}
.w100p {
width: 100% !important;
}
.w1p {
width: 1% !important;
white-space: nowrap;
}
.w10p {
width: 10% !important;
}
.w20p {
width: 20% !important;
}
.w30p {
width: 30% !important;
}
.w40p {
width: 40% !important;
}
.w50p {
width: 50% !important;
}
.w60p {
width: 60% !important;
}
.w70p {
width: 70% !important;
}
.cursor-pointer {
cursor: pointer !important;
}
.cursor-default {
cursor: default !important;
}
.font-normal {
font-size: 1rem;
}
.no-padding {
padding: 0 !important;
}
.no-margin {
margin: 0 !important;
}
.hidden {
display: none !important;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.fill-free {
flex: 1;
}
.box-center {
width: 100%;
display: flex;
justify-content: center;
align-content: center;
align-items: center;
}
.items-vertical {
display: flex;
flex-direction: column;
}
.items-horizontal {
display: flex;
flex-direction: row;
}
.items-vertical-reverse {
display: flex;
flex-direction: column-reverse;
}
.items-horizontal-reverse {
display: flex;
flex-direction: row-reverse;
}
.items-center {
justify-content: center;
}
.items-bottom {
justify-content: flex-end;
}
.items-top {
justify-content: flex-start;
}
.input-row {
position: relative;
}
.fa.inside-input {
position: absolute;
top: 0.4rem;
left: 0.8rem;
cursor: text;
font-size: 1.2rem;
line-height: 1.8rem;
border: 1px transparent solid;
color: #6a6a6a;
}
.message.warning,
.message.error {
background: #f4e59f;
border: 1px #c6b35b solid;
padding: 0.4rem 0.8rem;
color: #877314;
}
.message.error {
background: #f4cecb;
border-color: #c65454;
color: #932c2c;
}
.button-box {
margin-bottom: 1rem;
}
.button-box .button {
margin-right: 1rem;
}
.button-box .items-bottom .button {
margin-left: 1rem;
margin-right: 0.1rem;
}

.delete, .edit, .clone {
cursor: pointer;
}
span.delete:hover {
color: #c83737;
}
span.edit:hover {
color: #127899;
}
span.clone:hover {
color: #7e1c71;
}

.white-back {
background: #fff;
}

.lightgrey-back {
background: #f4f4f4;
}

.red {
color: #c83737;
}
.green {
color: #51a038;
}
.blue {
color: #127899;
}
.purple {
color: #a03394;
}
.dark {
color: #2c343b;
}
.grey {
color: #666;
}
.bold {
font-weight: bold;
}
.uppercase {
text-transform: uppercase;
}

.f0 {
font-size: 0;
line-height: 0;
}
.fright {
float: right;
}
.f14 {
font-size: 1.4rem !important;
}
.pointer {
cursor: pointer;
}
.hover-purple:hover {
color: #a03394;
}
.hover-red:hover {
color: #c83737;
}

.head-bar {
background: #f4f4f4;
border-bottom: 1px #ccc solid;
padding: 1rem 1.6rem;
margin-bottom: 0.6rem;
}

.head-bar.simple {
border-bottom: 0;
}

.head-bar h2 {
font-weight: bold;
padding: 0.2rem 0;
}

.description {
font-size: 1rem;
font-style: italic;
color: #666;
}

+ 67
- 0
public/themes/pluto/css/loading.css View File

@@ -0,0 +1,67 @@
/*
* This file is part of Pulsar CMS
* Copyright (c) by sobiemir <sobiemir@aculo.pl>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

html {
height: 100%;
width: 100%;
font-size: 10px;
overflow: hidden;
}
body {
min-height: 100%;
width: 100%;
overflow: hidden;
}

* {
padding: 0;
margin: 0;
font-size: 1.2rem;
line-height: 1.8rem;
box-sizing: border-box;
}

#loading-screen {
position: absolute;
z-index: 9999;
background: #eaeaea;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-content: center;
align-items: center;
}
#qp-p {
font-size: 1.6rem;
padding: 10px !important;
color: #333;
}
#qp-b {
width: 90%;
max-width: 600px;
border: 1px #fafafa solid;
outline: 1px #a4a4a4 solid;
margin-bottom: 5%;
}
#qp-i {
height: 1.2rem;
width: 0;
background: #555;
}

+ 208
- 0
public/themes/pluto/css/login.css View File

@@ -0,0 +1,208 @@
/*
* This file is part of Pulsar CMS
* Copyright (c) by sobiemir <sobiemir@aculo.pl>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

/*
===========================================================================================================
Główne elementy strony
===========================================================================================================
*/

html {
height: 100%;
width: 100%;
font-size: 10px;
font-family: DejaVu Sans;
}
body {
height: 100%;
width: 100%;
background: #eaeaea;
}
*,
input {
margin: 0;
padding: 0;
border: 0;
background: transparent;
color: #3a3a3a;
font-size: 1.2rem;
line-height: 1.8rem;
box-sizing: border-box;
}
label {
user-select: none;
}

/*
===========================================================================================================
Kontrolki formularzy
===========================================================================================================
*/

input[type=text], input[type=password], .textbox {
padding: 0.4rem 0.8rem;
min-width: 22rem;
background: #f4f4f4;
border: 1px #a4a4a4 solid;
}
input[type=text]:focus, input[type=password]:focus, .textbox:focus {
border-color: #13647F;
outline: 0;
}
input[type=text].fa-icon, input[type=password].fa-icon, .textbox.fa-icon {
padding-left: 2.8rem;
}
input[type=button], input[type=submit], input[type=reset], .button, button {
padding: 0.4rem 0.8rem;
background: #127899;
border: 1px #0E5066 solid;
color: #fafafa;
cursor: pointer;
font-size: 1rem;
text-transform: uppercase;
}
input[type=button]:focus, input[type=submit]:focus, input[type=reset]:focus, .button:focus, button:focus,
input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover, .button:hover, button:hover {
background: #1A8BB2;
border-color: #13647F;
outline: 0;
}
.fa.inside-input {
position: absolute;
top: 0.4rem;
left: 0.9rem;
cursor: text;
font-size: 1.2rem;
line-height: 1.8rem;
border: 1px transparent solid;
color: #6a6a6a;
}

/*
===========================================================================================================
Panel logowania
===========================================================================================================
*/

#login-logo {
margin-top: 1.6rem;
}
#login-panel {
background: #fafafa;
padding: 1.6rem;
margin-top: 1.6rem;
border: 1px #a4a4a4 solid;
}
#login-panel .message {
margin-bottom: 0.7rem;
}

/*
===========================================================================================================
Marginesy i długości
===========================================================================================================
*/

.mb7 {
margin-bottom: 0.7rem !important;
}
.h100p {
height: 100% !important;
}
.w100p {
width: 100% !important;
}

/*
===========================================================================================================
Układ
===========================================================================================================
*/

.box-center {
width: 100%;
display: flex;
justify-content: center;
align-content: center;
align-items: center;
}
.items-vertical {
display: flex;
flex-direction: column;
}
.items-horizontal {
display: flex;
flex-direction: row;
}
.items-center {
justify-content: center;
}
.items-bottom {
justify-content: flex-end;
}
.items-top {
justify-content: flex-start;
}
.input-row {
position: relative;
}

/*
===========================================================================================================
Wiadomości
===========================================================================================================
*/

.message.warning,
.message.error {
background: #f4e59f;
border: 1px #c6b35b solid;
padding: 0.4rem 0.8rem;
color: #877314;
}
.message.error {
background: #f4cecb;
border-color: #c65454;
color: #932c2c;
}

/*
===========================================================================================================
Font Awesome
===========================================================================================================
*/

@font-face {
font-family: 'FontAwesome';
src: url('../fonts/fontawesome-webfont.eot?v=4.6.3');
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
.fa {
display: inline-block;
font: normal normal normal 1rem FontAwesome;
font-size: inherit;
text-rendering: auto;
}
.fa-user:before {
content: "\f007";
}
.fa-key:before {
content: "\f084";
}

BIN
public/themes/pluto/favicon.ico View File

Before After

+ 8
- 0
public/themes/pluto/html/index/index.html View File

@@ -0,0 +1,8 @@
<div class="breadcrumb items-horizontal">
<p class="title">&raquo; Kokpit</p>
<p class="description">Konfigurowalny panel z szybkim dostępem do wybranych zasobów z możliwością prezentacji</p>
</div>

<div id="content" class="fill-free items-horizontal">

</div>

+ 72
- 0
public/themes/pluto/html/menu/index.html View File

@@ -0,0 +1,72 @@
<div class="breadcrumb items-horizontal">
<p class="title">&raquo; Lista menu</p>
<p class="description">Wszystkie utworzone menu można przypisać do odpowiednio skonfigurowanej sekcji na stronie</p>
</div>

<div id="content" class="fill-free items-horizontal">
<form id="side-edit" class="w30p">
<section class="items-vertical">
<header>
<h3>Nowe menu</h3>
</header>

<div class="form-row items-vertical">
<label for="menu-name">Nazwa:</label>
<input id="menu-name" class="w100p" type="text" name="name" />
<p class="description">Wyświetlana jest głównie na panelu bocznym w PA.</p>
</div>
<div class="form-row items-vertical">
<div class="items-horizontal checkbox-box">
<input id="menu-private" type="checkbox" name="private" />
<span class="checkbox" for="menu-private"></span>
<label for="menu-private" class="w100p">Prywatne menu</label>
</div>
<p class="description">Menu nie jest dostępne do wyboru dla szablonu.</p>
</div>

<footer class="items-horizontal button-box w100p">
<div class="items-horizontal fill-free">
<span class="button"><i class="fa fa-floppy-o"></i>Zapisz</span>
</div>
</footer>
</section>
</form>

<section class="fill-free">
<header class="items-horizontal button-box w100p">
<div class="items-horizontal">
<span class="button"><i class="fa fa-random"></i>Zmiana kolejności</span>
</div>
<div class="items-horizontal items-bottom fill-free">
<span class="button"><i class="fa fa-floppy-o"></i>Zapisz zmiany</span>
</div>
</header>

<table class="w100p">
<tr>
<th class="hidden order"></th>
<th class="identity">ID</th>
<th>Nazwa</th>
<th class="text-right">Akcja</th>
</tr>
<tr>
<td class="hidden"><span class="fa fa-bars"></span></td>
<td>1</td>
<td>Menu główne</td>
<td class="text-right"><span class="fa fa-pencil"></span><span class="fa fa-trash"></span></td>
</tr>
<tr>
<td class="hidden"><span class="fa fa-bars"></span></td>
<td>2</td>
<td>Menu systemowe</td>
<td class="text-right"><span class="fa fa-pencil"></span><span class="fa fa-trash"></span></td>
</tr>
<tr>
<td class="hidden"><span class="fa fa-bars"></span></td>
<td>3</td>
<td>Menu w stopce</td>
<td class="text-right"><span class="fa fa-pencil"></span><span class="fa fa-trash"></span></td>
</tr>
</table>
</section>
</div>

+ 82
- 0
public/themes/pluto/js/controls.js View File

@@ -0,0 +1,82 @@
/*
* This file is part of Pulsar CMS
* Copyright (c) by sobiemir <sobiemir@aculo.pl>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

function initializeCheckboxes()
{
let checkboxes = $(".checkbox");
let current = null;

checkboxes.click((ev) => {
let tag = $(ev.currentTarget);
let input = tag.children("input");
let span = tag.children("span");

input.focus();
tag.toggleClass( "checked" );

if( tag.hasClass("checked") )
input[0].checked = true;
else
input[0].checked = false;

ev.preventDefault();
current = null;
}).mousedown((ev) => {
current = ev.currentTarget;
});

checkboxes.children("input").focus((ev) => {
let checkbox = $(ev.currentTarget).parent();
if( !checkbox.hasClass("focused") )
checkbox.addClass("focused");
}).blur((ev) => {
if( current != null )
{
let input = $(current).children("input");
if( input.length > 0 && input[0] == ev.currentTarget )
{
ev.preventDefault();
return;
}
}

let checkbox = $(ev.currentTarget).parent();
if( checkbox.hasClass("focused") )
checkbox.removeClass("focused");
});
}

function initlializeTabs()
{
let tabs = $(".tab-control");

tabs.click((ev) => {
let tag = $(ev.currentTarget);

if( ev.target.tagName == "LI" )
{
$(tag).children("li.selected").removeClass( "selected" );
$(ev.target).addClass( "selected" );
}
});
}

$(document).ready(() => {
initializeCheckboxes();
initlializeTabs();
});

+ 89
- 0
public/themes/pluto/js/main.js View File

@@ -0,0 +1,89 @@
/*
* This file is part of Pulsar CMS
* Copyright (c) by sobiemir <sobiemir@aculo.pl>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

// konfiguracja RequireJS
require.config({
baseUrl: "/themes/pluto/js",
paths : {
jquery : "lib/jquery",
underscore: "lib/underscore",
backbone : "lib/backbone",
bootstrap : "bootstrap",
text : "lib/text.require",
css : "lib/css.require"
}
});

window.console.log( "RequireJS, wersja: " + require.version );
window.console.log( "Ładowanie zależności..." );

let loadInfo = document.getElementById( "qp-i" );
let loadFile = 0;
let filesCnt = 7;

/**
* Funkcja zwiększająca szerokość paska postępu.
* Używana przy dynamicznym ładowaniu strony.
*
* @return {void}
*/
window.increaseLoadingProgress = () => {
loadFile++;
loadInfo.style.width = ((loadFile / filesCnt) * 100) + "%";

if( loadFile === filesCnt )
window.$("#qp-p").animate( {opacity:0}, 300, () => {
window.$("#loading-screen").fadeOut( 300 );
} );
};

// ładowanie zależności dla CSS i JavaScript
require( ["jquery"], ($) => {
window.increaseLoadingProgress();