├── .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 |
7 | {{ edit_mode_form.hidden_tag() }} 8 |
9 | {{ edit_mode_form.password(class="form-control", placeholder="password?") }} 10 |
11 | {% if edit_mode_form.password.errors %} 12 | {% for error in edit_mode_form.password.errors %} 13 | {{ error }} 14 | {% endfor %} 15 | {% endif %} 16 |
17 | {{ edit_mode_form.submit(class='btn btn-success') }} 18 |
19 | 20 |
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 |
20 | {{ lib.render_form_fields(form, form_opts=form_opts) }} 21 | 22 | {# 23 |
24 | 27 |
28 | #} 29 | 30 | {% block custom_field %}{% endblock %} 31 |
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 |

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 | 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 |
12 | {{ login_user_form.hidden_tag() }} 13 |
14 | email: 15 | {{ login_user_form.email(class="form-control") }} 16 | password: 17 | {{ login_user_form.password(class="form-control") }} 18 | 19 |
20 | {{ login_user_form.remember }} 21 | Remember me 22 |
23 | 24 |
25 | {% if login_user_form.password.errors %} 26 | 27 | {% for error in login_user_form.password.errors %} 28 | {{ error }} 29 | {% endfor %} 30 | 31 | {% endif %} 32 | 33 | {% if login_user_form.email.errors %} 34 | 35 | {% for error in login_user_form.email.errors %} 36 | {{ error }} 37 | {% endfor %} 38 | 39 | {% endif %} 40 | 41 |
42 | 43 | 44 | {{ render_field(login_user_form.next) }} 45 | 46 | {{ login_user_form.submit(class='btn btn-success') }} 47 | 48 |
49 | 50 | 51 | 52 | 53 |
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 | {{page}} 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 |
2 |
3 |
4 |
5 |
-------------------------------------------------------------------------------- /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 |
2 |
3 |
-------------------------------------------------------------------------------- /main/static/js/kingtable/lodash/table/king-table-table.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
-------------------------------------------------------------------------------- /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 += ""; 31 | 32 | _.each(menu.items, function (item) { 33 | if (item === null) return; 34 | var hasSubmenu = item.menu, 35 | type = item.type, 36 | href = item.href, 37 | name = item.name; 38 | a += "" : ">"); 39 | 40 | switch (type) { 41 | case "checkbox": 42 | var cid = _.uniqueId("mnck-"); 43 | var checked = item.checked ? " checked=\"checked\"" : ""; 44 | a += "" 45 | a += ""; 46 | a += ""; 47 | a += "" 48 | break; 49 | case "radio": 50 | if (!item.value) throw "missing value for radio"; 51 | var cid = _.uniqueId("mnrd-"); 52 | var checked = item.checked ? " checked=\"checked\"" : ""; 53 | a += ""; 54 | a += ""; 55 | break; 56 | default: 57 | if (href) { 58 | a += "" + name + (hasSubmenu ? caret : "") + ""; 59 | } else { 60 | a += "" + name + (hasSubmenu ? caret : "") + ""; 61 | } 62 | break; 63 | } 64 | 65 | if (hasSubmenu) 66 | a += menuBuilder([item.menu]); 67 | 68 | a += ""; 69 | }); 70 | 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 |
7 | {{ edit_mode_form.hidden_tag() }} 8 |
9 | {{ edit_mode_form.password(class="form-control", placeholder="password?") }} 10 |
11 | {% if edit_mode_form.password.errors %} 12 | {% for error in edit_mode_form.password.errors %} 13 | {{ error }} 14 | {% endfor %} 15 | {% endif %} 16 |
17 | {{ edit_mode_form.submit(class='btn btn-success') }} 18 |
19 | 20 |
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 |
20 | {{ lib.render_form_fields(form, form_opts=form_opts) }} 21 | 22 | {# 23 |
24 | 27 |
28 | #} 29 | 30 | {% block custom_field %}{% endblock %} 31 |
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 |
5 |
    6 |
    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 |
    3 |
    项目列表
    4 | 14 |
    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 |
    11 | 柱状图 12 |
    13 | 14 |
    15 | 16 |
    17 |
    18 |
    19 | 20 |
    21 |
    22 |
    23 | 折线图 24 |
    25 | 26 |
    27 | 28 |
    29 |
    30 |
    31 |
    32 | 33 |
    34 |
    35 |
    36 |
    37 | 雷达图 38 |
    39 | 40 |
    41 | 42 |
    43 |
    44 |
    45 | 46 |
    47 |
    48 |
    49 | 饼图 50 |
    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 |
    23 | 日志列表 24 |
    25 | 26 |
    27 | {% for log in logs %} 28 |
    29 | {{log}} 30 | 31 | 查看 32 | 33 | 34 | 37 |
    38 | {% endfor %} 39 |
    40 |
    41 |
    42 | 43 |
    44 |
    45 |
    46 | 日志内容 47 | 48 |
    49 | 50 | 51 | 52 | 53 | 54 |
    55 |
    56 | 57 |
    58 | {{content}} 59 |
    60 |
    61 |
    62 |
    63 |
    64 | {% endblock %} -------------------------------------------------------------------------------- /main/templates/map/_mapCompare.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 |
    6 |

    高德poi数据抓取

    7 | {{ form.csrf_token }} 8 | {{ form.key.label }} {{ form.key }} 9 | {{ form.keywords.label }} {{ form.keywords }} 10 | {{ form.city.label }} {{ form.city }} 11 | {{ form.offset.label }} {{ form.offset }} 12 | 13 |
    14 | 15 |
    16 |
    17 |
    18 |
    19 | poi的geojson格式 20 |
    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 |
    12 | {{ login_user_form.hidden_tag() }} 13 |
    14 | email: 15 | {{ login_user_form.email(class="form-control") }} 16 | password: 17 | {{ login_user_form.password(class="form-control") }} 18 | 19 |
    20 | {{ login_user_form.remember }} 21 | Remember me 22 |
    23 | 24 |
    25 | {% if login_user_form.password.errors %} 26 | 27 | {% for error in login_user_form.password.errors %} 28 | {{ error }} 29 | {% endfor %} 30 | 31 | {% endif %} 32 | 33 | {% if login_user_form.email.errors %} 34 | 35 | {% for error in login_user_form.email.errors %} 36 | {{ error }} 37 | {% endfor %} 38 | 39 | {% endif %} 40 | 41 |
    42 | 43 | 44 | {{ render_field(login_user_form.next) }} 45 | 46 | {{ login_user_form.submit(class='btn btn-success') }} 47 | 48 |
    49 | 50 | 51 | 52 | 53 |
    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 |
    14 |
    15 |
    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/') --------------------------------------------------------------------------------