├── .gitignore
├── LICENSE
├── Pipfile
├── Pipfile.lock
├── README.md
├── apis
├── __init__.py
└── views.py
├── auth
├── __init__.py
└── views.py
├── flask_xadmin
├── __init__.py
├── examples
│ ├── __init__.py
│ └── simple.py
├── forms.py
├── templates
│ ├── admin
│ │ ├── edit_mode.html
│ │ ├── files
│ │ │ └── custom_file_list.html
│ │ └── models
│ │ │ ├── custom_create.html
│ │ │ ├── custom_details.html
│ │ │ ├── custom_edit.html
│ │ │ └── custom_list.html
│ ├── indexAdmin.html
│ └── security
│ │ ├── _macros.html
│ │ ├── _menu.html
│ │ ├── base.html
│ │ └── login_user.html
├── xadm_lib.py
└── xadm_salib.py
├── geomodule
├── __init__.py
├── utils.py
└── views.py
├── login
├── __init__.py
├── extensions.py
└── views.py
├── main
├── __init__.py
├── admin.py
├── decorators.py
├── extensions.py
├── fake.py
├── forms.py
├── models.py
├── proModels.py
├── proforms.py
├── settings.py
├── static
│ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-theme.css
│ │ │ ├── bootstrap-theme.css.map
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ ├── bootstrap.min.css
│ │ │ ├── easyui.css
│ │ │ └── table
│ │ │ │ └── bootstrap-table.min.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ └── glyphicons-halflings-regular.woff2
│ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ ├── npm.js
│ │ │ └── table
│ │ │ ├── bootstrap-table-locale-all.min.js
│ │ │ └── bootstrap-table.min.js
│ ├── css
│ │ ├── black_swan.min.css
│ │ ├── bootstrap-grid.css
│ │ ├── bootstrap-grid.css.map
│ │ ├── bootstrap-grid.min.css
│ │ ├── bootstrap-grid.min.css.map
│ │ ├── bootstrap-reboot.css
│ │ ├── bootstrap-reboot.css.map
│ │ ├── bootstrap-reboot.min.css
│ │ ├── bootstrap-reboot.min.css.map
│ │ ├── bootstrap.css
│ │ ├── bootstrap.css.map
│ │ ├── bootstrap.min.css
│ │ ├── bootstrap.min.css.map
│ │ ├── evol-colorpicker.css
│ │ ├── form-elements.css
│ │ ├── formstyle.css
│ │ ├── images
│ │ │ ├── asc.gif
│ │ │ ├── bg.gif
│ │ │ ├── desc.gif
│ │ │ ├── layers-2x.png
│ │ │ ├── layers.png
│ │ │ ├── marker-icon-2x.png
│ │ │ ├── marker-icon.png
│ │ │ └── marker-shadow.png
│ │ ├── index
│ │ │ ├── font-awesome
│ │ │ │ ├── css
│ │ │ │ │ ├── fa-brands.css
│ │ │ │ │ ├── fa-brands.min.css
│ │ │ │ │ ├── fa-regular.css
│ │ │ │ │ ├── fa-regular.min.css
│ │ │ │ │ ├── fa-solid.css
│ │ │ │ │ ├── fa-solid.min.css
│ │ │ │ │ ├── fontawesome-all.css
│ │ │ │ │ ├── fontawesome-all.min.css
│ │ │ │ │ ├── fontawesome.css
│ │ │ │ │ └── fontawesome.min.css
│ │ │ │ └── webfonts
│ │ │ │ │ ├── fa-brands-400.eot
│ │ │ │ │ ├── fa-brands-400.svg
│ │ │ │ │ ├── fa-brands-400.ttf
│ │ │ │ │ ├── fa-brands-400.woff
│ │ │ │ │ ├── fa-brands-400.woff2
│ │ │ │ │ ├── fa-regular-400.eot
│ │ │ │ │ ├── fa-regular-400.svg
│ │ │ │ │ ├── fa-regular-400.ttf
│ │ │ │ │ ├── fa-regular-400.woff
│ │ │ │ │ ├── fa-regular-400.woff2
│ │ │ │ │ ├── fa-solid-900.eot
│ │ │ │ │ ├── fa-solid-900.svg
│ │ │ │ │ ├── fa-solid-900.ttf
│ │ │ │ │ ├── fa-solid-900.woff
│ │ │ │ │ └── fa-solid-900.woff2
│ │ │ ├── index.css
│ │ │ ├── simple-line-icons
│ │ │ │ ├── css
│ │ │ │ │ └── simple-line-icons.css
│ │ │ │ └── fonts
│ │ │ │ │ ├── Simple-Line-Icons.eot
│ │ │ │ │ ├── Simple-Line-Icons.svg
│ │ │ │ │ ├── Simple-Line-Icons.ttf
│ │ │ │ │ ├── Simple-Line-Icons.woff
│ │ │ │ │ └── Simple-Line-Icons.woff2
│ │ │ └── styles.css
│ │ ├── jquery-ui.min.css
│ │ ├── jquery_contextmenu
│ │ │ ├── font
│ │ │ │ ├── context-menu-icons.eot
│ │ │ │ ├── context-menu-icons.ttf
│ │ │ │ ├── context-menu-icons.woff
│ │ │ │ └── context-menu-icons.woff2
│ │ │ ├── jquery.contextMenu.css
│ │ │ └── jquery.contextMenu.min.css
│ │ ├── kingTable.css
│ │ ├── kingtable
│ │ │ ├── filters-region.less
│ │ │ ├── kingtable-core.less
│ │ │ ├── kingtable-structure.less
│ │ │ ├── kingtable.css
│ │ │ ├── kingtable.less
│ │ │ ├── menus.less
│ │ │ ├── pagination-bars.less
│ │ │ ├── preloaders.less
│ │ │ ├── themes.less
│ │ │ ├── themes
│ │ │ │ ├── bronze
│ │ │ │ │ ├── bronze.less
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ └── search.less
│ │ │ │ ├── clear
│ │ │ │ │ ├── clear.less
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ └── search.less
│ │ │ │ ├── dark
│ │ │ │ │ ├── dark.less
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ └── search.less
│ │ │ │ ├── flatblack
│ │ │ │ │ ├── flatblack.less
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ ├── preloaders.less
│ │ │ │ │ └── search.less
│ │ │ │ ├── flatwhite
│ │ │ │ │ ├── flatwhite.less
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ └── search.less
│ │ │ │ ├── midnight
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── midnight.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ ├── preloaders.less
│ │ │ │ │ └── search.less
│ │ │ │ ├── olive
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── olive.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ └── search.less
│ │ │ │ └── ultramarine
│ │ │ │ │ ├── king-table.less
│ │ │ │ │ ├── menus.less
│ │ │ │ │ ├── pagination-bars.less
│ │ │ │ │ ├── search.less
│ │ │ │ │ └── ultramarine.less
│ │ │ └── tools.less
│ │ ├── leaflet.css
│ │ ├── map
│ │ │ ├── featureform.css
│ │ │ ├── font
│ │ │ │ ├── iconfont.eot
│ │ │ │ ├── iconfont.svg
│ │ │ │ ├── iconfont.ttf
│ │ │ │ ├── iconfont.woff
│ │ │ │ └── iconfont.woff2
│ │ │ ├── icon.css
│ │ │ ├── leaflet.contextmenu.css
│ │ │ ├── leaflet.draw.css
│ │ │ ├── map.css
│ │ │ └── upload.css
│ │ ├── perfect_blue.min.css
│ │ ├── style.css
│ │ └── task.css
│ ├── font-awesome
│ │ ├── css
│ │ │ ├── font-awesome.css
│ │ │ └── font-awesome.min.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ ├── less
│ │ │ ├── animated.less
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ └── scss
│ │ │ ├── _animated.scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _path.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ └── font-awesome.scss
│ ├── ico
│ │ ├── apple-touch-icon-114-precomposed.png
│ │ ├── apple-touch-icon-144-precomposed.png
│ │ ├── apple-touch-icon-57-precomposed.png
│ │ ├── apple-touch-icon-72-precomposed.png
│ │ └── favicon.png
│ ├── img
│ │ ├── backgrounds
│ │ │ └── 1.jpg
│ │ ├── draw
│ │ │ ├── edit.png
│ │ │ ├── icon_tbs01_03.png
│ │ │ ├── icon_tbs01_04.png
│ │ │ └── line.png
│ │ └── touxiang.png
│ ├── index
│ │ └── font-awesome
│ │ │ ├── css
│ │ │ ├── font-awesome.css
│ │ │ └── font-awesome.min.css
│ │ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ │ ├── less
│ │ │ ├── animated.less
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ │ └── scss
│ │ │ ├── _animated.scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _path.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ └── font-awesome.scss
│ ├── js
│ │ ├── bootstrap.bundle.js
│ │ ├── bootstrap.bundle.js.map
│ │ ├── bootstrap.bundle.min.js
│ │ ├── bootstrap.bundle.min.js.map
│ │ ├── bootstrap.js
│ │ ├── bootstrap.js.map
│ │ ├── bootstrap.min.js
│ │ ├── bootstrap.min.js.map
│ │ ├── carbon.js
│ │ ├── charts
│ │ │ ├── chart.js
│ │ │ ├── chart.min.js
│ │ │ └── demo.js
│ │ ├── config.js
│ │ ├── evol-colorpicker.min.js
│ │ ├── gaode
│ │ │ └── gaode.js
│ │ ├── jquery-1.11.1.js
│ │ ├── jquery-1.11.1.min.js
│ │ ├── jquery-2.2.2.min.js
│ │ ├── jquery-3.2.1.slim.min.js
│ │ ├── jquery-3.3.1.slim.min.js
│ │ ├── jquery-ui-1.12.1.min.js
│ │ ├── jquery-ui-1.9.0.custom.min.js
│ │ ├── jquery.backstretch.js
│ │ ├── jquery.backstretch.min.js
│ │ ├── jquery.kingTable.js
│ │ ├── jquery.ui.draggable.js
│ │ ├── jquery.ui.mouse.js
│ │ ├── jquery_contextmenu
│ │ │ ├── jquery.contextMenu.min.js
│ │ │ ├── jquery.contextMenu.min.js.map
│ │ │ ├── jquery.ui.position.js
│ │ │ └── jquery.ui.position.min.js
│ │ ├── kingtable
│ │ │ ├── i.js
│ │ │ ├── jquery-ui-sortable.js
│ │ │ ├── jquery.kingtable.js
│ │ │ ├── kingtable-core.js
│ │ │ ├── lodash.js
│ │ │ ├── lodash
│ │ │ │ ├── jquery.kingtable-lodash.js
│ │ │ │ ├── pagination
│ │ │ │ │ ├── pagination-bar-buttons.html
│ │ │ │ │ ├── pagination-bar-filters.html
│ │ │ │ │ └── pagination-bar-layout.html
│ │ │ │ ├── table
│ │ │ │ │ ├── king-table-base.html
│ │ │ │ │ ├── king-table-empty-cell.html
│ │ │ │ │ ├── king-table-empty-view.html
│ │ │ │ │ ├── king-table-error-view.html
│ │ │ │ │ ├── king-table-gallery.html
│ │ │ │ │ ├── king-table-head-cell.html
│ │ │ │ │ ├── king-table-preloader.html
│ │ │ │ │ └── king-table-table.html
│ │ │ │ └── templates.js
│ │ │ ├── r.js
│ │ │ ├── ready.js
│ │ │ ├── shared
│ │ │ │ ├── README.txt
│ │ │ │ ├── components
│ │ │ │ │ ├── array-group.js
│ │ │ │ │ ├── array-search.js
│ │ │ │ │ ├── date.js
│ │ │ │ │ ├── events.js
│ │ │ │ │ ├── extend.js
│ │ │ │ │ ├── reflection.js
│ │ │ │ │ ├── regex.js
│ │ │ │ │ └── string.js
│ │ │ │ ├── data
│ │ │ │ │ ├── csv.js
│ │ │ │ │ ├── file.js
│ │ │ │ │ ├── i18n.js
│ │ │ │ │ ├── object-analyzer.js
│ │ │ │ │ ├── query.js
│ │ │ │ │ ├── sanitizer.js
│ │ │ │ │ └── xml.js
│ │ │ │ ├── filters
│ │ │ │ │ └── filters-manager.js
│ │ │ │ └── menus
│ │ │ │ │ ├── menu-builder.js
│ │ │ │ │ ├── menu-functions.js
│ │ │ │ │ └── menu.js
│ │ │ └── signature.js
│ │ ├── leaflet
│ │ │ ├── draw
│ │ │ │ ├── DrawStyle.js
│ │ │ │ ├── Leaflet.Editable.js
│ │ │ │ ├── Path.Drag.js
│ │ │ │ ├── Semicircle.js
│ │ │ │ ├── draw_tool.js
│ │ │ │ ├── edit_tool.js
│ │ │ │ ├── leaflet-touch-helper.js
│ │ │ │ ├── leaflet.Editable.Extends.js
│ │ │ │ └── leaflet.contextmenu.js
│ │ │ ├── leaflet-side-by-side.js
│ │ │ ├── leaflet.ChineseTmsProviders.js
│ │ │ ├── leaflet.js
│ │ │ └── print
│ │ │ │ ├── bundle.js
│ │ │ │ └── print.js
│ │ ├── map
│ │ │ ├── map.js
│ │ │ ├── mapCompare.js
│ │ │ ├── mapreview.js
│ │ │ └── vectoreview.js
│ │ ├── moment-with-locales.min.js
│ │ ├── placeholder.js
│ │ ├── popper
│ │ │ └── popper.min.js
│ │ ├── script.js
│ │ ├── scripts.js
│ │ ├── task.js
│ │ └── utils.js
│ └── test.html
├── table.py
├── templates
│ ├── admin
│ │ ├── edit_mode.html
│ │ ├── files
│ │ │ └── custom_file_list.html
│ │ ├── models
│ │ │ ├── custom_create.html
│ │ │ ├── custom_details.html
│ │ │ ├── custom_edit.html
│ │ │ └── custom_list.html
│ │ ├── new_file.html
│ │ ├── new_project.html
│ │ ├── new_shp.html
│ │ ├── new_task.html
│ │ ├── new_tasktemplate.html
│ │ └── settings.html
│ ├── auth
│ │ └── login.html
│ ├── base.html
│ ├── blog
│ │ ├── _fileupload.html
│ │ ├── _search.html
│ │ ├── _sidebar.html
│ │ ├── _tasks.html
│ │ ├── index.html
│ │ ├── message.html
│ │ └── task.html
│ ├── charts
│ │ └── chart.html
│ ├── index.html
│ ├── indexbase.html
│ ├── log
│ │ └── loglist.html
│ ├── login.html
│ ├── map
│ │ ├── _drawTool.html
│ │ ├── _mapCompare.html
│ │ ├── _mapCompare2.html
│ │ ├── getpoi.html
│ │ ├── imgCompare.html
│ │ ├── map.html
│ │ ├── mapreview.html
│ │ ├── upload.html
│ │ └── vectoreview.html
│ ├── security
│ │ ├── _macros.html
│ │ ├── _menu.html
│ │ ├── base.html
│ │ └── login_user.html
│ └── tables
│ │ ├── kingtable.html
│ │ └── recyclebin.html
├── uploads
│ ├── airline.zip
│ ├── kml.kml
│ ├── kml2.kml
│ └── vector
│ │ └── airline.zip
│ │ ├── airline.cpg
│ │ ├── airline.dbf
│ │ ├── airline.prj
│ │ ├── airline.sbn
│ │ ├── airline.sbx
│ │ ├── airline.shp
│ │ └── airline.shx
├── utils.py
└── views.py
├── module2
├── __init__.py
└── views.py
├── whooshee
└── user
│ ├── MAIN_WRITELOCK
│ ├── MAIN_vf2imn514zh43rjo.seg
│ ├── MAIN_yxd8m8sbefoe3hzn.seg
│ ├── MAIN_za2hptra87126ojj.seg
│ └── _MAIN_68.toc
└── xadmin
└── __init__.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 | MANIFEST
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 | .pytest_cache/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | local_settings.py
57 | db.sqlite3
58 |
59 | # Flask stuff:
60 | instance/
61 | .webassets-cache
62 |
63 | # Scrapy stuff:
64 | .scrapy
65 |
66 | # Sphinx documentation
67 | docs/_build/
68 |
69 | # PyBuilder
70 | target/
71 |
72 | # Jupyter Notebook
73 | .ipynb_checkpoints
74 |
75 | # pyenv
76 | .python-version
77 |
78 | # celery beat schedule file
79 | celerybeat-schedule
80 |
81 | # SageMath parsed files
82 | *.sage.py
83 |
84 | # Environments
85 | .env
86 | .venv
87 | env/
88 | venv/
89 | ENV/
90 | env.bak/
91 | venv.bak/
92 |
93 | # Spyder project settings
94 | .spyderproject
95 | .spyproject
96 |
97 | # Rope project settings
98 | .ropeproject
99 |
100 | # mkdocs documentation
101 | /site
102 |
103 | # mypy
104 | .mypy_cache/
105 |
--------------------------------------------------------------------------------
/Pipfile:
--------------------------------------------------------------------------------
1 | [[source]]
2 | url = "https://pypi.python.org/simple"
3 | verify_ssl = true
4 | name = "pypi"
5 |
6 | [dev-packages]
7 | watchdog = "*"
8 | faker = "*"
9 |
10 | [packages]
11 | bootstrap-flask = "*"
12 | flask-moment = "*"
13 | flask-sqlalchemy = "*"
14 | python-dotenv = "*"
15 | flask-wtf = "*"
16 | flask = "*"
17 | flask-login = "*"
18 | flask-debugtoolbar = "*"
19 | "psycopg2" = "*"
20 | flask-ckeditor = "*"
21 | flask-dropzone = "*"
22 | exifread = "*"
23 | flask-whooshee = "*"
24 | "geoalchemy2" = "*"
25 | flask-xadmin = "*"
26 | enum = "*"
27 | "httplib2" = "*"
28 | pyshp = "*"
29 | flask-cors = "*"
30 | flask-bootstrap = "*"
31 | fastkml = "*"
32 | gdal = "==2.4.0"
33 | flask-table = "*"
34 | shapely = "*"
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 一、环境搭建:
2 |
3 | 1.1 数据库:
4 |
5 | 本系统采用安装了postgis扩展的postgresql数据库(或其他支持地理空间数据扩展的数据库),使用之前需要在main/setting.py文件中修改连接字符:
6 |
7 |
8 | 1.2 python环境为python2.x
9 |
10 | 二、数据初始化:
11 |
12 | 因为使用了flask的虚拟环境,所以首先使用vs code打开该文件夹,在命令资源符中打开后,依次输入:
13 |
14 | pipenv install
15 |
16 | pipenv shell
17 |
18 | flask initdb//初始化数据库表
19 |
20 | flask initdata//初始化数据
21 |
22 | flask run
23 |
24 | 即可启动
25 |
26 | 详情:
27 | https://www.jianshu.com/p/935c91e7686b
28 |
29 |
30 |
--------------------------------------------------------------------------------
/apis/__init__.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | from flask import Flask
3 | from main import app
4 | app.config.from_pyfile('settings.py')
5 | from apis import views
6 |
--------------------------------------------------------------------------------
/auth/__init__.py:
--------------------------------------------------------------------------------
1 | #coding-utf-8
2 | from flask import Flask
3 | from main import app
4 | app.config.from_pyfile('settings.py')
5 | from auth import views
6 |
--------------------------------------------------------------------------------
/auth/views.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | from flask import flash,render_template,redirect,url_for
3 | from flask_login import login_user, logout_user, login_required, current_user
4 | from main.forms import LoginForm
5 | from auth import app
6 | from main.models import User
7 | from main.utils import redirect_back
8 | @app.route('/auth',methods=['GET','POST'])
9 | def module1():
10 | return ('module1 load success')
11 | @app.route('/login', methods=['GET', 'POST'])
12 | def login():
13 | if current_user.is_authenticated:
14 | return redirect(url_for('map'))
15 |
16 | form = LoginForm()
17 | if form.validate_on_submit():
18 | user = User.query.filter_by(username=form.username.data.lower()).first()
19 | if user is not None and user.validate_password(form.password.data):
20 | if login_user(user, form.remember_me.data):
21 | flash('登陆成功.', 'info')
22 | return redirect_back()
23 | else:
24 | flash('您的账户为空.', 'warning')
25 | return redirect(url_for('map'))
26 | flash('无效的账户或密码.', 'warning')
27 | return render_template('auth/login.html', form=form)
28 |
29 |
30 | @app.route('/logout')
31 | @login_required
32 | def logout():
33 | logout_user()
34 | flash('退出登录成功.', 'info')
35 | return redirect_back()
--------------------------------------------------------------------------------
/flask_xadmin/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | __version__ = '0.1.2'
3 | __author__ = 'Sedad Delalic'
4 | __email__ = 'dsedad@gmail.com'
5 |
6 | from flask import Blueprint, redirect
7 | from flask_security import Security, SQLAlchemyUserDatastore
8 | from flask_admin import Admin
9 | from flask_security import current_user, logout_user
10 | from flask import current_app
11 | from flask_xadmin.xadm_lib import set_edit_mode, is_super_admin
12 | from flask_xadmin.xadm_lib import xAdminIndexView, xEditModeView, xModelView, current_edit_mode, is_user_authenticated
13 |
14 | xadm_app = Blueprint('xadm_app', __name__, template_folder='templates')
15 |
16 | # wrap admin
17 | def gen_xadmin(app, title, db, user_model, role_model, views=[]):
18 | db.init_app(app)
19 |
20 | # init_login()
21 | user_datastore = SQLAlchemyUserDatastore(db=db, user_model=user_model, role_model=role_model)
22 | security = Security(app, user_datastore)
23 | xadmin = Admin(app, title, index_view=xAdminIndexView(url='/xadmin'), base_template='index.html')
24 |
25 | for v in views:
26 | xadmin.add_view(v)
27 |
28 | # Add view for enter/leave edit mode
29 | xadmin.add_view(xEditModeView(name='EditMode'))
30 |
31 | return xadmin
32 |
33 | @xadm_app.before_app_request
34 | def reset_views():
35 | """ Before each request - reset permissions for views, regarding edit_mode """
36 |
37 | if not is_user_authenticated():
38 | set_edit_mode(False)
39 | else:
40 | if not is_super_admin():
41 | logout_user()
42 |
43 | admins = current_app.extensions.get('admin', [])
44 | for adm in admins:
45 | for v in adm._views:
46 | if hasattr(v, 'set_permissions'):
47 | v.set_permissions(current_edit_mode())
48 |
49 |
50 | @xadm_app.errorhandler(403)
51 | def page_not_found(e):
52 | return redirect('/')
53 |
--------------------------------------------------------------------------------
/flask_xadmin/examples/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/flask_xadmin/examples/__init__.py
--------------------------------------------------------------------------------
/flask_xadmin/forms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from flask_security.forms import Form,LoginForm
3 | from wtforms import SubmitField, PasswordField,HiddenField
4 | from flask_security.utils import verify_and_update_password
5 | from flask_security import current_user
6 | from werkzeug.security import check_password_hash
7 |
8 | #Form to enter edit mode
9 | class EditModeForm(Form):
10 | password = PasswordField(u'Password', description='Please enter your password to enable edit mode')
11 | next = HiddenField()
12 | submit = SubmitField(u'Activate edit mode')
13 |
14 | def validate(self):
15 | if not Form.validate(self):
16 | return False
17 |
18 | if self.password.data.strip() == '':
19 | self.password.errors.append(u'Password is required')
20 | return False
21 | print(self.password.data)
22 | if not check_password_hash(self.password.data, current_user.password):
23 | self.password.errors.append(u'Wrong password')
24 | return False
25 |
26 | return True
27 |
28 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/admin/edit_mode.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends 'admin/master.html' %}
3 | {% include "security/_messages.html" %}
4 |
5 | {% block body %}
6 |
21 |
22 | {% endblock %}
23 |
24 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/admin/files/custom_file_list.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/file/list.html' %}
2 | {% block body %}
3 | {{ admin_view.name }}
{{ admin_view.doc()}}
4 |
5 | {{super() }}
6 |
7 | {% endblock %}
8 | {% block model_menu_bar %}
9 | {{ super() }}
10 | {% endblock %}
11 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/admin/models/custom_create.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/create.html' %}
2 | {% block body %}
3 | {{ admin_view.name }} ({{ admin_view.doc()}})
4 |
5 | {{super() }}
6 | {% endblock %}
7 |
8 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/admin/models/custom_details.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/details.html' %}
2 |
3 | {% block head %}
4 | {{ super() }}
5 | {{ lib.form_css() }}
6 | {% endblock %}
7 |
8 | {% block details_search %}
9 | {% endblock %}
10 |
11 | {% block navlinks %}
12 | {{ admin_view.name }}
#{{ request.args.get('id') }} {{ admin_view.doc()}}
13 | {{ super() }}
14 | {% endblock %}
15 |
16 | {% block details_table %}
17 |
18 | {% call lib.form_tag(form) %}
19 |
32 | {% endcall %}
33 | {% endblock %}
34 |
35 | {% block tail %}
36 | {{ super() }}
37 | {{ lib.form_js() }}
38 |
45 | {% endblock %}
--------------------------------------------------------------------------------
/flask_xadmin/templates/admin/models/custom_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/edit.html' %}
2 | {% block body %}
3 | {{ admin_view.name }}
#{{ request.args.get('id') }} {{ admin_view.doc()}}
4 | {{super() }}
5 | {% endblock %}
6 |
7 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/admin/models/custom_list.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/list.html' %}
2 | {% block body %}
3 | {{ admin_view.name }}
{{ admin_view.doc()}}
4 |
5 | {{super() }}
6 |
7 | {% endblock %}
8 | {% block model_menu_bar %}
9 | {{ super() }}
10 | {% endblock %}
11 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/security/_macros.html:
--------------------------------------------------------------------------------
1 | {% macro render_field_with_errors(field) %}
2 |
3 | {{ field.label }} {{ field(**kwargs)|safe }}
4 | {% if field.errors %}
5 |
6 | {% for error in field.errors %}
7 | - {{ error }}
8 | {% endfor %}
9 |
10 | {% endif %}
11 |
12 | {% endmacro %}
13 |
14 | {% macro render_field(field) %}
15 | {{ field(**kwargs)|safe }}
16 | {% endmacro %}
--------------------------------------------------------------------------------
/flask_xadmin/templates/security/_menu.html:
--------------------------------------------------------------------------------
1 |
2 | {% if security.registerable or security.recoverable or security.confirmabled %}
3 | Menu
4 |
5 | - Login
6 | {% if security.registerable %}
7 | - Register
8 | {% endif %}
9 | {% if security.recoverable %}
10 | - Forgot password
11 | {% endif %}
12 | {% if security.confirmable %}
13 | - Confirm account
14 | {% endif %}
15 |
16 | {% endif %}
17 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/security/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Login
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {% block content %}
17 | {% endblock %}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/flask_xadmin/templates/security/login_user.html:
--------------------------------------------------------------------------------
1 | {% extends "security/base.html" %}
2 | {% from "security/_macros.html" import render_field_with_errors, render_field %}
3 | {% include "security/_messages.html" %}
4 |
5 | {% block content %}
6 |
7 |
8 |
9 | xAdmin Login
10 |
11 |
54 |
55 |
56 | {% endblock %}
57 |
58 |
--------------------------------------------------------------------------------
/geomodule/__init__.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | from flask import Flask
3 | from main import app
4 | app.config.from_pyfile('settings.py')
5 | from geomodule import views
6 | # import sys;
7 | # sys.path.insert(0,'/Users/jinming/Library/Mobile\ Documents/com\~apple\~CloudDocs/ysj/flask-base/dm/python-flask/data_management/geomodule/gdal')
8 |
--------------------------------------------------------------------------------
/login/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | from extensions import login_manager
3 | from flask import Flask
4 | from main import app
5 | def register_extensions(app):
6 | login_manager.init_app(app)
7 | users = {'15764255859@163.com': {'password': '123'}}
8 | register_extensions(app)
9 | # app = Flask('login')
10 |
11 | from login import views
12 |
13 |
--------------------------------------------------------------------------------
/login/extensions.py:
--------------------------------------------------------------------------------
1 | import flask_login
2 | from flask_debugtoolbar import DebugToolbarExtension
3 | login_manager = flask_login.LoginManager()
4 | toolbar=DebugToolbarExtension()
--------------------------------------------------------------------------------
/login/views.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | import os
3 | import flask
4 | import flask_login
5 | from login import app,users
6 | from flask import render_template,flash
7 | from extensions import login_manager
8 | from main.utils import log
9 | import sys
10 | reload(sys)
11 | sys.setdefaultencoding('utf8')
12 | class User(flask_login.UserMixin):
13 | pass
14 | @login_manager.user_loader
15 | def user_loader(email):
16 | if email not in users:
17 | return
18 |
19 | user = User()
20 | user.id = email
21 | return user
22 |
23 |
24 | @login_manager.request_loader
25 | def request_loader(request):
26 | email = request.form.get('email')
27 | if email not in users:
28 | return
29 |
30 | user = User()
31 | user.id = email
32 |
33 | # DO NOT ever store passwords in plaintext and always compare password
34 | # hashes using constant-time comparison!
35 | user.is_authenticated = request.form['password'] == users[email]['password']
36 |
37 | return user
38 | @app.route('/login', methods=['GET', 'POST'])
39 | def login():
40 | if flask.request.method == 'GET':
41 | return render_template('login.html')
42 |
43 | email = flask.request.form['email']
44 | if flask.request.form['password'] == users[email]['password']:
45 | flash('登陆成功')
46 | user = User()
47 | user.id = email
48 | flask_login.login_user(user)
49 |
50 | return flask.redirect(flask.url_for('protected'))
51 | else:
52 | flash('登陆失败')
53 | return 'Bad login'
54 |
55 |
56 | @app.route('/protected')
57 | @flask_login.login_required
58 | def protected():
59 | return 'Logged in as: ' + flask_login.current_user.id
60 |
61 | @app.route('/logout')
62 | def logout():
63 | flask_login.logout_user()
64 | return 'Logged out'
65 |
66 | @login_manager.unauthorized_handler
67 | def unauthorized_handler():
68 | return 'Unauthorized'
--------------------------------------------------------------------------------
/main/admin.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 管理员
4 | """
5 | import os
6 | import uuid
7 | from flask import render_template, flash, redirect, url_for, request, current_app, Blueprint, send_from_directory
8 | from flask_login import login_required, current_user
9 |
10 | from main.extensions import db
11 | from main.utils import redirect_back
12 | from main import app
13 | from werkzeug import secure_filename
14 |
15 | @app.route('/file/new', methods=['GET', 'POST'])
16 | @login_required
17 | def new_file():
18 | if request.method == 'POST':
19 | f = request.files.get('file')
20 | f.save(os.path.join(app.config['UPLOADED_PATH'], f.filename))
21 | return render_template('admin/new_file.html')
22 |
--------------------------------------------------------------------------------
/main/decorators.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 权限验证
4 | """
5 | from functools import wraps
6 |
7 | from flask import flash, url_for, redirect, abort
8 | from flask_login import current_user
9 |
10 | def permission_required(permission_name):
11 | def decorator(func):
12 | @wraps(func)
13 | def decorated_function(*args, **kwargs):
14 | if not current_user.can(permission_name):
15 | abort(403)
16 | return func(*args, **kwargs)
17 | return decorated_function
18 | return decorator
19 |
20 |
21 | def admin_required(func):
22 | return permission_required('ADMINISTER')(func)
23 |
--------------------------------------------------------------------------------
/main/extensions.py:
--------------------------------------------------------------------------------
1 | from flask_bootstrap import Bootstrap
2 | from flask_sqlalchemy import SQLAlchemy
3 | from flask_debugtoolbar import DebugToolbarExtension
4 | from flask_login import LoginManager
5 | from flask_moment import Moment
6 | from flask_dropzone import Dropzone
7 | from flask_whooshee import Whooshee
8 | toolbar=DebugToolbarExtension()
9 | bootstrap=Bootstrap()
10 | db=SQLAlchemy()
11 | whooshee=Whooshee()
12 | login_manager = LoginManager()
13 | moment = Moment()
14 | dropzone=Dropzone()
15 | @login_manager.user_loader
16 | def load_user(user_id):
17 | from main.models import User
18 | user = User.query.get(int(user_id))
19 | return user
20 |
21 |
22 | login_manager.login_view = 'login'
23 | # login_manager.login_message = 'Your custom message'
24 | login_manager.login_message_category = 'warning'
--------------------------------------------------------------------------------
/main/fake.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | #生成初始数据、
3 | import models
4 | from main.extensions import db
5 | from sqlalchemy.exc import IntegrityError
6 | def initData():
7 | # initAdmin()
8 | initUser()
9 | # initSingleUser
10 | #管理员
11 | def initAdmin():
12 | admin=models.Admin(
13 | id=2,
14 | username="jin2",
15 | name="管理员"
16 | )
17 | admin.set_password('123')
18 | db.session.add(admin)
19 | db.session.commit()
20 | #生成一个测试用户,普通权限
21 | def initUser():
22 | user = models.User(
23 | id=2,
24 | username="jin2",
25 | name="测试管理员用户",
26 | confirmed=True
27 | )
28 | user.set_password('123')
29 | user.set_role('Administrator')
30 | db.session.add(user)
31 | user2 = models.User(
32 | id=3,
33 | username="ucare",
34 | name="云世纪GIS",
35 | confirmed=True
36 | )
37 | user2.set_password('123')
38 | user2.set_role('Administrator')
39 | db.session.add(user2)
40 | try:
41 | db.session.commit()
42 | except IntegrityError:
43 | db.session.rollback()
44 | #生成一个测试用户,普通权限
45 | def initSingleUser():
46 | user = models.User(
47 | id=3,
48 | username="jin",
49 | name="测试普通用户",
50 | confirmed=True
51 | )
52 | user.set_password('123')
53 | db.session.add(user)
54 | try:
55 | db.session.commit()
56 | except IntegrityError:
57 | db.session.rollback()
58 | # def initRole():
59 | # roles=app.config['ROLES_MENUS_MAP'].keys()
60 | # for(i=0;i span {
28 | border-bottom: 1px solid #533E29;
29 | }
30 | }
31 |
32 | .king-table caption {
33 | border: 1px solid #533e29;
34 | font-weight: bold;
35 | background: white url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAABmJLR0QA3wB5ABSzHNRVAAAACXBIWXMAAA6cAAAOnAEHlFPdAAAAB3RJTUUH3QkaFRIaz7uY6QAAAENJREFUCNdly7EJgFAQBNG5xUxswf4Tq7ICBUN3Df5pYvYYGLytURIkFobKEwIQdb2SW87cOvYT2e7NNqrU1/7iZrwPFLYoooBe/o4AAAAASUVORK5CYII=") top left repeat;
36 | }
37 |
38 | .king-table tr td.row-number {
39 | width:40px;
40 | text-align:center;
41 | }
42 |
43 | .king-table a {
44 | color: #000;
45 | &:hover {
46 | color: #C00;
47 | }
48 | }
49 |
50 | .king-table .king-table tr, .king-table .king-table-head tr {
51 | width: 100%;
52 | border-color: #483419;
53 | }
54 |
55 | .king-table-body tr:hover:nth-child(even), .king-table-body tr:hover:nth-child(odd) {
56 | background-color: #ffecb5;
57 | &.king-table-empty, &.king-table-error {
58 | background: #DA832C;
59 | }
60 | }
61 |
62 | .king-table .king-table-head tr {
63 | height: 18px;
64 | background: #E27D15 url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAABmJLR0QA3wB5ABSzHNRVAAAACXBIWXMAAA6cAAAOnAEHlFPdAAAAB3RJTUUH3QkaFRIaz7uY6QAAAENJREFUCNdly7EJgFAQBNG5xUxswf4Tq7ICBUN3Df5pYvYYGLytURIkFobKEwIQdb2SW87cOvYT2e7NNqrU1/7iZrwPFLYoooBe/o4AAAAASUVORK5CYII=") top left repeat-x;
65 | border-bottom: 1px solid #000;
66 | }
67 |
68 | .king-table tr th {
69 | text-align: left;
70 | border-top: 1px solid #efb77c;
71 | border-right: 1px solid #000;
72 | }
73 |
74 | .king-table tr td {
75 | line-height: 15px;
76 | border-right: 1px solid #483419;
77 | border-bottom: 1px solid #483419;
78 | }
79 |
80 | .king-table tr {
81 | th, td {
82 | &.row-number {
83 | background: #e27d15 url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAABmJLR0QA3wB5ABSzHNRVAAAACXBIWXMAAA6cAAAOnAEHlFPdAAAAB3RJTUUH3QkaFRIaz7uY6QAAAENJREFUCNdly7EJgFAQBNG5xUxswf4Tq7ICBUN3Df5pYvYYGLytURIkFobKEwIQdb2SW87cOvYT2e7NNqrU1/7iZrwPFLYoooBe/o4AAAAASUVORK5CYII=") top left repeat-x;
84 | }
85 | }
86 | }
87 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/bronze/menus.less:
--------------------------------------------------------------------------------
1 | .theme-bronze {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #691010;
5 | background: #FFA92D;
6 | color: #3a1700;
7 |
8 | li {
9 | border-bottom: 1px solid #4A1111;
10 | span, a, label {
11 | color: #3a1700;
12 | &:focus, &:hover {
13 | color: #3a1700;
14 | background-color: #ffecb5;
15 | }
16 | }
17 |
18 | &.open {
19 | > span, > a, > label {
20 | background-color: #ffecb5;
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/bronze/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-bronze {
2 | .pagination-bar {
3 | background-repeat: repeat-x;
4 | background-position: top left;
5 | background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAeAAEDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAQFBgf/xAAeEAEAAAUFAAAAAAAAAAAAAAAAAQIEE2EFFVWU0f/EABYBAQEBAAAAAAAAAAAAAAAAAAcDBP/EABkRAAIDAQAAAAAAAAAAAAAAAAASAQJREf/aAAwDAQACEQMRAD8A6Ps+kcVQ9eTwTgAPbZFZp0yV7Irrscjchfh//9k=");
6 |
7 | .pagination-button, .pagination-button-disabled, .separator {
8 | border: 1px solid transparent;
9 | }
10 |
11 | .separator {
12 | border-right: 1px solid #000;
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/bronze/search.less:
--------------------------------------------------------------------------------
1 | .theme-bronze {
2 | .ui-search-highlight {
3 | background-color: yellow;
4 | }
5 |
6 | .king-table-gallery {
7 | .ui-search-highlight {
8 | background-color: #000;
9 | }
10 | }
11 |
12 | .search-field {
13 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcaBygLIDCvHQAAAdFJREFUKM+lk81rE1EUxc/LTCbjZGJTCZkqhZSSaMHgxEVdSTMrFUTcBJepEWkWCvoPSHEhrgSx7kQo2kWhSCsU6aIL3YgI1oqbYlOwi5aMGGw7qWnSZI4bI0Pawa+3epx37+8+zr0X+M8jOoWUoWcltm5KaGUEGG1CftkS0v1lu/rqt4CUoQ/Hg/XxmBbAAVkgIIDtXeLrdxeVhjy+9KVW8P1KytCzVkJhwdSc6ZHMXZIWSevN7Qs3CqbmnE+GmDL0i76Aof7IbD6tcvKKeYdkT1snGX196+z1fFpltk/76Au4dDy8lk+r9CZ7IddORZdzAyo73wLtiyLcgwAghCjvMUqIje1dupq8t/AvgNEded/2ojMoaUTMaq1+NBRSyr6AY4nDUwAQVxrPvZCkEUkcCjafaDLQfyQ269tGkrHRM71PS+uVc6ubLXxrBBYBICy5mUSXBE0G7Bq2VqrBoZLtfNh3DkgOzBRPDs8vfs7ZWztJAOgOK+UTffG5hdJ6rt509ZUNd7PSDGXbELGP4z0AegHoP6UdAOWFsaL18PHEmAdilmxn9Y9nnqT+7sHI5YKpOcXB6KdHV08bf704JPWlZ/dya29fWCTlf9o+kqo3+Qdpar4Yro3HOgAAAABJRU5ErkJggg==");
14 | }
15 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/clear/clear.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 | @import "menus.less";
5 |
6 | .theme-clear {
7 | color:#000;
8 | background-color: #FFF;
9 |
10 | hr {
11 | border-top: 1px solid #aaa;
12 | border-bottom: 1px solid #fff;
13 | }
14 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/clear/menus.less:
--------------------------------------------------------------------------------
1 | .theme-clear {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #717171;
5 | background: #eee;
6 | color: #000;
7 |
8 | li {
9 | border-bottom: 1px solid #C1C1C1;
10 | span, a, label {
11 | color: #000;
12 | &:focus, &:hover {
13 | color: #000;
14 | background-color: #E0E0E0;
15 | }
16 | }
17 |
18 | &.open {
19 | > span, > a, > label {
20 | background-color: #E0E0E0;
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/clear/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-clear {
2 | .pagination-bar {
3 | background-repeat: repeat-x;
4 | background-position: top left;
5 | background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAeAAEDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQI/8QAGRABAAIDAAAAAAAAAAAAAAAAAAETERJh/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ANV2CXcBJZ0S5kB//9k=");
6 | border: 1px solid #ccc;
7 | border-top: 1px solid white;
8 | .pagination-button, .pagination-button-disabled, .separator {
9 | border: 1px solid transparent;
10 | }
11 |
12 | .separator {
13 | border-right: 1px solid #848484;
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/clear/search.less:
--------------------------------------------------------------------------------
1 | .theme-clear {
2 | .ui-search-highlight {
3 | background-color: yellow;
4 | }
5 |
6 | .search-field {
7 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcZEC4Y+QhTXgAAAdFJREFUKM+lk7Gv0nAQx78t/aWkpeZBbEKDRAZjiAOvhITJYEcnJhcn48Tq4uhA4ixG2Ojw1PGR4AsmrvoHiLhBnEgwv+pAxbTN64/qubxnECFGvelyl/tc8v3eAf8Z0nbBsqwbAO4BsAEcAHgN4DHn/M0fAZZl3VFV9UjXdTDGIEkShBAIwxBxHB9xzu9uA1KbmzVNe2GaZuA4zqPhcPig1Wo9jaJoMp/Pr8uyXGeMTYIgmG0ClPPEMIz7hmGgXq8/6XQ6XUmSPAAgokmSJN8Gg0E3SZKHAE52ilGtVj/WajUiovx2j4gOGo3Gh0qlQts9+WciyxcA4HzzL0JJ0hchxHfGGPYCcrncuw0Xtp05jKLoqqqq3l5AqVQ6BoB0On2yCbEs67Kqqs8YYygUCi/32khEF5vN5vPFYnHT933EcTwBAEVR7Gw2C8YYwjD8ulqtGpzz97/Z2G63o9ls9nY6nQZRFOVTqdQ1Xdfzpml65XJ54Pv+FVmWDSHEbU3TXgVB8GnnJZ65cAlA5qx0CsDr9/uO67rd9XqdWS6XKyHEIed8ruxQ3APg7QAPAMB13W6xWPxs2/Zpr9f7u8chosxoNLo1Ho8dIlL+6fuIKL05/AMPJr+j+tXRAwAAAABJRU5ErkJggg==");
8 | }
9 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/dark/dark.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 | @import "menus.less";
5 |
6 | .theme-dark {
7 | color: #DEDEDE;
8 | background-color: #000;
9 |
10 | a, a:hover, a:focus {
11 | color: #DEDEDE;
12 | }
13 |
14 | .camo-btn {
15 | color: #DADAD4;
16 | }
17 |
18 | hr {
19 | border-top: 1px solid #444;
20 | border-bottom: 1px solid #000;
21 | }
22 |
23 | input {
24 | color: #000;
25 | }
26 |
27 | input, select, [tabindex], [type="checkbox"] {
28 | outline-color: #FFF !important;
29 | }
30 |
31 | .tooltip-inner {
32 | opacity: 1;
33 | background-color: #000;
34 | }
35 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/dark/menus.less:
--------------------------------------------------------------------------------
1 | .theme-dark {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #000;
5 | background: #313131;
6 | color: #DEDEDE;
7 |
8 | li {
9 | border-bottom: 1px solid grey;
10 | span, a, label {
11 | color: #DEDEDE;
12 | &:focus, &:hover {
13 | color: #DEDEDE;
14 | background-color: #222;
15 | }
16 | }
17 |
18 | &.open {
19 | > span, > a, > label {
20 | background-color: #222;
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/dark/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-dark {
2 | .pagination-bar {
3 | background-repeat: repeat-x;
4 | background-position: top left;
5 | background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAeAAEDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQH/8QAGBABAQADAAAAAAAAAAAAAAAAABIBE2H/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oADAMBAAIRAxEAPwDIrE19FiptglvIEv/Z");
6 |
7 | .pagination-button, .pagination-button-disabled, .separator {
8 | border: 1px solid transparent;
9 | }
10 |
11 | .separator {
12 | border-right: 1px solid #151515;
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/dark/search.less:
--------------------------------------------------------------------------------
1 | .theme-dark {
2 | .ui-search-highlight {
3 | background-color: #832525;
4 | }
5 |
6 | .search-field {
7 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcZEC4Y+QhTXgAAAdFJREFUKM+lk7Gv0nAQx78t/aWkpeZBbEKDRAZjiAOvhITJYEcnJhcn48Tq4uhA4ixG2Ojw1PGR4AsmrvoHiLhBnEgwv+pAxbTN64/qubxnECFGvelyl/tc8v3eAf8Z0nbBsqwbAO4BsAEcAHgN4DHn/M0fAZZl3VFV9UjXdTDGIEkShBAIwxBxHB9xzu9uA1KbmzVNe2GaZuA4zqPhcPig1Wo9jaJoMp/Pr8uyXGeMTYIgmG0ClPPEMIz7hmGgXq8/6XQ6XUmSPAAgokmSJN8Gg0E3SZKHAE52ilGtVj/WajUiovx2j4gOGo3Gh0qlQts9+WciyxcA4HzzL0JJ0hchxHfGGPYCcrncuw0Xtp05jKLoqqqq3l5AqVQ6BoB0On2yCbEs67Kqqs8YYygUCi/32khEF5vN5vPFYnHT933EcTwBAEVR7Gw2C8YYwjD8ulqtGpzz97/Z2G63o9ls9nY6nQZRFOVTqdQ1Xdfzpml65XJ54Pv+FVmWDSHEbU3TXgVB8GnnJZ65cAlA5qx0CsDr9/uO67rd9XqdWS6XKyHEIed8ruxQ3APg7QAPAMB13W6xWPxs2/Zpr9f7u8chosxoNLo1Ho8dIlL+6fuIKL05/AMPJr+j+tXRAwAAAABJRU5ErkJggg==");
8 | }
9 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatblack/flatblack.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 | @import "preloaders.less";
5 | @import "menus.less";
6 |
7 | .theme-flatblack {
8 | color: #DADAD4;
9 | background-color: #000;
10 |
11 | .camo-btn {
12 | color: #DADAD4;
13 | }
14 |
15 | hr {
16 | border-top: 1px solid #aaa;
17 | border-bottom: 1px solid #fff;
18 | }
19 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatblack/king-table.less:
--------------------------------------------------------------------------------
1 | .theme-flatblack {
2 | .king-table tr {
3 | border-bottom: 1px solid #4A1111;
4 | }
5 |
6 |
7 | .king-table-head {
8 | background-color: #000;
9 | }
10 |
11 | .filters-region {
12 | border-bottom-color: #000;
13 | }
14 |
15 | a {
16 | color: #DADAD4;
17 | }
18 |
19 | .king-table-body tr {
20 | &:hover {
21 | background-color: #2D0303;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatblack/menus.less:
--------------------------------------------------------------------------------
1 | .theme-flatblack {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #691010;
5 | background: #111;
6 | color: #DADAD4;
7 |
8 | li {
9 | border-bottom: 1px solid #4A1111;
10 | span, a, label {
11 | color: #DADAD4;
12 | &:focus, &:hover {
13 | color: #DADAD4;
14 | background-color: #2D0303;
15 | }
16 | }
17 |
18 | &.open {
19 | > span, > a, > label {
20 | background-color: #2D0303;
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatblack/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-flatblack {
2 | .pagination-bar {
3 | background-color: #000000;
4 | border: 1px solid rgba(18, 18, 18, 0.87);
5 | border-top: 0;
6 |
7 | .pagination-button, .pagination-button-disabled, .separator {
8 | border: 1px solid transparent;
9 | }
10 |
11 | .separator {
12 | border-right: 1px solid #666;
13 | }
14 |
15 | select, .search-field {
16 | border-radius: 0;
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatblack/preloaders.less:
--------------------------------------------------------------------------------
1 | .theme-flatblack {
2 | .king-table-container {
3 | .preloader-mask {
4 | opacity: .5;
5 | background-color: #5F0909;
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatblack/search.less:
--------------------------------------------------------------------------------
1 | .theme-flatblack {
2 | .ui-search-highlight {
3 | background-color: #791919;
4 | }
5 |
6 | .search-field {
7 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcZEC4Y+QhTXgAAAdFJREFUKM+lk7Gv0nAQx78t/aWkpeZBbEKDRAZjiAOvhITJYEcnJhcn48Tq4uhA4ixG2Ojw1PGR4AsmrvoHiLhBnEgwv+pAxbTN64/qubxnECFGvelyl/tc8v3eAf8Z0nbBsqwbAO4BsAEcAHgN4DHn/M0fAZZl3VFV9UjXdTDGIEkShBAIwxBxHB9xzu9uA1KbmzVNe2GaZuA4zqPhcPig1Wo9jaJoMp/Pr8uyXGeMTYIgmG0ClPPEMIz7hmGgXq8/6XQ6XUmSPAAgokmSJN8Gg0E3SZKHAE52ilGtVj/WajUiovx2j4gOGo3Gh0qlQts9+WciyxcA4HzzL0JJ0hchxHfGGPYCcrncuw0Xtp05jKLoqqqq3l5AqVQ6BoB0On2yCbEs67Kqqs8YYygUCi/32khEF5vN5vPFYnHT933EcTwBAEVR7Gw2C8YYwjD8ulqtGpzz97/Z2G63o9ls9nY6nQZRFOVTqdQ1Xdfzpml65XJ54Pv+FVmWDSHEbU3TXgVB8GnnJZ65cAlA5qx0CsDr9/uO67rd9XqdWS6XKyHEIed8ruxQ3APg7QAPAMB13W6xWPxs2/Zpr9f7u8chosxoNLo1Ho8dIlL+6fuIKL05/AMPJr+j+tXRAwAAAABJRU5ErkJggg==");
8 | }
9 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatwhite/flatwhite.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 |
5 | .theme-flatwhite {
6 | color:#000;
7 | background-color: #FFF;
8 |
9 | hr {
10 | border-top: 1px solid #aaa;
11 | border-bottom: 1px solid #fff;
12 | }
13 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatwhite/king-table.less:
--------------------------------------------------------------------------------
1 | .theme-flatwhite {
2 | .king-table tr {
3 | border-bottom: 1px solid #eee;
4 | }
5 |
6 | .pagination-bar {
7 | .oi {
8 | color: #666;
9 | }
10 | }
11 |
12 | .king-table-head {
13 | background-color: #FFF;
14 | }
15 |
16 | .king-table a {
17 | color: #000;
18 | }
19 |
20 | .king-table-body tr {
21 | &:hover {
22 | background-color: #F7F7F7;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatwhite/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-flatwhite {
2 | .pagination-bar {
3 | background-color: #FFF;
4 | border: 0;
5 | border-bottom: 1px solid #ccc;
6 |
7 | .pagination-button, .pagination-button-disabled, .separator {
8 | border: 1px solid transparent;
9 | }
10 |
11 | .separator {
12 | border-right: 1px solid #D6D6D6;
13 | }
14 |
15 | select, .search-field {
16 | border-radius: 0;
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/flatwhite/search.less:
--------------------------------------------------------------------------------
1 | .theme-flatwhite {
2 | .ui-search-highlight {
3 | background-color: yellow;
4 | }
5 |
6 | .search-field {
7 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcZEC4Y+QhTXgAAAdFJREFUKM+lk7Gv0nAQx78t/aWkpeZBbEKDRAZjiAOvhITJYEcnJhcn48Tq4uhA4ixG2Ojw1PGR4AsmrvoHiLhBnEgwv+pAxbTN64/qubxnECFGvelyl/tc8v3eAf8Z0nbBsqwbAO4BsAEcAHgN4DHn/M0fAZZl3VFV9UjXdTDGIEkShBAIwxBxHB9xzu9uA1KbmzVNe2GaZuA4zqPhcPig1Wo9jaJoMp/Pr8uyXGeMTYIgmG0ClPPEMIz7hmGgXq8/6XQ6XUmSPAAgokmSJN8Gg0E3SZKHAE52ilGtVj/WajUiovx2j4gOGo3Gh0qlQts9+WciyxcA4HzzL0JJ0hchxHfGGPYCcrncuw0Xtp05jKLoqqqq3l5AqVQ6BoB0On2yCbEs67Kqqs8YYygUCi/32khEF5vN5vPFYnHT933EcTwBAEVR7Gw2C8YYwjD8ulqtGpzz97/Z2G63o9ls9nY6nQZRFOVTqdQ1Xdfzpml65XJ54Pv+FVmWDSHEbU3TXgVB8GnnJZ65cAlA5qx0CsDr9/uO67rd9XqdWS6XKyHEIed8ruxQ3APg7QAPAMB13W6xWPxs2/Zpr9f7u8chosxoNLo1Ho8dIlL+6fuIKL05/AMPJr+j+tXRAwAAAABJRU5ErkJggg==");
8 | }
9 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/midnight/king-table.less:
--------------------------------------------------------------------------------
1 | .theme-midnight {
2 |
3 | .king-table-container {
4 | border-top: 1px solid #222;
5 | }
6 |
7 | .filters-region {
8 | border-bottom-color: #000;
9 | }
10 |
11 | .king-table {
12 | color:#c4feff;
13 | background: #000;
14 | border-collapse: collapse;
15 | border: none;
16 | font-family: Sans-Serif;
17 | font-size: 12px;
18 | line-height: 17px;
19 | margin-bottom: 10px;
20 | border-bottom: 1px solid #666;
21 | }
22 |
23 | .king-table caption {
24 | border: 1px solid #d0d0d0;
25 | font-weight: bold;
26 | background: #000 url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAYAAEDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAcF/8QAHhABAAAFBQAAAAAAAAAAAAAAAAEDFBUXUVVipOL/xAAVAQEBAAAAAAAAAAAAAAAAAAABA//EABYRAQEBAAAAAAAAAAAAAAAAAAASAf/aAAwDAQACEQMRAD8A27xyEHylM2ns+Q0lOpVUQ1ACr//Z") top left repeat-x;
27 | }
28 |
29 | .king-table tr td.row-number {
30 | width:40px;
31 | text-align:center;
32 | }
33 |
34 | .king-table a {
35 | color: #00becf;
36 | }
37 |
38 | .king-table a:hover {
39 | color: #FFF;
40 | }
41 |
42 | .king-table .king-table tr, .king-table .king-table-head tr {
43 | width: 100%;
44 | border-color: #333;
45 | }
46 |
47 | .king-table-body tr:hover:nth-child(even), .king-table-body tr:hover:nth-child(odd) {
48 | background-color: #06002a;
49 | &.king-table-empty, &.king-table-error {
50 | background: #000;
51 | }
52 | }
53 | .king-table .king-table-head tr {
54 | background-color: #000;
55 | border-bottom: 1px solid #222;
56 | }
57 | .king-table .king-table-head tr {
58 | height: 18px;
59 | }
60 | .king-table tr th {
61 | text-align: left;
62 | border-top: 1px solid #222;
63 | }
64 | .king-table tr td {
65 | line-height: 15px;
66 | border-right: 1px solid #222;
67 | border-bottom: 1px solid #222;
68 | }
69 | .king-table tr {
70 | th, td {
71 | &.row-number {
72 | border-top: 1px solid #222;
73 | background: #000 url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAWAAEDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAYH/8QAGBABAAMBAAAAAAAAAAAAAAAAAAIUYmH/xAAUAQEAAAAAAAAAAAAAAAAAAAAC/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAMAwEAAhEDEQA/AMTv6Erf0HRiWuT6ABP/2Q==") top left repeat-x;
74 | }
75 | }
76 | }
77 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/midnight/menus.less:
--------------------------------------------------------------------------------
1 | .theme-midnight {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #4347B3;
5 | background: #111;
6 | color: #c4feff;
7 |
8 | li {
9 | border-bottom: 1px solid #000;
10 | span, a, label {
11 | color: #c4feff;
12 | &:focus, &:hover {
13 | color: #c4feff;
14 | background-color: #000;
15 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAAWCAYAAAASPXQbAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcMEw8zvKqmCQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAkklEQVRo3u3aQRLCIAxA0R/Bo3s2D1U6uMEpIsXu3Pw3wzQNIU33BMDjWTOQgNxWauve5fv9vubIBYn6sT8/F2Tqsu8qvnqun3+szcBt+L9Z7wLs7XkW97n3+06wUZf1v3rN+37n5nFQ2ve3of/YoxDsJ7PO5pAkSZIkSZIkSZIkSZIkSZL0RwFeAsdL4Jcvgb8Adb+Yn8Y8eNcAAAAASUVORK5CYII=");
16 | background-repeat: no-repeat;
17 | background-position: center;
18 | }
19 | }
20 |
21 | &.open {
22 | > span, > a, > label {
23 | background-color: #000;
24 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAAWCAYAAAASPXQbAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcMEw8zvKqmCQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAkklEQVRo3u3aQRLCIAxA0R/Bo3s2D1U6uMEpIsXu3Pw3wzQNIU33BMDjWTOQgNxWauve5fv9vubIBYn6sT8/F2Tqsu8qvnqun3+szcBt+L9Z7wLs7XkW97n3+06wUZf1v3rN+37n5nFQ2ve3of/YoxDsJ7PO5pAkSZIkSZIkSZIkSZIkSZL0RwFeAsdL4Jcvgb8Adb+Yn8Y8eNcAAAAASUVORK5CYII=");
25 | background-repeat: no-repeat;
26 | background-position: center;
27 | }
28 | }
29 | }
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/midnight/midnight.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 | @import "preloaders.less";
5 | @import "menus.less";
6 |
7 | .theme-midnight {
8 | color: #c4feff;
9 | background-color: #000;
10 |
11 | .camo-btn {
12 | color: #c4feff;
13 | }
14 |
15 | input, select, textarea {
16 | background-color: #000;
17 | border-color: #333;
18 | color: #c4feff;
19 | }
20 |
21 | input, select, [tabindex], [type="checkbox"] {
22 | outline-color: #c4feff !important;
23 | }
24 |
25 | hr {
26 | border-top: 1px solid #02232a;
27 | border-bottom: 1px solid #106274;
28 | }
29 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/midnight/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-midnight {
2 | .pagination-bar {
3 | background-repeat: repeat-x;
4 | background-position: top left;
5 | background-image: url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAYAAADtlXTHAAAABmJLR0QAigA6AAVbg4eFAAAACXBIWXMAAA6cAAAOnAEHlFPdAAAAB3RJTUUH3QcKDRQh1fbNfQAAAElJREFUCNdVikEKwDAMwxRD2fP3gLGPxinZYWWsFyEbcV53q6pQpZGdC+ncP6Ny8sZretmchnGMFoCC4LUfAhQdiGhEg/i62OIHIVwwSHkNyBEAAAAASUVORK5CYII=");
6 |
7 | .pagination-button, .pagination-button-disabled, .separator {
8 | border: 1px solid transparent;
9 | }
10 |
11 | .separator {
12 | border-right: 1px solid #1C3131;
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/midnight/preloaders.less:
--------------------------------------------------------------------------------
1 | .theme-midnight {
2 | .king-table-container {
3 | .preloader-mask {
4 | opacity: .5;
5 | background-color: #091431;
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/midnight/search.less:
--------------------------------------------------------------------------------
1 | .theme-midnight {
2 | .ui-search-highlight {
3 | background-color: rgb(58, 58, 228);
4 | }
5 |
6 | .search-field {
7 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcZEDE7ljUssgAAAeNJREFUKM+lk81PE1EUxc+b99op40SKfHQIJkZDAU0DmGg1fsFCie5YdEnSEP8BWGgM6A5M40LUrlFUdm4gcWHAhZgIbtS6IsRGQ0LjzCSUEZqinY/rQoY0xUaNd3Vz8u7v5p13HvCfxSqFvtSdHrWlZUgOh7t5MBgumuarQi53b+7G9YU/Aq5M3E9GTp6YQlAGBP8lOi5Q+gHrU3ZqZjA5WAng5Zubz56Z8UKhAj9Qd/fhsaO3+pu1x4tCZArb2+dq6hviWnt7Jjs/t1IOEH5T2xa9BkWBUGoeTB45nGaM6QBARJlhItcyjHRdLDYGYLYcIPlNSNOOA8BkNLo7DACMMWtCi0w7tp2Vm5pilVfYBbBAYP/OgL7HKMYs2LYHzlEV4HreB9+LykOXxm93CVlucx1HrwoQsvwMACLx+Gw55OLY+KH6zs4n4BwEPK/6jETUMPDu/dOAJF1GsYiiYWYAQGls7MY+BeAc7lZhU3+9cGF+dOTjb3NARB1XP39JlvL5hJCkVgBwiXQWlF/ALiUkxlRnw/pmvF3q8SF7kkhEGoCDANQd6TsAPWWavctrubQP0ZcWu17eHF1lf5t5IlJTpplYXsulPcf5GiA6/+j0KeOfPg4RqdPr+cSbza1eIhIA8BOAQ7mCZoIs4QAAAABJRU5ErkJggg==");
8 | }
9 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/olive/menus.less:
--------------------------------------------------------------------------------
1 | .theme-olive {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #475F15;
5 | background: #DDE979;
6 | color: #455b1b;
7 |
8 | li {
9 | border-bottom: 1px solid #BEBD63;
10 | span, a, label {
11 | color: #455b1b;
12 | &:focus, &:hover {
13 | color: #455b1b;
14 | background-color: #e6f0a3;
15 | }
16 | }
17 |
18 | &.open {
19 | > span, > a, > label {
20 | background-color: #e6f0a3;
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/olive/olive.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 | @import "menus.less";
5 |
6 | .theme-olive {
7 | color: #455b1b;
8 | background-color: #233107;
9 |
10 | .camo-btn {
11 | color: #455b1b;
12 | }
13 |
14 | input, select, [tabindex], [type="checkbox"] {
15 | outline-color: #25150a !important;
16 | }
17 |
18 | hr {
19 | border-top: 1px solid #afc423;
20 | border-bottom: 1px solid #e3ee9f;
21 | }
22 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/olive/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-olive {
2 | .pagination-bar {
3 | background-repeat: repeat-x;
4 | background-position: top left;
5 | background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAeAAEDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAUECP/EAB0QAQABAwUAAAAAAAAAAAAAAAABAhNhAxQVU5H/xAAXAQADAQAAAAAAAAAAAAAAAAACAwYH/8QAGBEBAAMBAAAAAAAAAAAAAAAAABESFWH/2gAMAwEAAhEDEQA/AOlr+RE5DS7J8kY5s9Mqz7fAqW6ROQJ//9k=");
6 | border: 1px solid #455b1b;
7 |
8 | .pagination-button, .pagination-button-disabled, .separator {
9 | border: 1px solid transparent;
10 | }
11 |
12 | .separator {
13 | border-right: 1px solid #455b1b;
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/olive/search.less:
--------------------------------------------------------------------------------
1 | .theme-olive {
2 | .ui-search-highlight {
3 | background-color: yellow;
4 | }
5 |
6 | .king-table-gallery {
7 | .ui-search-highlight {
8 | background-color: #792323;
9 | }
10 | }
11 |
12 | .search-field {
13 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcaBygLIDCvHQAAAdFJREFUKM+lk81rE1EUxc/LTCbjZGJTCZkqhZSSaMHgxEVdSTMrFUTcBJepEWkWCvoPSHEhrgSx7kQo2kWhSCsU6aIL3YgI1oqbYlOwi5aMGGw7qWnSZI4bI0Pawa+3epx37+8+zr0X+M8jOoWUoWcltm5KaGUEGG1CftkS0v1lu/rqt4CUoQ/Hg/XxmBbAAVkgIIDtXeLrdxeVhjy+9KVW8P1KytCzVkJhwdSc6ZHMXZIWSevN7Qs3CqbmnE+GmDL0i76Aof7IbD6tcvKKeYdkT1snGX196+z1fFpltk/76Au4dDy8lk+r9CZ7IddORZdzAyo73wLtiyLcgwAghCjvMUqIje1dupq8t/AvgNEded/2ojMoaUTMaq1+NBRSyr6AY4nDUwAQVxrPvZCkEUkcCjafaDLQfyQ269tGkrHRM71PS+uVc6ubLXxrBBYBICy5mUSXBE0G7Bq2VqrBoZLtfNh3DkgOzBRPDs8vfs7ZWztJAOgOK+UTffG5hdJ6rt509ZUNd7PSDGXbELGP4z0AegHoP6UdAOWFsaL18PHEmAdilmxn9Y9nnqT+7sHI5YKpOcXB6KdHV08bf704JPWlZ/dya29fWCTlf9o+kqo3+Qdpar4Yro3HOgAAAABJRU5ErkJggg==");
14 | }
15 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/ultramarine/menus.less:
--------------------------------------------------------------------------------
1 | .theme-ultramarine {
2 | .king-table-region {
3 | .ug-menu {
4 | box-shadow: 0 6px 12px #081125;
5 | background: #619CD6;
6 | color: #000;
7 |
8 | li {
9 | border-bottom: 1px solid #2873AC;
10 | span, a, label {
11 | color: #455b1b;
12 | &:focus, &:hover {
13 | color: #455b1b;
14 | background-color: #7DB3EF;
15 | }
16 | }
17 |
18 | &.open {
19 | > span, > a, > label {
20 | background-color: #7DB3EF;
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/ultramarine/pagination-bars.less:
--------------------------------------------------------------------------------
1 | .theme-ultramarine {
2 | .pagination-bar {
3 | background-repeat: repeat-x;
4 | background-position: top left;
5 | background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAXwBfAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAeAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAcEAEAAQQDAAAAAAAAAAAAAAAAAgEUFWFRYqH/xAAWAQEBAQAAAAAAAAAAAAAAAAAGAAT/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEv/aAAwDAQACEQMRAD8AscjHkSmR7eh+D2kL+uxKXs9iZbf/2Q==");
6 | border: 1px solid #1e2d9e;
7 |
8 | .pagination-button, .pagination-button-disabled, .separator {
9 | border: 1px solid transparent;
10 | }
11 |
12 | .separator {
13 | border-right: 1px solid #071436;
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/ultramarine/search.less:
--------------------------------------------------------------------------------
1 | .theme-ultramarine {
2 | .ui-search-highlight {
3 | background-color: #630404;
4 | }
5 |
6 | .search-field {
7 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QcaByk3FkTi2wAAAcdJREFUKM+lkzFoE2EUx//fd/FyXi8lV47LlQSqklinJu7S3KQVUZfgmBgQOyjoqouTdBKEunUpbQfBQYUiDoK6iItVcak2BStUUjHGeg1eSu7+DhoJbQ+1vunj/3g/3vt/7wH/GWKrYJi5YhAql4NQKZAiGVM6TxQZ3NxoLj39I8Awc5V2aE9L1YKQewFIMGwh3PyMGBrT39cXq5GtGGauqJou9XTVK4zdnSDpknRPnnt+SU9Xvbh1goaZOx0JSNij85pTZv7o7eskna5OMnms8uyi5pSpW8U3kYC+wTOrmlNmb3EvJLn/wpJml7g1J7uPEGo/AAgh6tuMEuIrg1YIqSMSkOhPvex6sW08M5tv+xsHVTVejwQMZobvAMAm7fu9kMRAdqiDgRlIHVbqwHzkN5K0MiPXZhufamOBvwLJ5qufo/UVFG0IkDrQWfu2J1ge9Zq11zvuAclDh4/fq7x/+6jkt9ayAKBqZt1Ojzz8+GGhFHbaRugvr8dlo9iFiB0cdwBkABi/JB9Affzqgjs3c2vyN0Rp5L0vtZW/3nmSxvkrL87q6aqX3Df+7sipqdQ/Hw5J48bUYunB41WXZGxX10dS6y3+AfpUvSB00xFiAAAAAElFTkSuQmCC");
8 | }
9 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/themes/ultramarine/ultramarine.less:
--------------------------------------------------------------------------------
1 | @import "king-table.less";
2 | @import "pagination-bars.less";
3 | @import "search.less";
4 | @import "menus.less";
5 |
6 | .theme-ultramarine {
7 | color: #071436;
8 | background-color: #010004;
9 |
10 | .camo-btn {
11 | color: #071436;
12 | }
13 |
14 | input, select, [tabindex], [type="checkbox"] {
15 | outline-color: #c4feff !important;
16 | }
17 |
18 | hr {
19 | border-top: 1px solid #09165a;
20 | border-bottom: 1px solid #5252b3;
21 | }
22 | }
--------------------------------------------------------------------------------
/main/static/css/kingtable/tools.less:
--------------------------------------------------------------------------------
1 | /* tools */
2 | .king-table-region {
3 | .tools-region {
4 | float: left;
5 | margin-right: 5px;
6 | .ug-expander {
7 | display: inline-block;
8 | cursor: pointer;
9 | padding: 5px 7px;
10 | }
11 |
12 | &:hover {
13 | .menu {
14 | display: block;
15 | }
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/main/static/css/map/featureform.css:
--------------------------------------------------------------------------------
1 | #poicontainer{
2 | position: absolute;
3 | left: 300px;
4 | top: 100px;
5 | width: 300px;
6 | }
7 | #geojsonContent{
8 | top: 100px;
9 | left: 600px;
10 | border-radius: 10px;
11 | }
12 | .card{
13 | border-radius: 10px;
14 | }
15 | #getPoiBt{
16 | background-color: #9DC45F;
17 | border-radius: 5px;
18 | -webkit-border-radius: 5px;
19 | -moz-border-border-radius: 5px;
20 | border: none;
21 | padding: 10px 25px 10px 25px;
22 | color: #FFF;
23 | text-shadow: 1px 1px 1px #949494;
24 | }
--------------------------------------------------------------------------------
/main/static/css/map/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/css/map/font/iconfont.eot
--------------------------------------------------------------------------------
/main/static/css/map/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/css/map/font/iconfont.ttf
--------------------------------------------------------------------------------
/main/static/css/map/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/css/map/font/iconfont.woff
--------------------------------------------------------------------------------
/main/static/css/map/font/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/css/map/font/iconfont.woff2
--------------------------------------------------------------------------------
/main/static/css/map/leaflet.contextmenu.css:
--------------------------------------------------------------------------------
1 | .leaflet-contextmenu {
2 | display: none;
3 | box-shadow: 0 1px 7px rgba(0,0,0,0.4);
4 | -webkit-border-radius: 4px;
5 | border-radius: 4px;
6 | padding: 4px 0;
7 | background-color:rgba(23, 102, 144, 0.7);/*rgba(23,172,254,0.7); /* #fff; */
8 | cursor: default;
9 | -webkit-user-select: none;
10 | -moz-user-select: none;
11 | user-select: none;
12 | border: 2px solid #47caff;
13 | }
14 |
15 | .leaflet-contextmenu a.leaflet-contextmenu-item {
16 | display: block;
17 | color:#d9d9d9;/* #222;*/
18 | /* font-size: 12px; */
19 | line-height: 26px;
20 | text-decoration: none;
21 | padding: 0 12px;
22 | border-top: 1px solid transparent;
23 | border-bottom: 1px solid transparent;
24 | cursor: default;
25 | outline: none;
26 | font-size:14px;
27 | text-align: left;
28 | }
29 |
30 | .leaflet-contextmenu a.leaflet-contextmenu-item-disabled {
31 | opacity: 0.5;
32 | }
33 |
34 | .leaflet-contextmenu a.leaflet-contextmenu-item.over {
35 | /* background-color:rgba(112, 224, 249, 0.89);#f4f4f4;*/
36 | /* background-color:rgba(23,172,254,1); */
37 | /* text-shadow: #337ab7 0px 1px; */
38 | border-top: 1px solid transparent;
39 | border-bottom: 1px solid transparent;
40 | color:#fff;
41 | font-weight:bold;
42 | }
43 |
44 | .leaflet-contextmenu a.leaflet-contextmenu-item-disabled.over {
45 | background-color: inherit;
46 | border-top: 1px solid transparent;
47 | border-bottom: 1px solid transparent;
48 | }
49 |
50 | .leaflet-contextmenu-icon {
51 | margin: 2px 8px 0 0;
52 | width: 16px;
53 | height: 16px;
54 | float: left;
55 | border: 0;
56 | }
57 |
58 | .leaflet-contextmenu-separator {
59 | border-bottom: 1px solid #ccc;
60 | margin: 5px 0;
61 | }
62 | .btn_prop float_l{
63 | color:"black";
64 | }
--------------------------------------------------------------------------------
/main/static/css/map/map.css:
--------------------------------------------------------------------------------
1 | #mapcontainer{
2 | /* float: right; */
3 | /* z-index: 1; */
4 | /* background: #b0e0c1; */
5 | position: fixed;
6 | height: 100vh;
7 | width: 100vw;
8 | /* margin-left: 240px; */
9 | margin-top: 60px;
10 | }
11 | /* 工具栏 */
12 | .box_tool{position:absolute;height:54px;}
13 | .box_tool_inner{position:relative;height:41px;padding:6.5px;}
14 | .box_tool_container{height:37px;border:2px solid #47caff;background-color: rgba(23, 102, 144, 0.7);border-radius:6px;}
15 | .box_tool_container .btn_tool{line-height:37px;padding: 0 6px;height: 37px;display: block;float: left;}
16 | .box_tool_container .btn_tool .icon{color:#fff;font-size:20px;}
17 | .box_tool_container .btn_tool:hover .icon,.box_tool_container .active .icon,.box_search .btn:hover .icon{color:#47caff;}
18 | .box_tool_container .btn_close{border-left:1px dashed #47caff;}
19 | .box_tool_list{position:absolute;top:46px;right:100px;padding-bottom:10px;background-color:rgba(23, 102, 144, 0.7);border-radius: 0 0 12px 12px;border:2px solid #47caff;}
20 | .box_tool_list ul{}
21 | .box_tool_list ul li{line-height:24px;color:#eee;cursor:pointer;padding:0 8px;border-bottom: 1px solid rgba(23, 102, 144, 0.7);}
22 | .box_tool_list ul li:hover{color:#47caff;background-color:rgba(23, 102, 144, 0.9);}
23 | .box_tool_list a{cursor:pointer;}
24 |
25 | .coor{
26 | z-index: 1000;
27 | position: absolute;
28 | left:300px;
29 | }
30 | #attriFormContainer{
31 | height: 100vh;
32 | width: 300px;
33 | position: absolute;
34 | right: 0px;
35 | z-index: 1000;
36 | background: #0c658ac7;
37 | margin-top: 60px;
38 | display: none;
39 | }
40 | #attriForm{
41 | margin-top: 30px;
42 | margin-left: 10px;
43 | }
44 | .formApply{
45 | display: block;
46 | margin: 0 auto;
47 | }
48 | .evo-colorind{
49 | display: none!important;
50 | }
51 | #selectCompare{
52 | z-index: 1000;
53 | position: absolute;
54 | left: 600px;
55 | top: 100px;
56 | }
57 |
--------------------------------------------------------------------------------
/main/static/css/map/upload.css:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | background: #50a3a2;
3 | background: -webkit-linear-gradient(top left, #50a3a2 0%, #53e3a6 100%);
4 | background: linear-gradient(to bottom right, #50a3a2 0%, #53e3a6 100%);
5 | opacity: 0.8;
6 | position: absolute;
7 | top: 50%;
8 | left: 0;
9 | width: 100%;
10 | height: 400px;
11 | margin-top: -200px;
12 | overflow: hidden;
13 |
14 | }
15 | .publishDiv {
16 | max-width: 600px;
17 | margin: 100 auto;
18 | padding: 80px 0;
19 | height: 400px;
20 | text-align: center;
21 | }
22 | .publishDiv h1 {
23 | margin: 100 auto;
24 | font-size: 20px;
25 | -webkit-transition-duration: 1s;
26 | transition-duration: 1s;
27 | -webkit-transition-timing-function: ease-in-put;
28 | transition-timing-function: ease-in-put;
29 | font-weight: 200;
30 | }
31 | /* form {
32 | padding: 20px 0;
33 | position: relative;
34 | z-index: 2;
35 | }
36 | form input {
37 | -webkit-appearance: none;
38 | -moz-appearance: none;
39 | appearance: none;
40 | outline: 0;
41 | border: 1px solid rgba(255, 255, 255, 0.4);
42 | background-color: rgba(255, 255, 255, 0.2);
43 | width: 250px;
44 | border-radius: 3px;
45 | padding: 10px 15px;
46 | margin: 0 auto 10px auto;
47 | display: block;
48 | text-align: center;
49 | font-size: 18px;
50 | color: white;
51 | -webkit-transition-duration: 0.25s;
52 | transition-duration: 0.25s;
53 | font-weight: 300;
54 | }
55 | form input:hover {
56 | background-color: rgba(255, 255, 255, 0.4);
57 | }
58 | form input:focus {
59 | background-color: white;
60 | width: 300px;
61 | color: #53e3a6;
62 | }
63 | form button {
64 | -webkit-appearance: none;
65 | -moz-appearance: none;
66 | appearance: none;
67 | outline: 0;
68 | background-color: white;
69 | border: 0;
70 | padding: 10px 15px;
71 | color: #53e3a6;
72 | border-radius: 3px;
73 | width: 250px;
74 | cursor: pointer;
75 | font-size: 18px;
76 | -webkit-transition-duration: 0.25s;
77 | transition-duration: 0.25s;
78 | }
79 | form button:hover {
80 | background-color: #f5f7f9;
81 | }
82 | */
83 | body {
84 | font-family: 'Source Sans Pro', sans-serif;
85 | color: rgba(4, 71, 110, 0.863);
86 | font-weight: 300;
87 | }
--------------------------------------------------------------------------------
/main/static/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/main/static/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/main/static/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/main/static/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/main/static/font-awesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/font-awesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/main/static/font-awesome/less/animated.less:
--------------------------------------------------------------------------------
1 | // Animated Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .@{fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "animated.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
15 | .fa-icon-rotate(@degrees, @rotation) {
16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
17 | -webkit-transform: rotate(@degrees);
18 | -ms-transform: rotate(@degrees);
19 | transform: rotate(@degrees);
20 | }
21 |
22 | .fa-icon-flip(@horiz, @vert, @rotation) {
23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
24 | -webkit-transform: scale(@horiz, @vert);
25 | -ms-transform: scale(@horiz, @vert);
26 | transform: scale(@horiz, @vert);
27 | }
28 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/main/static/font-awesome/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
15 | @mixin fa-icon-rotate($degrees, $rotation) {
16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
17 | -webkit-transform: rotate($degrees);
18 | -ms-transform: rotate($degrees);
19 | transform: rotate($degrees);
20 | }
21 |
22 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
24 | -webkit-transform: scale($horiz, $vert);
25 | -ms-transform: scale($horiz, $vert);
26 | transform: scale($horiz, $vert);
27 | }
28 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/main/static/font-awesome/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/main/static/ico/apple-touch-icon-114-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/ico/apple-touch-icon-114-precomposed.png
--------------------------------------------------------------------------------
/main/static/ico/apple-touch-icon-144-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/ico/apple-touch-icon-144-precomposed.png
--------------------------------------------------------------------------------
/main/static/ico/apple-touch-icon-57-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/ico/apple-touch-icon-57-precomposed.png
--------------------------------------------------------------------------------
/main/static/ico/apple-touch-icon-72-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/ico/apple-touch-icon-72-precomposed.png
--------------------------------------------------------------------------------
/main/static/ico/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/ico/favicon.png
--------------------------------------------------------------------------------
/main/static/img/backgrounds/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/img/backgrounds/1.jpg
--------------------------------------------------------------------------------
/main/static/img/draw/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/img/draw/edit.png
--------------------------------------------------------------------------------
/main/static/img/draw/icon_tbs01_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/img/draw/icon_tbs01_03.png
--------------------------------------------------------------------------------
/main/static/img/draw/icon_tbs01_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/img/draw/icon_tbs01_04.png
--------------------------------------------------------------------------------
/main/static/img/draw/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/img/draw/line.png
--------------------------------------------------------------------------------
/main/static/img/touxiang.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/img/touxiang.png
--------------------------------------------------------------------------------
/main/static/index/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/index/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/main/static/index/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/index/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/main/static/index/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/index/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/main/static/index/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/index/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/main/static/index/font-awesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/index/font-awesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/animated.less:
--------------------------------------------------------------------------------
1 | // Animated Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .@{fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "animated.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
15 | .fa-icon-rotate(@degrees, @rotation) {
16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
17 | -webkit-transform: rotate(@degrees);
18 | -ms-transform: rotate(@degrees);
19 | transform: rotate(@degrees);
20 | }
21 |
22 | .fa-icon-flip(@horiz, @vert, @rotation) {
23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
24 | -webkit-transform: scale(@horiz, @vert);
25 | -ms-transform: scale(@horiz, @vert);
26 | transform: scale(@horiz, @vert);
27 | }
28 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
15 | @mixin fa-icon-rotate($degrees, $rotation) {
16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
17 | -webkit-transform: rotate($degrees);
18 | -ms-transform: rotate($degrees);
19 | transform: rotate($degrees);
20 | }
21 |
22 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
24 | -webkit-transform: scale($horiz, $vert);
25 | -ms-transform: scale($horiz, $vert);
26 | transform: scale($horiz, $vert);
27 | }
28 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/main/static/index/font-awesome/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/main/static/js/carbon.js:
--------------------------------------------------------------------------------
1 | //二级菜单折叠
2 | $(document).ready(function () {
3 | /**
4 | * Sidebar Dropdown
5 | */
6 | $('.nav-dropdown-toggle').on('click', function (e) {
7 | e.preventDefault();
8 | $(this).parent().toggleClass('open');
9 | });
10 |
11 | // open sub-menu when an item is active.
12 | $('ul.nav').find('a.active').parent().parent().parent().addClass('open');
13 |
14 | /**
15 | * Sidebar Toggle
16 | */
17 | $('.sidebar-toggle').on('click', function (e) {
18 | e.preventDefault();
19 | $('body').toggleClass('sidebar-hidden');
20 | });
21 |
22 | /**
23 | * Mobile Sidebar Toggle
24 | */
25 | $('.sidebar-mobile-toggle').on('click', function () {
26 | $('body').toggleClass('sidebar-mobile-show');
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/main/static/js/config.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/js/config.js
--------------------------------------------------------------------------------
/main/static/js/gaode/gaode.js:
--------------------------------------------------------------------------------
1 | $("#getPoiBt").unbind('click').bind('click',function(){
2 | $.ajax({
3 | url:"http://restapi.amap.com/v3/place/text",
4 | data:{
5 | "key":$("#key").val(),
6 | "keywords":$("#keywords").val(),
7 | "city":$("#city").val(),
8 | "offset":$("#offset").val(),
9 | 'children':'1',
10 | 'page':'1',
11 | 'extensions': 'all'
12 | },
13 | type:"POST",
14 | success:function(response){
15 | var pois = response['pois']
16 | var features=[]
17 | for(var i=0;i firstPage) { %}
2 |
3 |
4 | {% } else { %}
5 |
6 |
7 | {% } %}
8 |
9 | {{$i('voc.Page')}}
10 | {% if (totalPageCount > 1) { %}
11 |
12 | {% } else { %}
13 |
14 | {% } %}
15 | {{$i('voc.of')}} {{totalPageCount}}
16 |
17 |
18 |
19 | {% if (page < totalPageCount) { %}
20 |
21 |
22 | {% } else { %}
23 |
24 |
25 | {% } %}
26 |
27 | {{$i('voc.ResultsPerPage')}}
28 | {% if (totalRowsCount) { %}
29 |
34 | {% } else { %}
35 |
36 | {% } %}
37 |
38 |
39 | {% if (totalRowsCount) { %}
40 | {{$i('voc.Results')}} {{firstObjectNumber}} - {{Math.min(lastObjectNumber, totalRowsCount)}} {{$i('voc.of')}} {{totalRowsCount}}
41 | {% } else { %}
42 | 0 Results
43 | {% } %}
44 |
45 |
46 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/pagination/pagination-bar-filters.html:
--------------------------------------------------------------------------------
1 | {% if (allowSearch) { %}
2 |
3 | {% } %}
4 | {% if (advancedFiltersButton) { %}
5 |
6 | {% } %}
7 | {% if (filtersWizard) { %}
8 |
9 | {% } %}
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/pagination/pagination-bar-layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-base.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-empty-cell.html:
--------------------------------------------------------------------------------
1 | |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-empty-view.html:
--------------------------------------------------------------------------------
1 |
2 | {{$i("voc.NoResults")}}
3 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-error-view.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{message}}
4 |
5 |
6 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-gallery.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-head-cell.html:
--------------------------------------------------------------------------------
1 |
2 | {% if (name) { %}
3 |
4 | {{displayName}}
5 |
6 | {% if (obj.resizable) { %}
7 |
8 | {% } %}
9 |
10 | {% } %}
11 | |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-preloader.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/lodash/table/king-table-table.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/ready.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function () {
2 | //set theme roller
3 | $("#theme").on("change", function () {
4 | var v = $(this).val();
5 | $("body").attr("class", v);
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/README.txt:
--------------------------------------------------------------------------------
1 | ### README ###
2 | This directory contains base functions, *mostly* business logic organized using
3 | R.js, and using Lodash library.
4 |
5 | These functions are meant to be independent from any other library or web framework.
6 |
7 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/components/array-group.js:
--------------------------------------------------------------------------------
1 | R("kt-array-group", [], function () {
2 |
3 | //use this object to extend prototypes of objects that should offer
4 | //functions to group arrays
5 |
6 | return {
7 | // Returns an array of object with grouped items, in alphabetical order for the group names
8 | group: function (collection, options) {
9 |
10 | var defaults = {
11 | groupGetter: null, //permits to specify a function which returns the group value of each item (if provided, groupPropertyName is ignored)
12 | groupPropertyName: 'group', //permits to specify which property should be used to group items (ignored if groupGetter is provided)
13 | sortGroups: true //permits to specify if returned objects should be ordered by group name
14 | };
15 |
16 | var o = $.extend({}, defaults, options), result = [], foundGroups = {};
17 |
18 | for (var i = 0, l = collection.length; i < l; i++) {
19 |
20 | var item = collection[i], group;
21 |
22 | if (o.groupGetter) {
23 | group = o.groupGetter(item);
24 | } else {
25 | //default
26 | group = item[o.groupPropertyName];
27 | }
28 |
29 | if (!group) {
30 | group = 'Ungrouped';
31 | }
32 |
33 | if (foundGroups.hasOwnProperty(group)) {
34 |
35 | result[foundGroups[group]].items.push(item);
36 |
37 | } else {
38 | foundGroups[group] = result.push({
39 | name: group,
40 | items: [item]
41 | }) - 1;
42 | }
43 | }
44 |
45 | if (o.sortGroups) {
46 | //order groups by alphabetical ascending order
47 | //this.sortByProperty(result, 'name', 'asc');
48 | }
49 |
50 | return result;
51 | }
52 | };
53 |
54 | });
55 |
56 |
57 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/components/extend.js:
--------------------------------------------------------------------------------
1 | //
2 | // The super useful extend function, borrowed from the Backbone library.
3 | //
4 | R("kt-extend", [], function () {
5 |
6 | return function (protoProps, staticProps) {
7 | var parent = this;
8 | var child;
9 |
10 | // The constructor function for the new subclass is either defined by you
11 | // (the "constructor" property in your `extend` definition), or defaulted
12 | // by us to simply call the parent's constructor.
13 | if (protoProps && _.has(protoProps, 'constructor')) {
14 | child = protoProps.constructor;
15 | } else {
16 | child = function () { return parent.apply(this, arguments); };
17 | }
18 |
19 | // Add static properties to the constructor function, if supplied.
20 | _.extend(child, parent, staticProps);
21 |
22 | // Set the prototype chain to inherit from `parent`, without calling
23 | // `parent`'s constructor function.
24 | var Surrogate = function () { this.constructor = child; };
25 | Surrogate.prototype = parent.prototype;
26 | child.prototype = new Surrogate;
27 |
28 | // Add prototype properties (instance properties) to the subclass,
29 | // if supplied.
30 | if (protoProps) _.extend(child.prototype, protoProps);
31 |
32 | // Set a convenience property in case the parent's prototype is needed
33 | // later.
34 | child.__super__ = parent.prototype;
35 |
36 | return child;
37 | };
38 |
39 | });
40 |
41 |
42 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/components/reflection.js:
--------------------------------------------------------------------------------
1 | R("kt-reflection", [], function () {
2 |
3 | //static
4 |
5 | return {
6 | // gets value or values of a given object, from a name or namespace (example: 'dog.name')
7 | getPropertyValue: function (o, name) {
8 | var a = name.split('.'), x = o, p;
9 | while (p = a.shift()) {
10 | if (x.hasOwnProperty(p)) {
11 | x = x[p];
12 | }
13 | if (x instanceof Array) {
14 | break;
15 | }
16 | }
17 | if (x instanceof Array) {
18 | if (!a.length) {
19 | return x;
20 | }
21 | return this.getCollectionPropertiesValue(x, a.join('.'));
22 | }
23 | return x;
24 | },
25 |
26 | // gets properties values from a given collection
27 | getCollectionPropertiesValue: function (collection, name, includeEmptyValues) {
28 | if (!name) {
29 | return collection;
30 | }
31 | if (typeof includeEmptyValues != 'boolean') {
32 | includeEmptyValues = false;
33 | }
34 | var a = name.split('.'), values = [];
35 | for (var i = 0, l = collection.length; i < l; i++) {
36 | var o = collection[i];
37 |
38 | if (!o.hasOwnProperty(a[0])) {
39 | if (includeEmptyValues) {
40 | values.push(null);
41 | }
42 | continue;
43 | }
44 | if (o instanceof Array) {
45 | var foundColl = this.getCollectionPropertiesValue(o, name);
46 | if (includeEmptyValues || foundColl.length) {
47 | values.push(foundColl);
48 | }
49 | } else if (typeof o == 'object') {
50 | var foundVal = this.getPropertyValue(o, name);
51 | if (includeEmptyValues || this.validateValue(foundVal)) {
52 | values.push(foundVal);
53 | }
54 | } else {
55 | if (includeEmptyValues || this.validateValue(o)) {
56 | values.push(o);
57 | }
58 | }
59 | }
60 | return values;
61 | },
62 |
63 | // returns true if the object has a significant value, false otherwise
64 | validateValue: function (o) {
65 | if (!o) return false;
66 |
67 | if (o instanceof Array) {
68 | return !!o.length;
69 | }
70 |
71 | return true;
72 | }
73 | };
74 | });
75 |
76 |
77 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/components/regex.js:
--------------------------------------------------------------------------------
1 | //
2 | // regex utilities
3 | //
4 | R("kt-regex", [], function () {
5 |
6 | //use this object to extend prototypes of objects that should offers
7 | //functions for Regular Expressions
8 |
9 | return {
10 | // prepares a string to use it to declare a regular expression
11 | escapeCharsForRegex: function (s) {
12 | if (typeof s != 'string') {
13 | s += '';
14 | }
15 | //characters to escape in regular expressions
16 | return s.replace(/([\^\$\.\(\)\[\]\?\!\*\+\{\}\|\/\\])/g, '\\$1').replace(/\s/g, '\\s');
17 | },
18 |
19 | // gets a regular expression for a search pattern,
20 | // returns undefined if the regular expression is not valid
21 | getSearchPattern: function (s, options) {
22 | if (!s) return /.+/mgi;
23 | options = _.extend({ searchMode: 'fullstring' }, options || {});
24 | switch (options.searchMode.toLowerCase()) {
25 | case 'fullstring':
26 | //escape characters
27 | s = this.escapeCharsForRegex(s);
28 | try {
29 | return new RegExp('(' + s + ')', 'mgi');
30 | } catch (ex) {
31 | //this should not happen
32 | return;
33 | }
34 | break;
35 | default:
36 | throw 'invalid searchMode';
37 | }
38 | },
39 |
40 | //gets a regular expression for a search match pattern
41 | getMatchPattern: function (s) {
42 | if (!s) { return /.+/mg; }
43 | s = this.escapeCharsForRegex(s);
44 | try {
45 | return new RegExp(s, 'i');
46 | } catch (ex) {
47 | throw ex;
48 | }
49 | },
50 |
51 | // Returns true if the string has matches with a RegExp
52 | safeTest: function (rx, s) {
53 | if (!s) { return false; }
54 | return !!s.match(rx);
55 | }
56 | };
57 |
58 | });
59 |
60 |
61 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/data/file.js:
--------------------------------------------------------------------------------
1 | //
2 | // Files utilities
3 | //
4 | R("kt-file", [], function () {
5 |
6 | return {
7 |
8 | /**
9 | * Returns a value indicating whether the client side export is supported
10 | * by the client, or not.
11 | * @returns {*}
12 | */
13 | supportsCsExport: function () {
14 | return navigator.msSaveBlob || (function () {
15 | var link = document.createElement("a");
16 | return link.download !== undefined;
17 | })();
18 | },
19 |
20 | /**
21 | * Exports a csv file; prompting the user for download.
22 | * @param filename
23 | * @param lines
24 | */
25 | exportfile: function (filename, text, type) {
26 | var setAttribute = "setAttribute", msSaveBlob = "msSaveBlob";
27 | var blob = new Blob([text], { type: type });
28 | if (navigator[msSaveBlob]) { // IE 10+
29 | navigator[msSaveBlob](blob, filename);
30 | } else {
31 | var link = document.createElement("a");
32 | if (link.download !== undefined) { // feature detection
33 | // Browsers that support HTML5 download attribute
34 | var url = URL.createObjectURL(blob);
35 | link[setAttribute]("href", url);
36 | link[setAttribute]("download", filename);
37 | var style = {
38 | visibility: "hidden",
39 | position: "absolute",
40 | left: "-9999px"
41 | };
42 | for (var x in style)
43 | link.style[x] = style[x];
44 | //inject
45 | document.body.appendChild(link);
46 | link.click();
47 | document.body.removeChild(link);
48 | }
49 | }
50 | }
51 | };
52 |
53 | });
54 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/data/i18n.js:
--------------------------------------------------------------------------------
1 | //
2 | // Returns a common interface for internazionalization, supporting scoped translations.
3 | //
4 | R("kt-i18n", [], function () {
5 | //if I.js is defined; return it.
6 | //https://github.com/RobertoPrevato/I.js
7 | if (window["I"]) return window.I;
8 |
9 | //if i18n is defined; return it.
10 | //https://github.com/fnando/i18n-js
11 | if (window["I18n"]) return window.I18n;
12 |
13 | //throw exception
14 | throw "Missing implementation of i18n. Please refer to https://github.com/RobertoPrevato/jQuery-KingTable/wiki/Implementing-localization";
15 | });
16 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/data/query.js:
--------------------------------------------------------------------------------
1 | //
2 | // Utilities to work with the query string (location.search)
3 | //
4 | R("kt-query", [], function () {
5 |
6 | return {
7 |
8 | get: function (name) {
9 | return this.getAll()[name];
10 | },
11 |
12 | getAll: function () {
13 | var o = {}, i, l, x, splitter = /\?|\&/,
14 | s = location.search.split(splitter),
15 | m = location.hash.match(/(\?.+)$/);
16 | //support query string inside hash (normally it is ignored)
17 | if (m)
18 | s = s.concat(m[1].split(splitter));
19 | for (i = 0, l = s.length; i < l; i++) {
20 | x = s[i];
21 | if (!x) continue;
22 | x = x.split(/=/);
23 | o[x[0]] = decodeURIComponent(x[1]);
24 | }
25 | return o;
26 | },
27 |
28 | set: function (key, val) {
29 | //support call with object
30 | var invalidParam = 'invalid parameter';
31 | if (typeof key == "object") {
32 | if (key instanceof Array) throw invalidParam;
33 | for (var x in key)
34 | this.set(x, key[x]);
35 | return this;
36 | }
37 | if (!key) throw invalidParam;
38 | var hash = location.hash;
39 | if (!hash)
40 | return location.hash = "#/?" + key + "=" + val;
41 |
42 | var q = this.getAll();
43 | if (val === null || val === "")
44 | delete q[key]
45 | else
46 | q[key] = val;
47 | location.hash = this.getHashForParams(q);
48 | },
49 |
50 | getHashForParams: function (params) {
51 | var hash = location.hash, query = [], x;
52 | for (x in params)
53 | query.push(x + "=" + encodeURIComponent(params[x]));
54 |
55 | query = query.length ? "?" + query.join("&") : "";
56 | if (!hash)
57 | return "#/" + query;
58 | var ixq = hash.indexOf("?");
59 | if (ixq > -1)
60 | return hash.substring(0, ixq) + query;
61 | return hash + query;
62 | }
63 | };
64 |
65 | });
66 |
67 |
68 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/data/sanitizer.js:
--------------------------------------------------------------------------------
1 | //
2 | // Instantiable object to sanitize string values inside objects, to avoid JavaScript injection
3 | //
4 | R("kt-sanitizer", [], function () {
5 |
6 | var Sanitizer = function () { };
7 |
8 | _.extend(Sanitizer.prototype, {
9 |
10 | sanitize: function (o) {
11 | for (var x in o) {
12 | if (typeof o[x] == 'string') {
13 | o[x] = this.escape(o[x]);
14 | } else if (typeof o[x] == 'object') {
15 | if (o[x] instanceof Array) {
16 | for (var i = 0, l = o[x].length; i < l; i++) {
17 | o[x][i] = this.sanitize(o[x][i]);
18 | }
19 | } else {
20 | o[x] = this.sanitize(o[x]);
21 | }
22 | }
23 | }
24 | return o;
25 | },
26 |
27 | escape: function (s) {
28 | return s.replace(//g, ')');
29 | }
30 | });
31 |
32 | return Sanitizer;
33 | });
34 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/data/xml.js:
--------------------------------------------------------------------------------
1 | //
2 | // Xml utilities
3 | //
4 | R("kt-xml", [], function () {
5 |
6 | return {
7 |
8 | normal: function (xml) {
9 | return "" + xml.replace(/\sxmlns="http:\/\/www\.w3\.org\/\d+\/xhtml"/, "");
10 | },
11 |
12 | pretty: function (xml, indentation) {
13 | xml = this.normal(xml);
14 | if (typeof indentation != "number")
15 | indentation = 2;
16 | var reg = /(>)(<)(\/*)/g, a = [];
17 | xml = xml.replace(reg, "$1\r\n$2$3");
18 | var pad = 0, parts = xml.split('\r\n'), l = parts.length;
19 |
20 | for (var i = 0; i < l; i++) {
21 | var node = parts[i];
22 | var indent = 0;
23 | if (node.match(/.+<\/\w[^>]*>$/)) {
24 | indent = 0;
25 | } else if (node.match(/^<\/\w/)) {
26 | if (pad != 0) {
27 | pad -= 1;
28 | }
29 | } else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
30 | indent = 1;
31 | } else {
32 | indent = 0;
33 | }
34 | var padding = new Array(pad * indentation).join(" ");
35 | a.push(padding + node + "\r\n");
36 | pad += indent;
37 | }
38 | return a.join("");
39 | }
40 | };
41 | });
42 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/menus/menu-builder.js:
--------------------------------------------------------------------------------
1 | //
2 | // Function to build menus, given a schema
3 | //
4 | R("kt-menu-builder", [], function () {
5 |
6 | var map = {
7 | "css": "class"
8 | };
9 |
10 | function attr(obj) {
11 | if (!obj || !obj.attr) return "";
12 | var a = [], sep = "\"", attr = obj.attr;
13 | for (var x in attr)
14 | a.push([map[x] ? map[x] : x, "=", sep, attr[x], sep].join(""));
15 | return a.join(" ");
16 | };
17 |
18 | var menuBuilder = function (menus) {
19 | if (!menus) throw "missing menus";
20 | if (_.isPlainObject(menus)) return menuBuilder([menus]);
21 | if (!menus instanceof Array || !menus.length) throw "missing menus";
22 | //normalize schema, if needed
23 | var first = menus[0];
24 | if (!first.items && first.menu) {
25 | menus = [{ items: menus }];
26 | }
27 | var a = "", caret = "";
28 | _.each(menus, function (menu) {
29 | var id = menu.id;
30 | a += "";
71 | });
72 |
73 | return a;
74 | };
75 |
76 | return menuBuilder;
77 | });
78 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/shared/menus/menu.js:
--------------------------------------------------------------------------------
1 | //
2 | // Proxy module for menus modules.
3 | //
4 | R("kt-menu", ["kt-menu-builder", "kt-menu-functions"], function (MenuBuilder, MenuFunctions) {
5 | return {
6 | builder: MenuBuilder,
7 | functions: MenuFunctions
8 | };
9 | });
10 |
--------------------------------------------------------------------------------
/main/static/js/kingtable/signature.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery-KingTable.
3 | * https://github.com/RobertoPrevato/jQuery-KingTable
4 | *
5 | * Copyright 2017, Roberto Prevato
6 | * https://robertoprevato.github.io
7 | *
8 | * Licensed under the MIT license:
9 | * http://www.opensource.org/licenses/MIT
10 | */
11 |
--------------------------------------------------------------------------------
/main/static/js/leaflet/draw/leaflet-touch-helper.js:
--------------------------------------------------------------------------------
1 | !(function() {
2 | L.Path.TouchHelper = L[L.Layer ? 'Layer' : 'Class'].extend({
3 | options: {
4 | extraWeight: 25
5 | },
6 |
7 | initialize: function(path, options) {
8 | L.setOptions(this, options);
9 | this._sourceLayer = path;
10 | var touchPathOptions = L.extend({}, path.options, { opacity: 0, fillOpacity: 0 });
11 | touchPathOptions.weight += this.options.extraWeight;
12 |
13 | if (path.eachLayer) {
14 | this._layer = L.layerGroup();
15 | path.eachLayer(function(l) {
16 | if (l.eachLayer || l.getLatLngs) {
17 | this._layer.addLayer(L.path.touchHelper(l, L.extend({}, options, {parentLayer: this._layer})));
18 | }
19 | }, this);
20 | } else if (path.getLatLngs) {
21 | this._layer = new path.constructor(path.getLatLngs(), touchPathOptions);
22 | } else {
23 | throw new Error('Unknown layer type, neither a group or a path');
24 | }
25 | //Added by wangshilian 2018/07/06 使父层的右键可以与此层关联
26 | this._layer.options.contextmenu = false;
27 | this._layer.options.contextmenuItems = [];
28 | console.log(this._layer);
29 | this._layer.on('click dblclick mouseover mouseout mousemove contextmenu', function(e) {
30 | console.log(e.type);
31 | (this.options.parentLayer ? this.options.parentLayer : path).fire(e.type, e);
32 | }, this);
33 | },
34 |
35 | onAdd: function(map) {
36 | this._map = map;
37 | this._layer.addTo(map);
38 | if (!this.options.parentLayer) {
39 | map.on('layerremove', this._onLayerRemoved, this);
40 | }
41 | },
42 |
43 | onRemove: function(map) {
44 | map.removeLayer(this._layer);
45 | map.off('layerremove', this._onLayerRemoved, this);
46 | this._map = null;
47 | },
48 |
49 | addTo: function(map) {
50 | map.addLayer(this);
51 | },
52 |
53 | _onLayerRemoved: function(e) {
54 | if (e.layer === this._sourceLayer) {
55 | this._map.removeLayer(this);
56 | }
57 | },
58 | });
59 |
60 | L.path = L.path || {};
61 |
62 | L.path.touchHelper = function(path, options) {
63 | return new L.Path.TouchHelper(path, options);
64 | }
65 | })();
66 |
--------------------------------------------------------------------------------
/main/static/js/map/mapCompare.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | $.contextMenu({
3 | selector: '.context-menu-compare',
4 | callback: function(key, options) {
5 | switch(key){
6 | case "compare":
7 | $("#selectCompare").toggle();
8 | break;
9 | }
10 | },
11 | items: {
12 | "compare": {name: "数据对比", icon: "edit"}
13 | }
14 | });
15 |
16 | })
17 | //提交影像选择结果
18 | function selectCommited(){
19 | var htmlIndex=[];
20 | $("#selectCompare").hide();
21 | $("#masking").hide();
22 |
23 | if(selectImgCount!=2){
24 | alert("请选择两个影像进行比对");
25 | }
26 | else{
27 |
28 | $("#tbody>tr").each(function(index){
29 | if($(this).find("td:eq(0)>input:checkbox").is(":checked") == true){
30 | htmlIndex.push(index);
31 | }
32 | });
33 |
34 | var compareWindow=document.getElementById("imageCompareFrame");
35 | document.getElementById('imageCompareFrame').contentWindow.location.reload(true);
36 | compareWindow.src="../imageCompare/imageCompareRonghai.html#"+htmlIndex[0]+";"+htmlIndex[1];
37 |
38 | $("#imageCompareWindow").show();
39 | }
40 | };
41 | var selectImgCount=1;
--------------------------------------------------------------------------------
/main/static/js/map/mapreview.js:
--------------------------------------------------------------------------------
1 | var html2Escape=function (sHtml) {
2 | return sHtml.replace(/amp;/g,"")
3 | }
4 | var map=L.map('mapcontainer',{zoomControl:false}).setView([bounds[1],bounds[0]],20);
5 | var southWest = L.latLng(bounds[1],bounds[0])
6 | var northEast = L.latLng(bounds[3],bounds[2])
7 | bounds = L.latLngBounds(southWest, northEast)
8 | map.setMaxBounds(bounds)
9 | map.on('mousemove', function(e){
10 | $('#currMouseLng').html((e.latlng.lng).toFixed(6));
11 | $('#currMouseLat').html((e.latlng.lat).toFixed(6));
12 | })
13 | map.on('zoomend',function(e){
14 | $('#currZoom').html(map.getZoom());
15 | })
16 | L.control.zoom({zoomInTitle: '放大', zoomOutTitle: '缩小', position: 'bottomright'}).addTo(map);
17 | L.control.scale({imperial: false}).addTo(map);
18 |
19 | var satellite = L.tileLayer.chinaProvider('GaoDe.Satellite.Map', {
20 | maxZoom: 18,
21 | minZoom: 4
22 | });
23 | var annotion = L.tileLayer.chinaProvider('GaoDe.Satellite.Annotion', {
24 | maxZoom: 18,
25 | minZoom: 4
26 | });
27 | var staLayer = L.layerGroup([satellite, annotion]);
28 | var image = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
29 | maxZoom: 18,
30 | minZoom: 4
31 | });
32 | var imgLayer = L.layerGroup([image]).addTo(map);
33 | serverUrl=html2Escape(serverUrl);
34 | var serverlayer=L.tileLayer(serverUrl,{maxZoom:25}).addTo(map);
35 | var baseMaps = {
36 | '街道图': imgLayer,
37 | '卫星图': staLayer
38 | };
39 | var overlayMaps = {
40 | '地图服务':serverlayer
41 | };
42 | L.control.layers(baseMaps, overlayMaps,{collapsed:false}).addTo(map);
--------------------------------------------------------------------------------
/main/static/js/map/vectoreview.js:
--------------------------------------------------------------------------------
1 | var html2Escape=function (deh) {
2 | var reg = new RegExp( '"' , "g" );
3 | return deh.replace( reg , "'" );
4 | }
5 | var map=L.map('mapcontainer',{zoomControl:false}).setView([37,120],20);
6 | var geoLayers=L.layerGroup();
7 | geoLayers.addTo(map);
8 | $.ajax({
9 | url:getGeos_url,
10 | type:'POST',
11 | data:{"role_id":role_id},
12 | success:function(response){
13 | response=JSON.parse(response)
14 | if(response.code==200){
15 |
16 | geoms=response.data
17 | var features=geoms;
18 | for(var index in features){
19 | var fea=features[index]
20 | fea=JSON.parse(JSON.stringify(fea))
21 | var style=fea['properties']['style'];
22 | style=style?style:{color:'blue'}
23 | if(fea['properties']['uid']==uid){
24 | style={color:'red'}
25 | }
26 | var geoLayer=L.geoJson(fea['geometry'],style).bindPopup("名称:"+fea['properties']['name']+""+"创建时间:"+fea['properties']['create_time']);
27 | geoLayers.addLayer(geoLayer);
28 | if(fea['properties']['uid']==uid){
29 | map.fitBounds(geoLayer.getBounds());
30 | }
31 | }
32 | }
33 | }
34 | });
35 |
36 | map.on('mousemove', function(e){
37 | $('#currMouseLng').html((e.latlng.lng).toFixed(6));
38 | $('#currMouseLat').html((e.latlng.lat).toFixed(6));
39 | })
40 | map.on('zoomend',function(e){
41 | $('#currZoom').html(map.getZoom());
42 | })
43 | L.control.zoom({zoomInTitle: '放大', zoomOutTitle: '缩小', position: 'bottomright'}).addTo(map);
44 | L.control.scale({imperial: false}).addTo(map);
45 |
46 | var satellite = L.tileLayer.chinaProvider('GaoDe.Satellite.Map', {
47 | maxZoom: 18,
48 | minZoom: 4
49 | });
50 | var annotion = L.tileLayer.chinaProvider('GaoDe.Satellite.Annotion', {
51 | maxZoom: 18,
52 | minZoom: 4
53 | });
54 | var staLayer = L.layerGroup([satellite, annotion]);
55 | var image = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
56 | maxZoom: 18,
57 | minZoom: 4
58 | });
59 | var imgLayer = L.layerGroup([image]).addTo(map);
60 |
61 | var baseMaps = {
62 | '街道图': imgLayer,
63 | '卫星图': staLayer
64 | };
65 | var overLayers={
66 | "矢量数据":geoLayers
67 | }
68 | L.control.layers(baseMaps, overLayers,{collapsed:false}).addTo(map);
--------------------------------------------------------------------------------
/main/static/js/placeholder.js:
--------------------------------------------------------------------------------
1 |
2 | $(document).ready(function(){
3 |
4 | $(".form-username").val("Username...");
5 | $(".form-password").val("Password...");
6 |
7 | });
--------------------------------------------------------------------------------
/main/static/js/script.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | function render_time() {
3 | return moment($(this).data('timestamp')).format('lll')
4 | }
5 | $('[data-toggle="tooltip"]').tooltip(
6 | {title: render_time}
7 | );
8 | });
9 |
--------------------------------------------------------------------------------
/main/static/js/scripts.js:
--------------------------------------------------------------------------------
1 |
2 | jQuery(document).ready(function() {
3 |
4 | /*
5 | Fullscreen background
6 | */
7 | $.backstretch("../static/img/backgrounds/1.jpg");
8 |
9 | /*
10 | Form validation
11 | */
12 | $('.login-form input[type="text"], .login-form input[type="password"], .login-form textarea').on('focus', function() {
13 | $(this).removeClass('input-error');
14 | });
15 |
16 | $('.login-form').on('submit', function(e) {
17 |
18 | $(this).find('input[type="text"], input[type="password"], textarea').each(function(){
19 | if( $(this).val() == "" ) {
20 | e.preventDefault();
21 | $(this).addClass('input-error');
22 | }
23 | else {
24 | $(this).removeClass('input-error');
25 | }
26 | });
27 |
28 | });
29 |
30 |
31 | });
32 |
--------------------------------------------------------------------------------
/main/static/js/task.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/static/js/task.js
--------------------------------------------------------------------------------
/main/static/js/utils.js:
--------------------------------------------------------------------------------
1 | var Utils={
2 | genUID:function(length){
3 | return Number(Math.random().toString().substr(3,length) + Date.now()).toString(36);
4 | },
5 | Trim:function(str){
6 | return str.replace(/(^\s*)|(\s*$)/g, "");
7 | },
8 | _attriDic:{
9 | "name":"名称"
10 | },//记录属性代号和真正名称的对应关系
11 | //根据feature的属性信息动态组织弹出的内容
12 | setAttributes:function(feature){
13 | var content="";
14 | if(feature.properties){
15 | for(var key in feature.properties){
16 | if(key!="style"&&this._attriDic[key]){
17 | content=content+this._attriDic[key]+":"+feature.properties[key]+"";
18 | }
19 | }
20 | }
21 | return content;
22 | }
23 | }
--------------------------------------------------------------------------------
/main/table.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | from flask_table import Table, Col
3 | # Declare your table
4 | class RecycleTable(Table):
5 | name = Col('名称')
6 | description = Col('操作')
7 |
8 | # Get some objects
9 | class RecycleItem(object):
10 | def __init__(self, name, description):
11 | self.name = name
12 | self.description=description
13 |
--------------------------------------------------------------------------------
/main/templates/admin/edit_mode.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends 'admin/master.html' %}
3 | {% include "security/_messages.html" %}
4 |
5 | {% block body %}
6 |
21 |
22 | {% endblock %}
23 |
24 |
--------------------------------------------------------------------------------
/main/templates/admin/files/custom_file_list.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/file/list.html' %}
2 | {% block body %}
3 | {{ admin_view.name }}
{{ admin_view.doc()}}
4 |
5 | {{super() }}
6 |
7 | {% endblock %}
8 | {% block model_menu_bar %}
9 | {{ super() }}
10 | {% endblock %}
11 |
--------------------------------------------------------------------------------
/main/templates/admin/models/custom_create.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/create.html' %}
2 | {% block body %}
3 | {{ admin_view.name }} ({{ admin_view.doc()}})
4 |
5 | {{super() }}
6 | {% endblock %}
7 |
8 |
--------------------------------------------------------------------------------
/main/templates/admin/models/custom_details.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/details.html' %}
2 |
3 | {% block head %}
4 | {{ super() }}
5 | {{ lib.form_css() }}
6 | {% endblock %}
7 |
8 | {% block details_search %}
9 | {% endblock %}
10 |
11 | {% block navlinks %}
12 | {{ admin_view.name }}
#{{ request.args.get('id') }} {{ admin_view.doc()}}
13 | {{ super() }}
14 | {% endblock %}
15 |
16 | {% block details_table %}
17 |
18 | {% call lib.form_tag(form) %}
19 |
32 | {% endcall %}
33 | {% endblock %}
34 |
35 | {% block tail %}
36 | {{ super() }}
37 | {{ lib.form_js() }}
38 |
45 | {% endblock %}
--------------------------------------------------------------------------------
/main/templates/admin/models/custom_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/edit.html' %}
2 | {% block body %}
3 | {{ admin_view.name }}
#{{ request.args.get('id') }} {{ admin_view.doc()}}
4 | {{super() }}
5 | {% endblock %}
6 |
7 |
--------------------------------------------------------------------------------
/main/templates/admin/models/custom_list.html:
--------------------------------------------------------------------------------
1 | {% extends 'admin/model/list.html' %}
2 | {% block body %}
3 | {{ admin_view.name }}
{{ admin_view.doc()}}
4 |
5 | {{super() }}
6 |
7 | {% endblock %}
8 | {% block model_menu_bar %}
9 | {{ super() }}
10 | {% endblock %}
11 |
--------------------------------------------------------------------------------
/main/templates/admin/new_file.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends 'base.html' %}
3 | {% block other %}
4 | {{ dropzone.load_css() }}
5 | {{ dropzone.style('border: 2px dashed #0087F7; margin: 10%; min-height: 400px;') }}
6 | {% endblock %}
7 | {% block content %}
8 | {{ dropzone.create(action='new_file') }}
9 | {{ dropzone.load_js() }}
10 | {{ dropzone.config() }}
11 | {% endblock %}
12 |
13 |
14 |
--------------------------------------------------------------------------------
/main/templates/admin/new_project.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}新建项目{% endblock %}
5 |
6 | {% block content %}
7 |
10 |
11 |
12 | {{ render_form(form) }}
13 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/main/templates/admin/new_shp.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends 'indexbase.html' %}
3 | {% from 'bootstrap/form.html' import render_form %}
4 | {% block otherscripts %}
5 | {{ dropzone.load_css() }}
6 | {{ dropzone.style('border: 2px dashed #0087F7; margin: 10%; min-height: 400px;left: 300px;position: absolute;width: 500px;') }}
7 |
30 |
60 | {% endblock %}
61 | {% block title %}导入矢量数据{% endblock %}
62 | {% block content %}
63 |
64 |
65 | {{ dropzone.create('vectorImport') }}
66 | {{ dropzone.load_js() }}
67 | {{ dropzone.config() }}
68 |
69 |
70 |
71 |
72 |
80 | {% endblock %}
81 |
82 |
83 |
--------------------------------------------------------------------------------
/main/templates/admin/new_task.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}新建任务成果{% endblock %}
5 |
6 | {% block content %}
7 |
10 |
11 | {{ render_form(form) }}
12 | {% block upload %}
13 | {% endblock %}
14 | {% endblock %}
15 |
16 | {% block scripts %}
17 | {{ super() }}
18 | {% endblock %}
19 |
--------------------------------------------------------------------------------
/main/templates/admin/new_tasktemplate.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}新建成果模版{% endblock %}
5 |
6 | {% block content %}
7 |
10 |
11 |
12 | {{ render_form(form) }}
13 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/main/templates/admin/settings.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}Settings{% endblock %}
5 |
6 | {% block content %}
7 |
10 | {{ render_form(form) }}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/main/templates/auth/login.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}登录{% endblock %}
5 |
6 | {% block content %}
7 |
8 |
11 |
12 | {{ render_form(form, extra_classes='col-6') }}
13 |
14 |
15 | {% endblock %}
16 |
17 | {% block footer %}{% endblock %}
18 |
--------------------------------------------------------------------------------
/main/templates/blog/_fileupload.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
上传进度:
8 |
9 |
10 | 0% Complete
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/main/templates/blog/_search.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/main/templates/blog/_sidebar.html:
--------------------------------------------------------------------------------
1 | {% if projects %}
2 |
15 | {% endif %}
16 |
--------------------------------------------------------------------------------
/main/templates/blog/_tasks.html:
--------------------------------------------------------------------------------
1 | {% if tasks %}
2 | {% for task in tasks %}
3 |
4 | {{ task.name|striptags|truncate }}批次{{ task.batch|striptags|truncate }}
5 |
6 | {{ task.start_time|striptags|truncate }}
7 |
8 | 查看详情
9 |
10 |
11 | {% if not loop.last %}
12 |
13 | {% endif %}
14 | {% endfor %}
15 | {% else %}
16 |
17 |
暂无成果
18 | {% if current_user.is_authenticated %}
19 |
立刻创建
20 | {% endif %}
21 |
22 | {% endif %}
--------------------------------------------------------------------------------
/main/templates/blog/index.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% from 'bootstrap/pagination.html' import render_pager %}
3 |
4 | {% block title %}主页{% endblock %}
5 |
6 | {% block content %}
7 |
8 | {% endblock %}
9 |
--------------------------------------------------------------------------------
/main/templates/blog/message.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block content %}
5 |
6 |
7 |
8 | {{ render_form(form, action=request.full_path) }}
9 |
10 | {{ messages|length }} messages
11 |
12 | ↓
13 |
14 |
15 |
32 | {% endblock %}
33 | {% block otherscripts %}
34 |
84 | {% endblock %}
85 |
--------------------------------------------------------------------------------
/main/templates/charts/chart.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}图表{% endblock %}
5 | {% block content %}
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | {% endblock %}
60 | {% block otherscripts %}
61 |
62 |
63 |
64 |
65 |
66 |
67 | {% endblock %}
68 |
--------------------------------------------------------------------------------
/main/templates/log/loglist.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 | {% block title %}日志列表{% endblock %}
4 | {% block content %}
5 |
18 |
19 |
20 |
21 |
22 |
25 |
26 |
27 | {% for log in logs %}
28 |
38 | {% endfor %}
39 |
40 |
41 |
42 |
43 |
44 |
45 |
56 |
57 |
58 | {{content}}
59 |
60 |
61 |
62 |
63 |
64 | {% endblock %}
--------------------------------------------------------------------------------
/main/templates/map/_mapCompare.html:
--------------------------------------------------------------------------------
1 |
2 |
选择对比影像
3 |
4 | {{ render_form(form) }}
5 |
--------------------------------------------------------------------------------
/main/templates/map/_mapCompare2.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/main/templates/map/getpoi.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% block title %}高德poi抓取{% endblock %}
3 | {% block content %}
4 |
5 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
23 | {% if content %}
24 | {{content}}
25 | {% endif %}
26 |
27 |
28 |
29 | {% endblock %}
30 | {% block otherscripts %}
31 |
32 |
33 | {% endblock %}
34 |
--------------------------------------------------------------------------------
/main/templates/map/upload.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}影像上传{% endblock %}
5 | {% block content %}
6 |
7 | 地图服务数据发布
8 |
9 |
10 | {{ render_form(form) }}
11 |
12 | {% endblock %}
13 |
14 | {% block otherscripts %}
15 | {{ super() }}
16 |
17 | {% endblock %}
--------------------------------------------------------------------------------
/main/templates/map/vectoreview.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% from 'bootstrap/form.html' import render_form %}
3 |
4 | {% block title %}矢量数据预览{% endblock %}
5 | {% block content %}
6 |
10 | {% if role_id !="" %}
11 |
15 | {% endif %}
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | {% endblock %}
31 | {% block otherscripts %}
32 |
33 |
34 |
35 | {% endblock %}
36 |
--------------------------------------------------------------------------------
/main/templates/security/_macros.html:
--------------------------------------------------------------------------------
1 | {% macro render_field_with_errors(field) %}
2 |
3 | {{ field.label }} {{ field(**kwargs)|safe }}
4 | {% if field.errors %}
5 |
6 | {% for error in field.errors %}
7 | - {{ error }}
8 | {% endfor %}
9 |
10 | {% endif %}
11 |
12 | {% endmacro %}
13 |
14 | {% macro render_field(field) %}
15 | {{ field(**kwargs)|safe }}
16 | {% endmacro %}
--------------------------------------------------------------------------------
/main/templates/security/_menu.html:
--------------------------------------------------------------------------------
1 |
2 | {% if security.registerable or security.recoverable or security.confirmabled %}
3 | Menu
4 |
5 | - Login
6 | {% if security.registerable %}
7 | - Register
8 | {% endif %}
9 | {% if security.recoverable %}
10 | - Forgot password
11 | {% endif %}
12 | {% if security.confirmable %}
13 | - Confirm account
14 | {% endif %}
15 |
16 | {% endif %}
17 |
--------------------------------------------------------------------------------
/main/templates/security/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Login
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {% block content %}
17 | {% endblock %}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/main/templates/security/login_user.html:
--------------------------------------------------------------------------------
1 | {% extends "security/base.html" %}
2 | {% from "security/_macros.html" import render_field_with_errors, render_field %}
3 | {% include "security/_messages.html" %}
4 |
5 | {% block content %}
6 |
7 |
8 |
9 | xAdmin Login
10 |
11 |
54 |
55 |
56 | {% endblock %}
57 |
58 |
--------------------------------------------------------------------------------
/main/templates/tables/recyclebin.html:
--------------------------------------------------------------------------------
1 | {% extends 'indexbase.html' %}
2 | {% import "bootstrap/wtf.html" as wtf %}
3 | {% block title %}回收站{% endblock %}
4 | {% block content %}
5 |
13 |
16 | {% endblock %}
17 | {% block otherscripts %}
18 |
19 |
20 |
21 |
50 | {% endblock %}
--------------------------------------------------------------------------------
/main/uploads/airline.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/uploads/airline.zip
--------------------------------------------------------------------------------
/main/uploads/kml.kml:
--------------------------------------------------------------------------------
1 | LineString1#428bca4null0.2119.82807759840193,36.49185440682525 119.20692515730765,36.23969905352452 119.76204156290228,35.93793701817038 118.98183766718265,35.88905908598247 118.79505274352607,36.33715736606351 118.88307843183047,36.55813187495458 119.32763820694741,36.69442070906229 120.05865610866535,36.685546795206015 120.30617878499424,36.65481663917259 120.46006880920457,36.31485995999374 119.9929780188925,35.768798342376826 119.6687203870616,35.65297260195302 119.19048050346134,35.64837994691656 118.78960976027473,35.782216775793124 118.48737007216782,36.093409193040245 118.4707873040157,36.46521898304452 118.47076804232692,36.637227307765386 118.39368558012407,36.755957251092596 118.07494331023788,36.82630620751527 117.78393718215617,36.751784847240245 117.6138030898554,36.641893758934515 117.58087396410227,36.425735545635405 117.58089834312433,36.204495399873466 117.62483219029504,36.13354004665588 117.72353802523432,36.1289476145775
--------------------------------------------------------------------------------
/main/uploads/kml2.kml:
--------------------------------------------------------------------------------
1 | LineString1#428bca4null0.2120.415332306394,36.179150279184974 120.33913614482238,36.16036258182756 120.48283496220598,36.12663133119212 120.32337140455873,36.136002136788335LineString1#428bca4null0.2120.28222498796497,36.18595348691003 120.25683340891847,36.129997006073125 120.24859166787934,36.113918308746165 120.24927958641534,36.1089273451598
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.cpg:
--------------------------------------------------------------------------------
1 | UTF-8
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.dbf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/uploads/vector/airline.zip/airline.dbf
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.prj:
--------------------------------------------------------------------------------
1 | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.sbn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/uploads/vector/airline.zip/airline.sbn
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.sbx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/uploads/vector/airline.zip/airline.sbx
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.shp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/uploads/vector/airline.zip/airline.shp
--------------------------------------------------------------------------------
/main/uploads/vector/airline.zip/airline.shx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/main/uploads/vector/airline.zip/airline.shx
--------------------------------------------------------------------------------
/module2/__init__.py:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | from flask import Flask
3 | from main import app
4 | app.config.from_pyfile('settings.py')
5 | from module2 import views
6 |
--------------------------------------------------------------------------------
/module2/views.py:
--------------------------------------------------------------------------------
1 | from flask import flash,render_template
2 | from module2 import app
3 | @app.route('/module2',methods=['GET','POST'])
4 | def module2():
5 | return ('module2 load success')
--------------------------------------------------------------------------------
/whooshee/user/MAIN_WRITELOCK:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/whooshee/user/MAIN_WRITELOCK
--------------------------------------------------------------------------------
/whooshee/user/MAIN_vf2imn514zh43rjo.seg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/whooshee/user/MAIN_vf2imn514zh43rjo.seg
--------------------------------------------------------------------------------
/whooshee/user/MAIN_yxd8m8sbefoe3hzn.seg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/whooshee/user/MAIN_yxd8m8sbefoe3hzn.seg
--------------------------------------------------------------------------------
/whooshee/user/MAIN_za2hptra87126ojj.seg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/whooshee/user/MAIN_za2hptra87126ojj.seg
--------------------------------------------------------------------------------
/whooshee/user/_MAIN_68.toc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XIANLONG71/gisflask/4fb2ae3bb4b7717b86a6fa816db2fc338ebd574e/whooshee/user/_MAIN_68.toc
--------------------------------------------------------------------------------
/xadmin/__init__.py:
--------------------------------------------------------------------------------
1 | from flask import Flask, current_app
2 | from flask import redirect
3 | from flask_sqlalchemy import SQLAlchemy
4 | from flask_security import RoleMixin, SQLAlchemyUserDatastore, UserMixin, utils
5 |
6 | from flask_xadmin.xadm_lib import xModelView, xFileAdmin
7 | from flask_xadmin.xadm_salib import Password
8 | from flask_xadmin import xadm_app, gen_xadmin
9 | from main import app
10 | from main.models import User,Role,Menu,Permission
11 | from main.extensions import db
12 | class myModelView(xModelView):
13 | column_exclude_list = 'password'
14 | # Customize your generic model -view
15 | pass
16 |
17 | class myFileAdmin(xFileAdmin):
18 | def doc(self):
19 | return "Various files"
20 | # Customize your File Admin model -view
21 | pass
22 |
23 | # Prepare view list
24 | views = [
25 | myModelView(model=User, session=db.session, category='Entities'),
26 | myModelView(model=Role, session=db.session, category='Entities'),
27 | myFileAdmin(base_path='.', name="Files", category='Files')]
28 |
29 | # Make an instance of flask-xadmin
30 | xadmin_obj = gen_xadmin(app = app, title = 'xAdmin', db=db, user_model=User, role_model=Role, views=views)
31 |
32 | @app.route('/xadmin/')
33 | def xadmin():
34 | return redirect('/xadmin/')
--------------------------------------------------------------------------------