├── .gitattributes
├── README.md
├── SearchApp
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
├── config
├── PoC_tpl.txt
├── __init__.py
└── baseconfig.py
├── dashboard
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── static
│ └── dashboard
│ │ ├── css
│ │ ├── bespin.css
│ │ ├── bootstrap-rtl.css
│ │ ├── bootstrap-rtl.min.css
│ │ ├── bootstrap.css
│ │ ├── bootstrap.min.css
│ │ ├── codemirror.css
│ │ ├── plugins
│ │ │ └── morris.css
│ │ ├── sb-admin-rtl.css
│ │ └── sb-admin.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
│ │ ├── 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
│ │ │ ├── spinning.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ └── scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _path.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _spinning.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ └── font-awesome.scss
│ │ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ │ ├── img
│ │ ├── SearchLogo.png
│ │ ├── eye.png
│ │ └── login_bg.jpg
│ │ └── js
│ │ ├── PoC_add.js
│ │ ├── bootstrap.js
│ │ ├── bootstrap.min.js
│ │ ├── codemirror.js
│ │ ├── common.js
│ │ ├── jquery.js
│ │ ├── plugins
│ │ ├── flot
│ │ │ ├── excanvas.min.js
│ │ │ ├── flot-data.js
│ │ │ ├── jquery.flot.js
│ │ │ ├── jquery.flot.pie.js
│ │ │ ├── jquery.flot.resize.js
│ │ │ └── jquery.flot.tooltip.min.js
│ │ └── morris
│ │ │ ├── morris-data.js
│ │ │ ├── morris.js
│ │ │ ├── morris.min.js
│ │ │ └── raphael.min.js
│ │ ├── product.js
│ │ ├── python.js
│ │ ├── scan_task.js
│ │ ├── scanner_list.js
│ │ ├── script.js
│ │ ├── search_log.js
│ │ └── vul_type.js
├── templates
│ └── dashboard
│ │ ├── base.html
│ │ ├── html
│ │ ├── 123.html
│ │ ├── create_scanner.html
│ │ ├── login.html
│ │ ├── nmap_scan_task.html
│ │ ├── poc_add.html
│ │ ├── poc_detail.html
│ │ ├── poc_edit.html
│ │ ├── poc_list.html
│ │ ├── product_add.html
│ │ ├── product_edit.html
│ │ ├── product_list.html
│ │ ├── scan_task_error.html
│ │ ├── scanner.html
│ │ ├── scanner_list.html
│ │ ├── search_log.html
│ │ ├── task_detail.html
│ │ ├── task_list.html
│ │ ├── vul_type_add.html
│ │ └── zmap_scan_task.html
│ │ ├── index.html
│ │ └── section
│ │ ├── modal.html
│ │ ├── nav.html
│ │ └── vul_location.html
├── tests.py
├── urls.py
└── views.py
├── demo
├── 选区_029.png
├── 选区_030.png
└── 选区_031.png
├── esapi
├── ElasticSearch.py
├── Elasticsearch_vul.py
└── __init__.py
├── manage.py
├── requirements.txt
├── search
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── static
│ └── search
│ │ ├── 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
│ │ ├── data.css
│ │ ├── font-awesome.min.css
│ │ ├── style.css
│ │ └── top
│ │ │ └── themes
│ │ │ └── image.css
│ │ ├── img
│ │ ├── 109221.jpg
│ │ ├── 481285.jpg
│ │ ├── SearchLogo.png
│ │ ├── eye.png
│ │ └── top.png
│ │ └── 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
│ │ ├── jquery-3.3.1.min.js
│ │ ├── jquery.scrollUp.min.js
│ │ ├── popper.min.js
│ │ └── top.js
├── templates
│ └── search
│ │ ├── base.html
│ │ ├── error.html
│ │ ├── html
│ │ ├── data.html
│ │ └── showdata.html
│ │ └── index.html
├── tests.py
├── urls.py
└── views.py
├── static
├── admin
│ ├── css
│ │ ├── autocomplete.css
│ │ ├── base.css
│ │ ├── changelists.css
│ │ ├── dashboard.css
│ │ ├── fonts.css
│ │ ├── forms.css
│ │ ├── login.css
│ │ ├── responsive.css
│ │ ├── responsive_rtl.css
│ │ ├── rtl.css
│ │ ├── vendor
│ │ │ └── select2
│ │ │ │ ├── LICENSE-SELECT2.md
│ │ │ │ ├── select2.css
│ │ │ │ └── select2.min.css
│ │ └── widgets.css
│ ├── fonts
│ │ ├── LICENSE.txt
│ │ ├── README.txt
│ │ ├── Roboto-Bold-webfont.woff
│ │ ├── Roboto-Light-webfont.woff
│ │ └── Roboto-Regular-webfont.woff
│ ├── img
│ │ ├── LICENSE
│ │ ├── README.txt
│ │ ├── calendar-icons.svg
│ │ ├── gis
│ │ │ ├── move_vertex_off.svg
│ │ │ └── move_vertex_on.svg
│ │ ├── icon-addlink.svg
│ │ ├── icon-alert.svg
│ │ ├── icon-calendar.svg
│ │ ├── icon-changelink.svg
│ │ ├── icon-clock.svg
│ │ ├── icon-deletelink.svg
│ │ ├── icon-no.svg
│ │ ├── icon-unknown-alt.svg
│ │ ├── icon-unknown.svg
│ │ ├── icon-yes.svg
│ │ ├── inline-delete.svg
│ │ ├── search.svg
│ │ ├── selector-icons.svg
│ │ ├── sorting-icons.svg
│ │ ├── tooltag-add.svg
│ │ └── tooltag-arrowright.svg
│ └── js
│ │ ├── SelectBox.js
│ │ ├── SelectFilter2.js
│ │ ├── actions.js
│ │ ├── actions.min.js
│ │ ├── admin
│ │ ├── DateTimeShortcuts.js
│ │ └── RelatedObjectLookups.js
│ │ ├── autocomplete.js
│ │ ├── calendar.js
│ │ ├── cancel.js
│ │ ├── change_form.js
│ │ ├── collapse.js
│ │ ├── collapse.min.js
│ │ ├── core.js
│ │ ├── inlines.js
│ │ ├── inlines.min.js
│ │ ├── jquery.init.js
│ │ ├── popup_response.js
│ │ ├── prepopulate.js
│ │ ├── prepopulate.min.js
│ │ ├── prepopulate_init.js
│ │ ├── timeparse.js
│ │ ├── urlify.js
│ │ └── vendor
│ │ ├── jquery
│ │ ├── LICENSE-JQUERY.txt
│ │ ├── jquery.js
│ │ └── jquery.min.js
│ │ ├── select2
│ │ ├── LICENSE-SELECT2.md
│ │ ├── i18n
│ │ │ ├── ar.js
│ │ │ ├── az.js
│ │ │ ├── bg.js
│ │ │ ├── ca.js
│ │ │ ├── cs.js
│ │ │ ├── da.js
│ │ │ ├── de.js
│ │ │ ├── el.js
│ │ │ ├── en.js
│ │ │ ├── es.js
│ │ │ ├── et.js
│ │ │ ├── eu.js
│ │ │ ├── fa.js
│ │ │ ├── fi.js
│ │ │ ├── fr.js
│ │ │ ├── gl.js
│ │ │ ├── he.js
│ │ │ ├── hi.js
│ │ │ ├── hr.js
│ │ │ ├── hu.js
│ │ │ ├── id.js
│ │ │ ├── is.js
│ │ │ ├── it.js
│ │ │ ├── ja.js
│ │ │ ├── km.js
│ │ │ ├── ko.js
│ │ │ ├── lt.js
│ │ │ ├── lv.js
│ │ │ ├── mk.js
│ │ │ ├── ms.js
│ │ │ ├── nb.js
│ │ │ ├── nl.js
│ │ │ ├── pl.js
│ │ │ ├── pt-BR.js
│ │ │ ├── pt.js
│ │ │ ├── ro.js
│ │ │ ├── ru.js
│ │ │ ├── sk.js
│ │ │ ├── sr-Cyrl.js
│ │ │ ├── sr.js
│ │ │ ├── sv.js
│ │ │ ├── th.js
│ │ │ ├── tr.js
│ │ │ ├── uk.js
│ │ │ ├── vi.js
│ │ │ ├── zh-CN.js
│ │ │ └── zh-TW.js
│ │ ├── select2.full.js
│ │ └── select2.full.min.js
│ │ └── xregexp
│ │ ├── LICENSE-XREGEXP.txt
│ │ ├── xregexp.js
│ │ └── xregexp.min.js
└── search
│ ├── 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
│ ├── data.css
│ ├── font-awesome.min.css
│ ├── style.css
│ └── top
│ │ └── themes
│ │ └── image.css
│ ├── img
│ ├── 109221.jpg
│ ├── 481285.jpg
│ ├── SearchLogo.png
│ ├── eye.png
│ └── top.png
│ └── 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
│ ├── jquery-3.3.1.min.js
│ ├── jquery.scrollUp.min.js
│ ├── popper.min.js
│ └── top.js
└── templates
├── 404.html
└── admin
└── base_site.html
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.js linguist-language=python
2 | *.html lingist-language=python
3 | *.css lingist-language=python
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SearchWebApp
2 |
3 | 
4 |
5 | 
6 |
7 | 
8 |
9 | # 说明
10 | 不知道被哪位大佬翻了牌子,很多人star,这里说明一下。
11 | 这个是我的毕业设计,已经做完了,
12 | 参考价值不大,也请各位谨慎star。
13 | Thanks :)
14 |
15 | # 演示地址
16 |
17 |
--------------------------------------------------------------------------------
/SearchApp/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/SearchApp/__init__.py
--------------------------------------------------------------------------------
/SearchApp/settings.py:
--------------------------------------------------------------------------------
1 | """
2 | Django settings for SearchApp project.
3 |
4 | Generated by 'django-admin startproject' using Django 2.0.4.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/2.0/topics/settings/
8 |
9 | For the full list of settings and their values, see
10 | https://docs.djangoproject.com/en/2.0/ref/settings/
11 | """
12 |
13 | import os
14 |
15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17 |
18 |
19 | # Quick-start development settings - unsuitable for production
20 | # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
21 |
22 | # SECURITY WARNING: keep the secret key used in production secret!
23 | SECRET_KEY = 'mcwrbmbfou40i&10ih28vxc(igfl2(f0r=@-ggryf*ltg-%#mj'
24 |
25 | # SECURITY WARNING: don't run with debug turned on in production!
26 | DEBUG = True
27 |
28 | ALLOWED_HOSTS = ["*"]
29 |
30 |
31 | # Application definition
32 |
33 | INSTALLED_APPS = [
34 | 'django.contrib.admin',
35 | 'django.contrib.auth',
36 | 'django.contrib.contenttypes',
37 | 'django.contrib.sessions',
38 | 'django.contrib.messages',
39 | 'django.contrib.staticfiles',
40 | 'search',
41 | 'dashboard',
42 | ]
43 |
44 | MIDDLEWARE = [
45 | 'django.middleware.security.SecurityMiddleware',
46 | 'django.contrib.sessions.middleware.SessionMiddleware',
47 | 'django.middleware.common.CommonMiddleware',
48 | 'django.middleware.csrf.CsrfViewMiddleware',
49 | 'django.contrib.auth.middleware.AuthenticationMiddleware',
50 | 'django.contrib.messages.middleware.MessageMiddleware',
51 | 'django.middleware.clickjacking.XFrameOptionsMiddleware',
52 | ]
53 |
54 | ROOT_URLCONF = 'SearchApp.urls'
55 |
56 | TEMPLATES = [
57 | {
58 | 'BACKEND': 'django.template.backends.django.DjangoTemplates',
59 | 'DIRS': [os.path.join(BASE_DIR, 'templates')]
60 | ,
61 | 'APP_DIRS': True,
62 | 'OPTIONS': {
63 | 'context_processors': [
64 | 'django.template.context_processors.debug',
65 | 'django.template.context_processors.request',
66 | 'django.contrib.auth.context_processors.auth',
67 | 'django.contrib.messages.context_processors.messages',
68 | ],
69 | },
70 | },
71 | ]
72 |
73 | WSGI_APPLICATION = 'SearchApp.wsgi.application'
74 |
75 |
76 | # Database
77 | # https://docs.djangoproject.com/en/2.0/ref/settings/#databases
78 |
79 | DATABASES = {
80 | 'default': {
81 | 'ENGINE': 'django.db.backends.sqlite3',
82 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
83 | }
84 | }
85 |
86 |
87 | # Password validation
88 | # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
89 |
90 | AUTH_PASSWORD_VALIDATORS = [
91 | {
92 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
93 | },
94 | {
95 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
96 | },
97 | {
98 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
99 | },
100 | {
101 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
102 | },
103 | ]
104 |
105 |
106 | # Internationalization
107 | # https://docs.djangoproject.com/en/2.0/topics/i18n/
108 |
109 | LANGUAGE_CODE = 'zh-hans'
110 |
111 | TIME_ZONE = 'Asia/Shanghai'
112 |
113 | USE_I18N = True
114 |
115 | USE_L10N = True
116 |
117 | USE_TZ = True
118 |
119 |
120 | # Static files (CSS, JavaScript, Images)
121 | # https://docs.djangoproject.com/en/2.0/howto/static-files/
122 |
123 | STATIC_URL = '/static/'
124 | STATIC_ROOT = os.path.join(BASE_DIR, "static")
125 |
126 | # 设置SESSION 关闭浏览器后失效
127 | SESSION_SAVE_EVERY_REQUEST = True
128 | SESSION_EXPIRE_AT_BROWSER_CLOSE = True
129 |
--------------------------------------------------------------------------------
/SearchApp/urls.py:
--------------------------------------------------------------------------------
1 | """SearchApp URL Configuration
2 |
3 | The `urlpatterns` list routes URLs to views. For more information please see:
4 | https://docs.djangoproject.com/en/2.0/topics/http/urls/
5 | Examples:
6 | Function views
7 | 1. Add an import: from my_app import views
8 | 2. Add a URL to urlpatterns: path('', views.home, name='home')
9 | Class-based views
10 | 1. Add an import: from other_app.views import Home
11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
12 | Including another URLconf
13 | 1. Import the include() function: from django.urls import include, path
14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
15 | """
16 | from django.conf.urls import url, include
17 | urlpatterns = [
18 | url(r"admin/", include(('dashboard.urls', 'dashboard'), namespace='dashboard')),
19 | url(r'^', include(("search.urls", "search"), namespace="search")),
20 | ]
21 |
--------------------------------------------------------------------------------
/SearchApp/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for SearchApp project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SearchApp.settings")
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------
/config/PoC_tpl.txt:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | import urlparse
5 |
6 | from pocsuite.api.poc import POCBase, register, Output
7 | from pocsuite.api.request import req
8 |
9 |
10 | class TestPOC(POCBase):
11 | vulID = ''
12 | version = ''
13 | author = ''
14 | vulDate = ''
15 | createDate = ''
16 | updateDate = ''
17 | references = ['']
18 | name = ''
19 | appPowerLink = ''
20 | appName = ''
21 | appVersion = ''
22 | vulType = ''
23 | desc = '''
24 | '''
25 | samples = [
26 | ""
27 | ]
28 | install_requires = ""
29 | search_keyword = ""
30 |
31 | def _verify(self):
32 | pass
33 |
34 | def _attack(self):
35 | self._verify()
36 |
37 | def parse_output(self, result):
38 | output = Output(self)
39 | if result:
40 | output.success(result)
41 | else:
42 | output.fail('Internet nothing returned')
43 | return output
44 |
45 |
46 | register(TestPOC)
47 |
--------------------------------------------------------------------------------
/config/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/config/__init__.py
--------------------------------------------------------------------------------
/config/baseconfig.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | ELASTICSEARCH_HOST_LIST = [{"host": "192.168.151.128", "port": 9200}]
4 | ES_INDEX_NAME = "searchdb"
5 | ES_DOC_TYPE = "search"
6 | VUL_INDEX_NAME = "searchvul"
7 | VUL_DOC_TYPE = "search"
8 |
9 |
10 | def get_poc_tpl():
11 | path = os.path.dirname(os.path.abspath(__file__)) + "/PoC_tpl.txt"
12 | with open(path, "r") as f:
13 | return f.read()
14 |
--------------------------------------------------------------------------------
/dashboard/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/__init__.py
--------------------------------------------------------------------------------
/dashboard/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/dashboard/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class DashboardConfig(AppConfig):
5 | name = 'dashboard'
6 |
--------------------------------------------------------------------------------
/dashboard/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/migrations/__init__.py
--------------------------------------------------------------------------------
/dashboard/static/dashboard/css/bespin.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Name: Bespin
4 | Author: Mozilla / Jan T. Sott
5 |
6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
8 |
9 | */
10 |
11 | .cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;}
12 | .cm-s-bespin div.CodeMirror-selected {background: #36312e !important;}
13 | .cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;}
14 | .cm-s-bespin .CodeMirror-linenumber {color: #666666;}
15 | .cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;}
16 |
17 | .cm-s-bespin span.cm-comment {color: #937121;}
18 | .cm-s-bespin span.cm-atom {color: #9b859d;}
19 | .cm-s-bespin span.cm-number {color: #9b859d;}
20 |
21 | .cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;}
22 | .cm-s-bespin span.cm-keyword {color: #cf6a4c;}
23 | .cm-s-bespin span.cm-string {color: #f9ee98;}
24 |
25 | .cm-s-bespin span.cm-variable {color: #54be0d;}
26 | .cm-s-bespin span.cm-variable-2 {color: #5ea6ea;}
27 | .cm-s-bespin span.cm-def {color: #cf7d34;}
28 | .cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;}
29 | .cm-s-bespin span.cm-bracket {color: #9d9b97;}
30 | .cm-s-bespin span.cm-tag {color: #cf6a4c;}
31 | .cm-s-bespin span.cm-link {color: #9b859d;}
32 |
33 | .cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
34 | .cm-s-bespin .CodeMirror-activeline-background { background: #404040; }
35 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/css/plugins/morris.css:
--------------------------------------------------------------------------------
1 | .morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}
3 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/css/sb-admin-rtl.css:
--------------------------------------------------------------------------------
1 |
2 | @media (min-width: 768px){
3 | #wrapper {padding-right: 225px; padding-left: 0;}
4 | .side-nav{right: 0;left: auto;}
5 | }
--------------------------------------------------------------------------------
/dashboard/static/dashboard/css/sb-admin.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Start Bootstrap - SB Admin Bootstrap Admin Template (http://startbootstrap.com)
3 | * Code licensed under the Apache License v2.0.
4 | * For details, see http://www.apache.org/licenses/LICENSE-2.0.
5 | */
6 |
7 | /* Global Styles */
8 |
9 | body {
10 | margin-top: 100px;
11 | background-color: #222;
12 | }
13 |
14 | @media(min-width:768px) {
15 | body {
16 | margin-top: 50px;
17 | }
18 | }
19 |
20 | #wrapper {
21 | padding-left: 0;
22 | }
23 |
24 | #page-wrapper {
25 | width: 100%;
26 | padding: 0;
27 | background-color: #fff;
28 | }
29 |
30 | .huge {
31 | font-size: 50px;
32 | line-height: normal;
33 | }
34 |
35 | @media(min-width:768px) {
36 | #wrapper {
37 | padding-left: 225px;
38 | }
39 |
40 | #page-wrapper {
41 | padding: 10px;
42 | }
43 | }
44 |
45 | /* Top Navigation */
46 |
47 | .top-nav {
48 | padding: 0 15px;
49 | }
50 |
51 | .top-nav>li {
52 | display: inline-block;
53 | float: left;
54 | }
55 |
56 | .top-nav>li>a {
57 | padding-top: 15px;
58 | padding-bottom: 15px;
59 | line-height: 20px;
60 | color: #999;
61 | }
62 |
63 | .top-nav>li>a:hover,
64 | .top-nav>li>a:focus,
65 | .top-nav>.open>a,
66 | .top-nav>.open>a:hover,
67 | .top-nav>.open>a:focus {
68 | color: #fff;
69 | background-color: #000;
70 | }
71 |
72 | .top-nav>.open>.dropdown-menu {
73 | float: left;
74 | position: absolute;
75 | margin-top: 0;
76 | border: 1px solid rgba(0,0,0,.15);
77 | border-top-left-radius: 0;
78 | border-top-right-radius: 0;
79 | background-color: #fff;
80 | -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
81 | box-shadow: 0 6px 12px rgba(0,0,0,.175);
82 | }
83 |
84 | .top-nav>.open>.dropdown-menu>li>a {
85 | white-space: normal;
86 | }
87 |
88 | ul.message-dropdown {
89 | padding: 0;
90 | max-height: 250px;
91 | overflow-x: hidden;
92 | overflow-y: auto;
93 | }
94 |
95 | li.message-preview {
96 | width: 275px;
97 | border-bottom: 1px solid rgba(0,0,0,.15);
98 | }
99 |
100 | li.message-preview>a {
101 | padding-top: 15px;
102 | padding-bottom: 15px;
103 | }
104 |
105 | li.message-footer {
106 | margin: 5px 0;
107 | }
108 |
109 | ul.alert-dropdown {
110 | width: 200px;
111 | }
112 |
113 | /* Side Navigation */
114 |
115 | @media(min-width:768px) {
116 | .side-nav {
117 | position: fixed;
118 | top: 51px;
119 | left: 225px;
120 | width: 225px;
121 | margin-left: -225px;
122 | border: none;
123 | border-radius: 0;
124 | overflow-y: auto;
125 | background-color: #222;
126 | bottom: 0;
127 | overflow-x: hidden;
128 | padding-bottom: 40px;
129 | }
130 |
131 | .side-nav>li>a {
132 | width: 225px;
133 | }
134 |
135 | .side-nav li a:hover,
136 | .side-nav li a:focus {
137 | outline: none;
138 | background-color: #000 !important;
139 | }
140 | }
141 |
142 | .side-nav>li>ul {
143 | padding: 0;
144 | }
145 |
146 | .side-nav>li>ul>li>a {
147 | display: block;
148 | padding: 10px 15px 10px 38px;
149 | text-decoration: none;
150 | color: #999;
151 | }
152 |
153 | .side-nav>li>ul>li>a:hover {
154 | color: #fff;
155 | }
156 |
157 | /* Flot Chart Containers */
158 |
159 | .flot-chart {
160 | display: block;
161 | height: 400px;
162 | }
163 |
164 | .flot-chart-content {
165 | width: 100%;
166 | height: 100%;
167 | }
168 |
169 | /* Custom Colored Panels */
170 |
171 | .huge {
172 | font-size: 40px;
173 | }
174 |
175 | .panel-green {
176 | border-color: #5cb85c;
177 | }
178 |
179 | .panel-green > .panel-heading {
180 | border-color: #5cb85c;
181 | color: #fff;
182 | background-color: #5cb85c;
183 | }
184 |
185 | .panel-green > a {
186 | color: #5cb85c;
187 | }
188 |
189 | .panel-green > a:hover {
190 | color: #3d8b3d;
191 | }
192 |
193 | .panel-red {
194 | border-color: #d9534f;
195 | }
196 |
197 | .panel-red > .panel-heading {
198 | border-color: #d9534f;
199 | color: #fff;
200 | background-color: #d9534f;
201 | }
202 |
203 | .panel-red > a {
204 | color: #d9534f;
205 | }
206 |
207 | .panel-red > a:hover {
208 | color: #b52b27;
209 | }
210 |
211 | .panel-yellow {
212 | border-color: #f0ad4e;
213 | }
214 |
215 | .panel-yellow > .panel-heading {
216 | border-color: #f0ad4e;
217 | color: #fff;
218 | background-color: #f0ad4e;
219 | }
220 |
221 | .panel-yellow > a {
222 | color: #f0ad4e;
223 | }
224 |
225 | .panel-yellow > a:hover {
226 | color: #df8a13;
227 | }
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/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 | }
12 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.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 "spinning.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal 14px/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 | }
12 |
13 | .fa-icon-rotate(@degrees, @rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
15 | -webkit-transform: rotate(@degrees);
16 | -ms-transform: rotate(@degrees);
17 | transform: rotate(@degrees);
18 | }
19 |
20 | .fa-icon-flip(@horiz, @vert, @rotation) {
21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
22 | -webkit-transform: scale(@horiz, @vert);
23 | -ms-transform: scale(@horiz, @vert);
24 | transform: scale(@horiz, @vert);
25 | }
26 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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.woff?v=@{fa-version}') format('woff'),
9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/less/spinning.less:
--------------------------------------------------------------------------------
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 | @-webkit-keyframes fa-spin {
10 | 0% {
11 | -webkit-transform: rotate(0deg);
12 | transform: rotate(0deg);
13 | }
14 | 100% {
15 | -webkit-transform: rotate(359deg);
16 | transform: rotate(359deg);
17 | }
18 | }
19 |
20 | @keyframes fa-spin {
21 | 0% {
22 | -webkit-transform: rotate(0deg);
23 | transform: rotate(0deg);
24 | }
25 | 100% {
26 | -webkit-transform: rotate(359deg);
27 | transform: rotate(359deg);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/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 | }
12 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal 14px/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 | }
12 |
13 | @mixin fa-icon-rotate($degrees, $rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
15 | -webkit-transform: rotate($degrees);
16 | -ms-transform: rotate($degrees);
17 | transform: rotate($degrees);
18 | }
19 |
20 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
22 | -webkit-transform: scale($horiz, $vert);
23 | -ms-transform: scale($horiz, $vert);
24 | transform: scale($horiz, $vert);
25 | }
26 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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.woff?v=#{$fa-version}') format('woff'),
9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/scss/_spinning.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 | @-webkit-keyframes fa-spin {
10 | 0% {
11 | -webkit-transform: rotate(0deg);
12 | transform: rotate(0deg);
13 | }
14 | 100% {
15 | -webkit-transform: rotate(359deg);
16 | transform: rotate(359deg);
17 | }
18 | }
19 |
20 | @keyframes fa-spin {
21 | 0% {
22 | -webkit-transform: rotate(0deg);
23 | transform: rotate(0deg);
24 | }
25 | 100% {
26 | -webkit-transform: rotate(359deg);
27 | transform: rotate(359deg);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/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 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/font-awesome/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.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 "spinning";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/dashboard/static/dashboard/img/SearchLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/img/SearchLogo.png
--------------------------------------------------------------------------------
/dashboard/static/dashboard/img/eye.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/img/eye.png
--------------------------------------------------------------------------------
/dashboard/static/dashboard/img/login_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/dashboard/static/dashboard/img/login_bg.jpg
--------------------------------------------------------------------------------
/dashboard/static/dashboard/js/common.js:
--------------------------------------------------------------------------------
1 | function Getxmlhttp() {
2 | var xmlhttp;
3 | if (window.XMLHttpRequest) {
4 | // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
5 | xmlhttp=new XMLHttpRequest();
6 | } else{
7 | // IE6, IE5 浏览器执行代码
8 | xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
9 | }
10 | return xmlhttp;
11 | }
12 |
13 | function getId(id) {
14 | return document.getElementById(id);
15 | }
16 |
17 | function toJson(str) {
18 | var json = (new Function("return" + str))();
19 | return json;
20 | }
21 |
22 | function showmsg(title, body, fun) {
23 | getId("myModalLabel").innerText = title;
24 | getId("myModalbody").innerText = body;
25 | $('#myModal').modal('toggle');
26 | $('#myModal').on('hidden.bs.modal',fun)
27 | }
28 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/js/plugins/flot/jquery.flot.resize.js:
--------------------------------------------------------------------------------
1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes.
2 |
3 | Copyright (c) 2007-2013 IOLA and Ole Laursen.
4 | Licensed under the MIT license.
5 |
6 | It works by listening for changes on the placeholder div (through the jQuery
7 | resize event plugin) - if the size changes, it will redraw the plot.
8 |
9 | There are no options. If you need to disable the plugin for some plots, you
10 | can just fix the size of their placeholders.
11 |
12 | */
13 |
14 | /* Inline dependency:
15 | * jQuery resize event - v1.1 - 3/14/2010
16 | * http://benalman.com/projects/jquery-resize-plugin/
17 | *
18 | * Copyright (c) 2010 "Cowboy" Ben Alman
19 | * Dual licensed under the MIT and GPL licenses.
20 | * http://benalman.com/about/license/
21 | */
22 |
23 | (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
24 |
25 | (function ($) {
26 | var options = { }; // no options
27 |
28 | function init(plot) {
29 | function onResize() {
30 | var placeholder = plot.getPlaceholder();
31 |
32 | // somebody might have hidden us and we can't plot
33 | // when we don't have the dimensions
34 | if (placeholder.width() == 0 || placeholder.height() == 0)
35 | return;
36 |
37 | plot.resize();
38 | plot.setupGrid();
39 | plot.draw();
40 | }
41 |
42 | function bindEvents(plot, eventHolder) {
43 | plot.getPlaceholder().resize(onResize);
44 | }
45 |
46 | function shutdown(plot, eventHolder) {
47 | plot.getPlaceholder().unbind("resize", onResize);
48 | }
49 |
50 | plot.hooks.bindEvents.push(bindEvents);
51 | plot.hooks.shutdown.push(shutdown);
52 | }
53 |
54 | $.plot.plugins.push({
55 | init: init,
56 | options: options,
57 | name: 'resize',
58 | version: '1.0'
59 | });
60 | })(jQuery);
--------------------------------------------------------------------------------
/dashboard/static/dashboard/js/plugins/flot/jquery.flot.tooltip.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jquery.flot.tooltip
3 | *
4 | * description: easy-to-use tooltips for Flot charts
5 | * version: 0.6.2
6 | * author: Krzysztof Urbas @krzysu [myviews.pl]
7 | * website: https://github.com/krzysu/flot.tooltip
8 | *
9 | * build on 2013-09-30
10 | * released under MIT License, 2012
11 | */
12 | (function(t){var o={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},i=function(t){this.tipPosition={x:0,y:0},this.init(t)};i.prototype.init=function(o){function i(t){var o={};o.x=t.pageX,o.y=t.pageY,s.updateTooltipPosition(o)}function e(t,o,i){var e=s.getDomElement();if(i){var n;n=s.stringFormat(s.tooltipOptions.content,i),e.html(n),s.updateTooltipPosition({x:o.pageX,y:o.pageY}),e.css({left:s.tipPosition.x+s.tooltipOptions.shifts.x,top:s.tipPosition.y+s.tooltipOptions.shifts.y}).show(),"function"==typeof s.tooltipOptions.onHover&&s.tooltipOptions.onHover(i,e)}else e.hide().html("")}var s=this;o.hooks.bindEvents.push(function(o,n){s.plotOptions=o.getOptions(),s.plotOptions.tooltip!==!1&&void 0!==s.plotOptions.tooltip&&(s.tooltipOptions=s.plotOptions.tooltipOpts,s.getDomElement(),t(o.getPlaceholder()).bind("plothover",e),t(n).bind("mousemove",i))}),o.hooks.shutdown.push(function(o,s){t(o.getPlaceholder()).unbind("plothover",e),t(s).unbind("mousemove",i)})},i.prototype.getDomElement=function(){var o;return t("#flotTip").length>0?o=t("#flotTip"):(o=t("
").attr("id","flotTip"),o.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&o.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),o},i.prototype.updateTooltipPosition=function(o){var i=t("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,e=t("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;o.x-t(window).scrollLeft()>t(window).innerWidth()-i&&(o.x-=i),o.y-t(window).scrollTop()>t(window).innerHeight()-e&&(o.y-=e),this.tipPosition.x=o.x,this.tipPosition.y=o.y},i.prototype.stringFormat=function(t,o){var i=/%p\.{0,1}(\d{0,})/,e=/%s/,s=/%x\.{0,1}(?:\d{0,})/,n=/%y\.{0,1}(?:\d{0,})/;return"function"==typeof t&&(t=t(o.series.label,o.series.data[o.dataIndex][0],o.series.data[o.dataIndex][1],o)),o.series.percent!==void 0&&(t=this.adjustValPrecision(i,t,o.series.percent)),o.series.label!==void 0&&(t=t.replace(e,o.series.label)),this.isTimeMode("xaxis",o)&&this.isXDateFormat(o)&&(t=t.replace(s,this.timestampToDate(o.series.data[o.dataIndex][0],this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",o)&&this.isYDateFormat(o)&&(t=t.replace(n,this.timestampToDate(o.series.data[o.dataIndex][1],this.tooltipOptions.yDateFormat))),"number"==typeof o.series.data[o.dataIndex][0]&&(t=this.adjustValPrecision(s,t,o.series.data[o.dataIndex][0])),"number"==typeof o.series.data[o.dataIndex][1]&&(t=this.adjustValPrecision(n,t,o.series.data[o.dataIndex][1])),o.series.xaxis.tickFormatter!==void 0&&(t=t.replace(s,o.series.xaxis.tickFormatter(o.series.data[o.dataIndex][0],o.series.xaxis))),o.series.yaxis.tickFormatter!==void 0&&(t=t.replace(n,o.series.yaxis.tickFormatter(o.series.data[o.dataIndex][1],o.series.yaxis))),t},i.prototype.isTimeMode=function(t,o){return o.series[t].options.mode!==void 0&&"time"===o.series[t].options.mode},i.prototype.isXDateFormat=function(){return this.tooltipOptions.xDateFormat!==void 0&&null!==this.tooltipOptions.xDateFormat},i.prototype.isYDateFormat=function(){return this.tooltipOptions.yDateFormat!==void 0&&null!==this.tooltipOptions.yDateFormat},i.prototype.timestampToDate=function(o,i){var e=new Date(o);return t.plot.formatDate(e,i)},i.prototype.adjustValPrecision=function(t,o,i){var e,s=o.match(t);return null!==s&&""!==RegExp.$1&&(e=RegExp.$1,i=i.toFixed(e),o=o.replace(t,i)),o};var e=function(t){new i(t)};t.plot.plugins.push({init:e,options:o,name:"tooltip",version:"0.6.1"})})(jQuery);
--------------------------------------------------------------------------------
/dashboard/static/dashboard/js/product.js:
--------------------------------------------------------------------------------
1 | function create_product() {
2 | var productname = getId("productname").value;
3 | var url = getId("url").value;
4 | var description = getId("description").value;
5 | var csrfmiddlewaretoken = document.getElementsByName("csrfmiddlewaretoken")[0].value;
6 | if(productname== "" || url == "" || description == ""){
7 | showmsg("Parameter error !!!", "Please complete the parameters !!!", null)
8 | }
9 | var xmlhttp = Getxmlhttp();
10 | xmlhttp.open("POST", add_product_url, true);
11 | xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
12 | var data = "productname=" + productname + "&url=" + url + "&description=" + description + "&csrfmiddlewaretoken=" +
13 | csrfmiddlewaretoken;
14 | xmlhttp.send(data);
15 | xmlhttp.onreadystatechange = function(){
16 | if (xmlhttp.readyState==4){
17 | var res = toJson(xmlhttp.responseText);
18 | if (xmlhttp.status==200){
19 | showmsg("Product added successfully!!!", res["info"], function () {
20 | window.location.reload();
21 | });
22 | }else {
23 | showmsg("Product addition failed!!!", res["info"], null);
24 | }
25 | }
26 | };
27 | }
28 |
29 | function update_product() {
30 | var product_id = getId("proudct_id").value;
31 | var productname = getId("productname").value;
32 | var url = getId("url").value;
33 | var description = getId("description").value;
34 | var csrfmiddlewaretoken = document.getElementsByName("csrfmiddlewaretoken")[0].value;
35 | if( product_id == "" || productname== "" || url == "" || description == ""){
36 | showmsg("Parameter error !!!", "Please complete the parameters !!!", null)
37 | }
38 | var xmlhttp = Getxmlhttp();
39 | xmlhttp.open("POST", product_update_url, true);
40 | xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
41 | var data = "productname=" + productname + "&url=" + url + "&description=" + description + "&csrfmiddlewaretoken=" +
42 | csrfmiddlewaretoken + "&product_id=" + product_id;
43 | xmlhttp.send(data);
44 | xmlhttp.onreadystatechange = function(){
45 | if (xmlhttp.readyState==4){
46 | var res = toJson(xmlhttp.responseText);
47 | if (xmlhttp.status==200){
48 | showmsg("Product added successfully!!!", res["info"], function () {
49 | window.location.reload();
50 | });
51 | }else {
52 | showmsg("Product addition failed!!!", res["info"], null);
53 | }
54 | }
55 | };
56 | }
57 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/js/scan_task.js:
--------------------------------------------------------------------------------
1 | function create_zmap_task() {
2 | // 获取base info
3 | var scanners = getId("scanners").value;
4 | var name = getId("name").value;
5 | var task_name = getId("task_name").value;
6 | var enable = getId("enable").value;
7 | var description = getId("description").value;
8 | var every = getId("every").value;
9 | var period = getId("period").value;
10 | var minute = getId("minute").value;
11 | var hour = getId("hour").value;
12 | var dayofweek = getId("dayofweek").value;
13 | var dayofmonth = getId("dayofmonth").value;
14 | var monthofyear = getId("monthofyear").value;
15 | var timezone = getId("timezone").value;
16 | var one_of_task = getId("one_of_task").value;
17 | var port = getId("port").value;
18 | var cidr = getId("cidr").value;
19 | var csrfmiddlewaretoken = document.getElementsByName("csrfmiddlewaretoken")[0].value;
20 | var xmlhttp = Getxmlhttp();
21 | xmlhttp.open("POST", create_zmap_task_url, true);
22 | var data = "scanners_id=" + scanners + "&name=" + name + "&task_name=" + task_name + "&enable=" + enable + "&desc="
23 | + description + "&every=" + every + "&period=" + period + "&minute=" + minute + "&hour=" + hour + "&dayofweek=" +
24 | dayofweek + "&dayofmonth=" + dayofmonth + "&monthofyear=" + monthofyear + "&timezone=" + timezone + "&one_of_task=" +
25 | one_of_task + "&port=" + port + "&cidr=" + cidr + "&csrfmiddlewaretoken=" + csrfmiddlewaretoken;
26 | xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
27 | xmlhttp.send(data);
28 | xmlhttp.onreadystatechange = function(){
29 | if (xmlhttp.readyState==4){
30 | var res = toJson(xmlhttp.responseText);
31 | if (xmlhttp.status==200){
32 | showmsg("任务创建成功", "可在任务里表中查看", function () {
33 | window.location.reload();
34 | });
35 | }else {
36 | showmsg("任务创建失败", res["info"]);
37 | }
38 | }
39 | };
40 | }
41 |
42 | function create_nmap_task() {
43 | var scanners = getId("scanners").value;
44 | var name = getId("name").value;
45 | var enable = getId("enable").value;
46 | var description = getId("description").value;
47 | var every = getId("every").value;
48 | var period = getId("period").value;
49 | var minute = getId("minute").value;
50 | var hour = getId("hour").value;
51 | var dayofweek = getId("dayofweek").value;
52 | var dayofmonth = getId("dayofmonth").value;
53 | var monthofyear = getId("monthofyear").value;
54 | var timezone = getId("timezone").value;
55 | var one_of_task = getId("one_of_task").value;
56 | var type = getId("type").value;
57 | var datas = getId("datas").value;
58 | var csrfmiddlewaretoken = document.getElementsByName("csrfmiddlewaretoken")[0].value;
59 | console.log(scanners, name, enable, description, every, period, minute, hour, dayofmonth, dayofweek, monthofyear,
60 | timezone, one_of_task, type, data, csrfmiddlewaretoken);
61 | var xmlhttp = Getxmlhttp();
62 | xmlhttp.open("POST", create_nmap_task_url, true);
63 | var data = "scanners_id=" + scanners + "&name=" + name + "&enable=" + enable + "&desc="
64 | + description + "&every=" + every + "&period=" + period + "&minute=" + minute + "&hour=" + hour + "&dayofweek=" +
65 | dayofweek + "&dayofmonth=" + dayofmonth + "&monthofyear=" + monthofyear + "&timezone=" + timezone + "&one_of_task=" +
66 | one_of_task + "&type=" + type + "&datas=" + datas + "&csrfmiddlewaretoken=" + csrfmiddlewaretoken;
67 | xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
68 | xmlhttp.send(data);
69 | xmlhttp.onreadystatechange = function(){
70 | if (xmlhttp.readyState==4){
71 | var res = toJson(xmlhttp.responseText);
72 | if (xmlhttp.status==200){
73 | showmsg("任务创建成功", "可在任务里表中查看", function () {
74 | window.location.reload();
75 | });
76 | }else {
77 | showmsg("任务创建失败", res["info"]);
78 | }
79 | }
80 | };
81 | }
82 |
83 |
--------------------------------------------------------------------------------
/dashboard/static/dashboard/js/script.js:
--------------------------------------------------------------------------------
1 | //获取表单中所有的input元素
2 | function getElements(formId) {
3 | var form = document.getElementById(formId);
4 | var elements = new Array();
5 | var tagElements = form.getElementsByTagName('input');
6 | for (var j = 0; j < tagElements.length; j++){
7 | elements.push(tagElements[j]);
8 | }
9 | return elements;
10 | }
11 |
12 | function ParseDatas(elements) {
13 | var datas = new Array();
14 | for(var i=0; i
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {% block scripts_head %}{% endblock %}
15 |
16 | {% block title %}{% endblock %}
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | {% block style %}{% endblock %}
29 |
30 |
31 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | {% include "dashboard/section/nav.html" %}
43 | {% block page-wrapper %}
44 | {% endblock %}
45 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | {% block scripts_end %}{% endblock %}
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/login.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 |
4 |
5 |
6 | 登录
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
39 |
40 |
41 |
42 |
43 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/poc_add.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | Add Poc
5 | {% endblock %}
6 | {% block style %}
7 |
8 |
9 | {% endblock %}
10 | {% block scripts_head %}
11 |
12 |
13 |
14 |
15 | {% endblock %}
16 | {% block page-wrapper %}
17 | {% include "dashboard/section/modal.html" %}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | -
26 | Dashboard
27 |
28 | -
29 | Add PoC
30 |
31 |
32 |
33 |
34 |
93 |
94 |
95 | {% endblock %}
96 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/poc_list.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | PoC List
5 | {% endblock %}
6 | {% block scripts_head %}
7 |
11 |
12 | {% endblock %}
13 | {% block page-wrapper %}
14 | {% include "dashboard/section/modal.html" %}
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | -
23 | Dashboard
24 |
25 | -
26 | PoC List
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | Name |
38 | Description |
39 | Date |
40 | Type |
41 | Operate |
42 |
43 |
44 |
45 | {% for poc in pocs %}
46 |
47 | {{ poc.poc_name }} |
48 | {{ poc.poc_desc }} |
49 | {{ poc.poc_date }} |
50 | {{ poc.poc_type }} |
51 |
52 |
53 |
54 |
55 |
56 | |
57 |
58 | {% endfor %}
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | {% endblock %}
67 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/product_add.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | Add Product
5 | {% endblock %}
6 | {% block scripts_head %}
7 |
8 |
9 | {% endblock %}
10 | {% block page-wrapper %}
11 | {% include "dashboard/section/modal.html" %}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | -
20 | Dashboard
21 |
22 | -
23 | Add Product
24 |
25 |
26 |
27 |
28 |
49 |
50 |
51 | {% endblock %}
52 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/product_edit.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | Edit Product
5 | {% endblock %}
6 | {% block scripts_head %}
7 |
8 |
9 | {% endblock %}
10 | {% block page-wrapper %}
11 | {% include "dashboard/section/modal.html" %}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | -
20 | Dashboard
21 |
22 | -
23 | Edit Product
24 |
25 |
26 |
27 |
28 |
29 |
30 | {% if products == "" %}
31 |
32 |
Oops!!!
33 | Product error
34 |
35 | {% else %}
36 |
53 | {% endif %}
54 |
55 |
56 |
57 |
58 | {% endblock %}
59 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/product_list.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | Product List
5 | {% endblock %}
6 | {% block scripts_head %}
7 |
8 |
9 | {% endblock %}
10 | {% block page-wrapper %}
11 | {% include "dashboard/section/modal.html" %}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | -
20 | Dashboard
21 |
22 | -
23 | Product List
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Name |
35 | Website |
36 | Date |
37 | Desc |
38 | Operate |
39 |
40 |
41 |
42 | {% for product in products %}
43 |
44 | {{ product.procudt_name }} |
45 | {{ product.procudt_url }} |
46 | {{ product.product_date }} |
47 | {{ product.product_desc }} |
48 | |
49 |
50 | {% endfor %}
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | {% endblock %}
59 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/scan_task_error.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | 添加扫描任务
5 | {% endblock %}
6 | {% block scripts_head %}
7 |
8 |
9 | {% endblock %}
10 | {% block page-wrapper %}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | -
19 | Dashboard
20 |
21 | -
22 | Add Scan Task
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
Oops!!!
31 | {{ msg }}
32 |
33 |
34 |
35 |
36 |
37 | {% endblock %}
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/scanner_list.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | 节点列表
5 | {% endblock %}
6 | {% block style %}
7 |
12 | {% endblock %}
13 | {% block page-wrapper %}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | -
22 | Dashboard
23 |
24 | -
25 | Scanner List
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | Note!! 红色代表连接失败,蓝色代表已关闭,绿色代表正在运行
36 |
37 |
38 |
39 |
40 | {#
#}
41 | {#
#}
42 |
43 |
44 |
45 |
46 | {% endblock %}
47 | {% block scripts_end %}
48 |
52 |
53 | {% endblock %}
54 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/search_log.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | 搜索日志管理
5 | {% endblock %}
6 | {% block page-wrapper %}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | -
15 | Dashboard
16 |
17 | -
18 | Search Log
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | ID |
35 | IP |
36 | 搜索内容 |
37 | 搜索时间 |
38 | 操作 |
39 |
40 |
41 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
51 | {% endblock %}
52 | {% block scripts_end %}
53 |
58 |
59 | {% endblock %}
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/task_detail.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | Task Detail
5 | {% endblock %}
6 | {% block style %}
7 |
12 | {% endblock %}
13 | {% block page-wrapper %}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | -
22 | Dashboard
23 |
24 | -
25 | Task Detail
26 |
27 |
28 |
29 |
30 |
31 | {% if status == 'failure' %}
32 |
Oops!!!
33 |
{{ info }}
34 | {% else %}
35 |
36 |
37 |
38 |
39 | Field |
40 | Data |
41 |
42 |
43 |
44 |
45 | Name |
46 | {{ name }} |
47 |
48 |
49 | Task |
50 | {{ task }} |
51 |
52 |
53 | Interval |
54 | {{ interval }} |
55 |
56 |
57 | Crontab |
58 | {{ crontab }} |
59 |
60 |
61 | Kwargs |
62 | {{ kwargs }} |
63 |
64 |
65 | One Off |
66 | {{ one_off }} |
67 |
68 |
69 | Start Time |
70 | {{ start_time }} |
71 |
72 |
73 | Enabled |
74 | {{ enabled }} |
75 |
76 |
77 | Description |
78 | {{ description }} |
79 |
80 |
81 |
82 |
83 | {% endif %}
84 |
85 |
86 |
87 |
88 | {% endblock %}
89 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/task_list.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | 任务列表
5 | {% endblock %}
6 | {% block style %}
7 |
12 | {% endblock %}
13 | {% block page-wrapper %}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | -
22 | Dashboard
23 |
24 | -
25 | Task List
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | Note!! 红色代表连接失败,蓝色代表已关闭,绿色代表正在运行
36 |
37 |
38 |
39 |
40 | {#
#}
41 |
42 |
43 |
44 |
45 | Scanner |
46 | Name |
47 | Enable |
48 | Start Time |
49 | One Off |
50 | Details |
51 |
52 |
53 |
54 | {% for task in node_task %}
55 | {% for info in task.info %}
56 |
57 | {{ task.scanner }} |
58 | {{ info.name }} |
59 | {{ info.enable }} |
60 | {{ info.start_time }} |
61 | {{ info.one_off }} |
62 | |
63 |
64 | {% endfor %}
65 | {% endfor %}
66 |
67 |
68 |
69 |
70 |
71 |
72 | {% endblock %}
73 | {#{% block scripts_end %}#}
74 | {# #}
78 | {# #}
79 | {#{% endblock %}#}
80 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/html/vul_type_add.html:
--------------------------------------------------------------------------------
1 | {% extends "dashboard/base.html" %}
2 | {% load static %}
3 | {% block title %}
4 | Add Vulnerability type
5 | {% endblock %}
6 | {% block scripts_head %}
7 |
8 |
9 | {% endblock %}
10 | {% block page-wrapper %}
11 | {% include "dashboard/section/modal.html" %}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | -
20 | Dashboard
21 |
22 | -
23 | Add Vulnerability type
24 |
25 |
26 |
27 |
28 |
29 |
30 |
38 |
39 |
40 |
41 |
42 | {% endblock %}
43 |
--------------------------------------------------------------------------------
/dashboard/templates/dashboard/section/modal.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/dashboard/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/dashboard/urls.py:
--------------------------------------------------------------------------------
1 | from django.conf.urls import url
2 | from . import views
3 | urlpatterns = [
4 | url(r'^$', views.index, name="index"),
5 | url(r'^login/', views.login, name="login"),
6 | url(r'logout/', views.logout, name="logout"),
7 | # url(r'create/', views.create, name="create"),
8 | url(r'create_scanner/', views.create_scanner, name="create_scanner"),
9 | url(r'scanner_list/', views.scanner_list, name="scanner_list"),
10 | url(r'scanner_list_api/', views.scanner_list_api, name="scanner_list_api"),
11 | url(r'scanner/(?P[\S]*)', views.scanner, name="scanner"),
12 | url(r'scanner_oper/', views.scanner_oper, name="scanner_oper"),
13 | url(r'scanner_update/', views.scanner_update, name="scanner_update"),
14 | url(r'search_log/', views.search_log, name="search_log"),
15 | url(r'search_log_api/', views.search_log_api, name="search_log_api"),
16 | url(r'search_log_del/', views.deletelog, name="search_log_del"),
17 | url(r'zmap_scan_task/', views.zmap_scan_task, name="zmap_scan_task"),
18 | url(r'create_zmap_task/', views.create_zmap_scan_task, name="create_zmap_task"),
19 | url(r'nmap_scan_task/', views.nmap_scan_task, name="nmap_scan_task"),
20 | url(r'create_nmap_task/', views.create_nmap_scan_task, name="create_nmap_task"),
21 | url(r'scan_task_list/', views.scan_task_list, name="scan_task_list"),
22 | url(r'get_task_detail/', views.get_task_detail, name="get_task_detail"),
23 | url(r'poc/', views.poc, name="poc"),
24 | url(r'poc_edit/', views.poc_edit, name="poc_edit"),
25 | url(r'poc_del/', views.poc_delete, name="poc_del"),
26 | url(r'poc_run/', views.poc_run, name="poc_run"),
27 | url(r'poc_list/', views.poc_list, name="poc_list"),
28 | url(r'poc_detail/', views.poc_detail, name="poc_detail"),
29 | url(r'product/', views.product, name="product"),
30 | url(r'product_add/', views.add_product, name="product_add"),
31 | url(r'product_list/', views.product_list, name="product_list"),
32 | url(r'product_edit/', views.product_edit, name="product_edit"),
33 | url(r'product_update/', views.product_update, name="product_update"),
34 | url(r'vul_add/', views.add_vul_type, name="vul_add"),
35 |
36 | ]
37 |
--------------------------------------------------------------------------------
/demo/选区_029.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/demo/选区_029.png
--------------------------------------------------------------------------------
/demo/选区_030.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/demo/选区_030.png
--------------------------------------------------------------------------------
/demo/选区_031.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/demo/选区_031.png
--------------------------------------------------------------------------------
/esapi/Elasticsearch_vul.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # coding = utf-8
3 | __all__ = ["ElastciSearch"]
4 | __doc__ = """
5 |
6 | ElasticSearch 的操作
7 | os:linux;app:wordpress;ip:210.43.32.32/16;
8 | """
9 |
10 | from elasticsearch import Elasticsearch
11 | from config.baseconfig import ELASTICSEARCH_HOST_LIST, VUL_DOC_TYPE, VUL_INDEX_NAME
12 |
13 |
14 | class ElastciSearch(object):
15 |
16 | def __init__(self):
17 | self.es = Elasticsearch(hosts=ELASTICSEARCH_HOST_LIST)
18 | self.index_name = VUL_INDEX_NAME
19 | self.doc_type = VUL_DOC_TYPE
20 |
21 | def search(self, poc_id):
22 | data = {
23 | "query": {
24 | "match": {
25 | "POCID": str(poc_id)
26 | }
27 | }
28 | }
29 | res = self.es.search(index=self.index_name, doc_type=self.doc_type, body=data, scroll='1m')
30 | hits = []
31 | hits += res["hits"]["hits"]
32 | scroll_id = res["_scroll_id"]
33 | while True:
34 | hit = self.es.scroll(scroll_id=scroll_id, scroll="1m")["hits"]["hits"]
35 | hits += hit
36 | if hit == []:
37 | break
38 | return hits
39 |
40 |
41 | def main():
42 | es = ElastciSearch()
43 | res = es.search(1)
44 | print(res)
45 |
46 |
47 | if __name__ == '__main__':
48 | main()
49 |
--------------------------------------------------------------------------------
/esapi/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/esapi/__init__.py
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import os
3 | import sys
4 |
5 | if __name__ == "__main__":
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SearchApp.settings")
7 | try:
8 | from django.core.management import execute_from_command_line
9 | except ImportError as exc:
10 | raise ImportError(
11 | "Couldn't import Django. Are you sure it's installed and "
12 | "available on your PYTHONPATH environment variable? Did you "
13 | "forget to activate a virtual environment?"
14 | ) from exc
15 | execute_from_command_line(sys.argv)
16 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | backcall==0.1.0
2 | certifi==2018.4.16
3 | chardet==3.0.4
4 | decorator==4.3.0
5 | Django==2.1.7
6 | elasticsearch==6.3.1
7 | idna==2.6
8 | ipython==6.4.0
9 | ipython-genutils==0.2.0
10 | jedi==0.12.0
11 | lxml==4.3.3
12 | netifaces==0.10.7
13 | parso==0.2.0
14 | pexpect==4.5.0
15 | pickleshare==0.7.4
16 | prompt-toolkit==1.0.15
17 | ptyprocess==0.5.2
18 | Pygments==2.2.0
19 | pytz==2018.4
20 | requests==2.20.0
21 | simplegeneric==0.8.1
22 | six==1.11.0
23 | traitlets==4.3.2
24 | urllib3==1.24.2
25 | wcwidth==0.1.7
26 | netaddr==0.7.19
27 |
--------------------------------------------------------------------------------
/search/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/__init__.py
--------------------------------------------------------------------------------
/search/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | # Register your models here.
3 |
--------------------------------------------------------------------------------
/search/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class SearchConfig(AppConfig):
5 | name = 'search'
6 |
--------------------------------------------------------------------------------
/search/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/migrations/__init__.py
--------------------------------------------------------------------------------
/search/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
5 |
6 | class SearchLog(models.Model):
7 | # 一条搜索记录
8 | # id
9 | searcher_ID = models.IntegerField(primary_key=True)
10 | # 访问者IP
11 | searcher_IP = models.GenericIPAddressField(protocol="ipv4")
12 | # 搜索时间
13 | searcher_date = models.DateTimeField(auto_now=True)
14 | # 搜索语法
15 | searcher_content = models.TextField()
16 |
17 | def __str__(self):
18 | return self.searcher_IP + ":::" + self.searcher_conten
--------------------------------------------------------------------------------
/search/static/search/css/bootstrap-reboot.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
3 | * Copyright 2011-2018 The Bootstrap Authors
4 | * Copyright 2011-2018 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */
--------------------------------------------------------------------------------
/search/static/search/css/data.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | overflow-x: hidden;
5 | color: white;
6 | background-color: #040E20;
7 | height: 100%;
8 | }
9 | .code_pre{
10 | color: #28FEFC;
11 | width: 500px;
12 | height: 250px;
13 | font-weight: bold;
14 | overflow: auto;
15 | overflow-x:hidden;
16 | }
17 |
18 | .ip-border{
19 | border: 1px solid #28FEFC;
20 | border-radius: 10px;
21 | }
22 |
--------------------------------------------------------------------------------
/search/static/search/css/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | background: url("../img/109221.jpg");
5 | background-size: cover;
6 | background-repeat:no-repeat;
7 | background-attachment:fixed;
8 | overflow-x: hidden;
9 | color: white;
10 | background-color: #040E20;
11 | height: 100%;
12 | }
13 |
14 | .place{
15 | height: 100px;
16 | }
17 |
18 | #search_eye {
19 | margin: 0 auto;
20 | width: 100%;
21 | height: 35%;
22 | text-align: center;
23 | }
24 |
25 | #search_frame {
26 | margin: 0 auto;
27 | width: 80%;
28 | height: 52px;
29 | text-align: center;
30 | /* background-color: blue */
31 | }
32 |
33 | #search_msg {
34 | margin: 0 auto;
35 | width: 100%;
36 | height: 52px;
37 | background-color: rgba(100, 100, 100, 0.7);
38 | border-radius: 25px;
39 | border-style: none;
40 | outline: none;
41 | text-align: center;
42 | font-size: 20px;
43 | color: white;
44 | }
45 |
46 | #search_frame h2 {
47 | font-size: 35px;
48 | color: #34A5DD;
49 | font-weight: bold;
50 | }
51 |
52 | ::-webkit-input-placeholder {
53 | /* WebKit browsers */
54 | color: white;
55 | }
56 |
57 | :-moz-placeholder {
58 | /* Mozilla Firefox 4 to 18 */
59 | color: white;
60 | }
61 |
62 | ::-moz-placeholder {
63 | /* Mozilla Firefox 19+ */
64 | color: white;
65 | }
66 |
67 | :-ms-input-placeholder {
68 | /* Internet Explorer 10+ */
69 | color: white;
70 | }
--------------------------------------------------------------------------------
/search/static/search/css/top/themes/image.css:
--------------------------------------------------------------------------------
1 | /* Image style */
2 | #scrollUp {
3 | background-image: url("../../../img/top.png");
4 | bottom: 20px;
5 | right: 20px;
6 | width: 38px; /* Width of image */
7 | height: 38px; /* Height of image */
8 | }
9 |
--------------------------------------------------------------------------------
/search/static/search/img/109221.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/static/search/img/109221.jpg
--------------------------------------------------------------------------------
/search/static/search/img/481285.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/static/search/img/481285.jpg
--------------------------------------------------------------------------------
/search/static/search/img/SearchLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/static/search/img/SearchLogo.png
--------------------------------------------------------------------------------
/search/static/search/img/eye.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/static/search/img/eye.png
--------------------------------------------------------------------------------
/search/static/search/img/top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/search/static/search/img/top.png
--------------------------------------------------------------------------------
/search/static/search/js/jquery.scrollUp.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * scrollup v2.4.1
3 | * Url: http://markgoodyear.com/labs/scrollup/
4 | * Copyright (c) Mark Goodyear — @markgdyr — http://markgoodyear.com
5 | * License: MIT
6 | */
7 | !function(l,o,e){"use strict";l.fn.scrollUp=function(o){l.data(e.body,"scrollUp")||(l.data(e.body,"scrollUp",!0),l.fn.scrollUp.init(o))},l.fn.scrollUp.init=function(r){var s,t,c,i,n,a,d,p=l.fn.scrollUp.settings=l.extend({},l.fn.scrollUp.defaults,r),f=!1;switch(d=p.scrollTrigger?l(p.scrollTrigger):l("",{id:p.scrollName,href:"#top"}),p.scrollTitle&&d.attr("title",p.scrollTitle),d.appendTo("body"),p.scrollImg||p.scrollTrigger||d.html(p.scrollText),d.css({display:"none",position:"fixed",zIndex:p.zIndex}),p.activeOverlay&&l("",{id:p.scrollName+"-active"}).css({position:"absolute",top:p.scrollDistance+"px",width:"100%",borderTop:"1px dotted"+p.activeOverlay,zIndex:p.zIndex}).appendTo("body"),p.animation){case"fade":s="fadeIn",t="fadeOut",c=p.animationSpeed;break;case"slide":s="slideDown",t="slideUp",c=p.animationSpeed;break;default:s="show",t="hide",c=0}i="top"===p.scrollFrom?p.scrollDistance:l(e).height()-l(o).height()-p.scrollDistance,n=l(o).scroll(function(){l(o).scrollTop()>i?f||(d[s](c),f=!0):f&&(d[t](c),f=!1)}),p.scrollTarget?"number"==typeof p.scrollTarget?a=p.scrollTarget:"string"==typeof p.scrollTarget&&(a=Math.floor(l(p.scrollTarget).offset().top)):a=0,d.click(function(o){o.preventDefault(),l("html, body").animate({scrollTop:a},p.scrollSpeed,p.easingType)})},l.fn.scrollUp.defaults={scrollName:"scrollUp",scrollDistance:300,scrollFrom:"top",scrollSpeed:300,easingType:"linear",animation:"fade",animationSpeed:200,scrollTrigger:!1,scrollTarget:!1,scrollText:"Scroll to top",scrollTitle:!1,scrollImg:!1,activeOverlay:!1,zIndex:2147483647},l.fn.scrollUp.destroy=function(r){l.removeData(e.body,"scrollUp"),l("#"+l.fn.scrollUp.settings.scrollName).remove(),l("#"+l.fn.scrollUp.settings.scrollName+"-active").remove(),l.fn.jquery.split(".")[1]>=7?l(o).off("scroll",r):l(o).unbind("scroll",r)},l.scrollUp=l.fn.scrollUp}(jQuery,window,document);
--------------------------------------------------------------------------------
/search/static/search/js/top.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | $.scrollUp({
3 | scrollName: 'scrollUp', // Element ID
4 | scrollDistance: 300, // Distance from top/bottom before showing element (px)
5 | scrollFrom: 'top', // 'top' or 'bottom'
6 | scrollSpeed: 300, // Speed back to top (ms)
7 | easingType: 'linear', // Scroll to top easing (see http://easings.net/)
8 | animation: 'fade', // Fade, slide, none
9 | animationSpeed: 200, // Animation speed (ms)
10 | scrollTrigger: false, // Set a custom triggering element. Can be an HTML string or jQuery object
11 | scrollTarget: false, // Set a custom target element for scrolling to. Can be element or number
12 | // scrollText: '', // Text for element, can contain HTML
13 | scrollTitle: false, // Set a custom title if required.
14 | scrollImg: true,
15 | activeOverlay: false, // Set CSS color to display scrollUp active point, e.g '#00FFFF'
16 | zIndex: 2147483647 // Z-Index for the overlay
17 | });
18 | });
--------------------------------------------------------------------------------
/search/templates/search/base.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 |
4 |
5 |
6 |
7 | {% block title %}SearchWebApp{% endblock %}
8 |
9 |
10 |
11 | {% block ex_style %}
12 |
13 | {% endblock %}
14 | {% block ex_script %}
15 | {% endblock %}
16 |
17 |
18 | {% block body %}
19 | {% endblock %}
20 |
21 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/search/templates/search/error.html:
--------------------------------------------------------------------------------
1 | {% extends 'search/base.html' %}
2 | {% load static %}
3 | {% block title %}
4 | {{ msg }}
5 | {% endblock %}
6 | {% block ex_style %}
7 |
8 | {% endblock %}
9 | {% block body %}
10 |
11 |
12 |
13 |
14 |
15 |
18 |
29 |
30 |
31 |
34 |
35 |
36 |
37 | {% endblock %}
38 |
--------------------------------------------------------------------------------
/search/templates/search/html/data.html:
--------------------------------------------------------------------------------
1 | {% extends 'search/base.html' %}
2 | {% load static %}
3 | {% block title %}
4 | {{ IP }} 的详细信息
5 | {% endblock %}
6 | {% block ex_style %}
7 |
8 |
9 | {% endblock %}
10 | {% block ex_script %}
11 |
12 | {% endblock %}
13 | {% block body %}
14 |
15 |
16 |
17 |
18 |
23 |
42 |
43 |
44 |
45 |
46 |
{{ IP }}
47 |
48 |
49 |
50 | 系统 |
51 | {{ OS }} |
52 |
53 |
54 | 洲 |
55 | {{ CONTINENT }} |
56 |
57 |
58 | 国家 |
59 | {{ COUNTRY }} |
60 |
61 |
62 | 省份 |
63 | {{ PROVINCE }} |
64 |
65 |
66 | 城市 |
67 | {{ CITY }} |
68 |
69 |
70 | 时区 |
71 | {{ TIME_ZONE }} |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
Ports
79 |
80 |
81 | {% for port in PORTS %}
82 |
83 | {% endfor %}
84 |
85 |
86 |
87 |
88 |
Services
89 | {% for ip in INFO %}
90 |
91 |
92 |
93 |
{{ ip.PORT }}
94 |
{{ ip.PROTOCOL.0 }}
95 |
{{ ip.PROTOCOL.1 }}
96 |
97 |
98 |
{{ ip.SERVER }}
99 |
{{ ip.SERVER_VERSION }}
100 |
{{ ip.BANNER }}
101 |
102 | {{ ip.HEADERS }}{{ ip.CONTENT }}
103 |
104 |
105 |
106 |
107 | {% endfor %}
108 |
109 |
110 |
111 |
112 | {% endblock %}
--------------------------------------------------------------------------------
/search/templates/search/index.html:
--------------------------------------------------------------------------------
1 | {% extends 'search/base.html' %}
2 | {% load static %}
3 | {% block body %}
4 |
5 |
6 |
7 |
8 |

9 |
10 |
11 |
12 |
16 |
17 |
18 |
19 |
20 | {% endblock %}
--------------------------------------------------------------------------------
/search/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/search/urls.py:
--------------------------------------------------------------------------------
1 | from django.conf.urls import url
2 | from . import views
3 | urlpatterns = [
4 | url(r'^$', views.index, name='index'),
5 | url(r'^showresults/', views.results, name='results'),
6 | url(r'^result/ip/(?P[\S]*)$', views.result, name='result'),
7 | ]
8 |
--------------------------------------------------------------------------------
/static/admin/css/dashboard.css:
--------------------------------------------------------------------------------
1 | /* DASHBOARD */
2 |
3 | .dashboard .module table th {
4 | width: 100%;
5 | }
6 |
7 | .dashboard .module table td {
8 | white-space: nowrap;
9 | }
10 |
11 | .dashboard .module table td a {
12 | display: block;
13 | padding-right: .6em;
14 | }
15 |
16 | /* RECENT ACTIONS MODULE */
17 |
18 | .module ul.actionlist {
19 | margin-left: 0;
20 | }
21 |
22 | ul.actionlist li {
23 | list-style-type: none;
24 | overflow: hidden;
25 | text-overflow: ellipsis;
26 | -o-text-overflow: ellipsis;
27 | }
28 |
--------------------------------------------------------------------------------
/static/admin/css/fonts.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Roboto';
3 | src: url('../fonts/Roboto-Bold-webfont.woff');
4 | font-weight: 700;
5 | font-style: normal;
6 | }
7 |
8 | @font-face {
9 | font-family: 'Roboto';
10 | src: url('../fonts/Roboto-Regular-webfont.woff');
11 | font-weight: 400;
12 | font-style: normal;
13 | }
14 |
15 | @font-face {
16 | font-family: 'Roboto';
17 | src: url('../fonts/Roboto-Light-webfont.woff');
18 | font-weight: 300;
19 | font-style: normal;
20 | }
21 |
--------------------------------------------------------------------------------
/static/admin/css/login.css:
--------------------------------------------------------------------------------
1 | /* LOGIN FORM */
2 |
3 | body.login {
4 | background: #f8f8f8;
5 | }
6 |
7 | .login #header {
8 | height: auto;
9 | padding: 5px 16px;
10 | }
11 |
12 | .login #header h1 {
13 | font-size: 18px;
14 | }
15 |
16 | .login #header h1 a {
17 | color: #fff;
18 | }
19 |
20 | .login #content {
21 | padding: 20px 20px 0;
22 | }
23 |
24 | .login #container {
25 | background: #fff;
26 | border: 1px solid #eaeaea;
27 | border-radius: 4px;
28 | overflow: hidden;
29 | width: 28em;
30 | min-width: 300px;
31 | margin: 100px auto;
32 | }
33 |
34 | .login #content-main {
35 | width: 100%;
36 | }
37 |
38 | .login .form-row {
39 | padding: 4px 0;
40 | float: left;
41 | width: 100%;
42 | border-bottom: none;
43 | }
44 |
45 | .login .form-row label {
46 | padding-right: 0.5em;
47 | line-height: 2em;
48 | font-size: 1em;
49 | clear: both;
50 | color: #333;
51 | }
52 |
53 | .login .form-row #id_username, .login .form-row #id_password {
54 | clear: both;
55 | padding: 8px;
56 | width: 100%;
57 | -webkit-box-sizing: border-box;
58 | -moz-box-sizing: border-box;
59 | box-sizing: border-box;
60 | }
61 |
62 | .login span.help {
63 | font-size: 10px;
64 | display: block;
65 | }
66 |
67 | .login .submit-row {
68 | clear: both;
69 | padding: 1em 0 0 9.4em;
70 | margin: 0;
71 | border: none;
72 | background: none;
73 | text-align: left;
74 | }
75 |
76 | .login .password-reset-link {
77 | text-align: center;
78 | }
79 |
--------------------------------------------------------------------------------
/static/admin/css/responsive_rtl.css:
--------------------------------------------------------------------------------
1 | /* TABLETS */
2 |
3 | @media (max-width: 1024px) {
4 | [dir="rtl"] .colMS {
5 | margin-right: 0;
6 | }
7 |
8 | [dir="rtl"] #user-tools {
9 | text-align: right;
10 | }
11 |
12 | [dir="rtl"] #changelist .actions label {
13 | padding-left: 10px;
14 | padding-right: 0;
15 | }
16 |
17 | [dir="rtl"] #changelist .actions select {
18 | margin-left: 0;
19 | margin-right: 15px;
20 | }
21 |
22 | [dir="rtl"] .change-list .filtered .results,
23 | [dir="rtl"] .change-list .filtered .paginator,
24 | [dir="rtl"] .filtered #toolbar,
25 | [dir="rtl"] .filtered div.xfull,
26 | [dir="rtl"] .filtered .actions {
27 | margin-right: 0;
28 | margin-left: 230px;
29 | }
30 |
31 | [dir="rtl"] .inline-group ul.tools a.add,
32 | [dir="rtl"] .inline-group div.add-row a,
33 | [dir="rtl"] .inline-group .tabular tr.add-row td a {
34 | padding: 8px 26px 8px 10px;
35 | background-position: calc(100% - 8px) 9px;
36 | }
37 |
38 | [dir="rtl"] .related-widget-wrapper-link + .selector {
39 | margin-right: 0;
40 | margin-left: 15px;
41 | }
42 |
43 | [dir="rtl"] .selector .selector-filter label {
44 | margin-right: 0;
45 | margin-left: 8px;
46 | }
47 |
48 | [dir="rtl"] .object-tools li {
49 | float: right;
50 | }
51 |
52 | [dir="rtl"] .object-tools li + li {
53 | margin-left: 0;
54 | margin-right: 15px;
55 | }
56 |
57 | [dir="rtl"] .dashboard .module table td a {
58 | padding-left: 0;
59 | padding-right: 16px;
60 | }
61 | }
62 |
63 | /* MOBILE */
64 |
65 | @media (max-width: 767px) {
66 | [dir="rtl"] .change-list .filtered .results,
67 | [dir="rtl"] .change-list .filtered .paginator,
68 | [dir="rtl"] .filtered #toolbar,
69 | [dir="rtl"] .filtered div.xfull,
70 | [dir="rtl"] .filtered .actions {
71 | margin-left: 0;
72 | }
73 |
74 | [dir="rtl"] .aligned .add-another,
75 | [dir="rtl"] .aligned .related-lookup,
76 | [dir="rtl"] .aligned .datetimeshortcuts {
77 | margin-left: 0;
78 | margin-right: 15px;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/static/admin/css/vendor/select2/LICENSE-SELECT2.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2012-2015 Kevin Brown, Igor Vaynberg, and Select2 contributors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/static/admin/fonts/README.txt:
--------------------------------------------------------------------------------
1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
2 | Weights used in this project: Light (300), Regular (400), Bold (700)
3 |
--------------------------------------------------------------------------------
/static/admin/fonts/Roboto-Bold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/admin/fonts/Roboto-Bold-webfont.woff
--------------------------------------------------------------------------------
/static/admin/fonts/Roboto-Light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/admin/fonts/Roboto-Light-webfont.woff
--------------------------------------------------------------------------------
/static/admin/fonts/Roboto-Regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/admin/fonts/Roboto-Regular-webfont.woff
--------------------------------------------------------------------------------
/static/admin/img/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Code Charm Ltd
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/static/admin/img/README.txt:
--------------------------------------------------------------------------------
1 | All icons are taken from Font Awesome (http://fontawesome.io/) project.
2 | The Font Awesome font is licensed under the SIL OFL 1.1:
3 | - http://scripts.sil.org/OFL
4 |
5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG
6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license
7 | in current folder).
8 |
--------------------------------------------------------------------------------
/static/admin/img/calendar-icons.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/static/admin/img/gis/move_vertex_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/admin/img/gis/move_vertex_on.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/admin/img/icon-addlink.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-alert.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-calendar.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/static/admin/img/icon-changelink.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-clock.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/static/admin/img/icon-deletelink.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-no.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-unknown-alt.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-unknown.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/icon-yes.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/inline-delete.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/search.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/selector-icons.svg:
--------------------------------------------------------------------------------
1 |
35 |
--------------------------------------------------------------------------------
/static/admin/img/sorting-icons.svg:
--------------------------------------------------------------------------------
1 |
20 |
--------------------------------------------------------------------------------
/static/admin/img/tooltag-add.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/img/tooltag-arrowright.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/static/admin/js/actions.min.js:
--------------------------------------------------------------------------------
1 | (function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n();
2 | a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){var a;c===g.length?(a=!0,l()):(a=!1,p());return a})};a(b.counterContainer).show();
3 | a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().click(function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).click(function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).click(function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).click(function(c){c||(c=window.event);var d=c.target?c.target:c.srcElement;if(f&&
4 | a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input",function(){k=!0});a('form#changelist-form button[name="index"]').click(function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});
5 | a('form#changelist-form input[name="_save"]').click(function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};
6 | a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e=a("tr input.action-select");0' + gettext("Show") +
11 | ')');
12 | }
13 | });
14 | // Add toggle to anchor tag
15 | $("fieldset.collapse a.collapse-toggle").click(function(ev) {
16 | if ($(this).closest("fieldset").hasClass("collapsed")) {
17 | // Show
18 | $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]);
19 | } else {
20 | // Hide
21 | $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]);
22 | }
23 | return false;
24 | });
25 | });
26 | })(django.jQuery);
27 |
--------------------------------------------------------------------------------
/static/admin/js/collapse.min.js:
--------------------------------------------------------------------------------
1 | var $jscomp={scope:{},findInternal:function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e'+gettext("Show")+")")});a("fieldset.collapse a.collapse-toggle").click(function(c){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]):a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",
5 | [a(this).attr("id")]);return!1})})})(django.jQuery);
6 |
--------------------------------------------------------------------------------
/static/admin/js/jquery.init.js:
--------------------------------------------------------------------------------
1 | /*global django:true, jQuery:false*/
2 | /* Puts the included jQuery into our own namespace using noConflict and passing
3 | * it 'true'. This ensures that the included jQuery doesn't pollute the global
4 | * namespace (i.e. this preserves pre-existing values for both window.$ and
5 | * window.jQuery).
6 | */
7 | var django = django || {};
8 | django.jQuery = jQuery.noConflict(true);
9 |
--------------------------------------------------------------------------------
/static/admin/js/popup_response.js:
--------------------------------------------------------------------------------
1 | /*global opener */
2 | (function() {
3 | 'use strict';
4 | var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
5 | switch(initData.action) {
6 | case 'change':
7 | opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value);
8 | break;
9 | case 'delete':
10 | opener.dismissDeleteRelatedObjectPopup(window, initData.value);
11 | break;
12 | default:
13 | opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj);
14 | break;
15 | }
16 | })();
17 |
--------------------------------------------------------------------------------
/static/admin/js/prepopulate.js:
--------------------------------------------------------------------------------
1 | /*global URLify*/
2 | (function($) {
3 | 'use strict';
4 | $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) {
5 | /*
6 | Depends on urlify.js
7 | Populates a selected field with the values of the dependent fields,
8 | URLifies and shortens the string.
9 | dependencies - array of dependent fields ids
10 | maxLength - maximum length of the URLify'd string
11 | allowUnicode - Unicode support of the URLify'd string
12 | */
13 | return this.each(function() {
14 | var prepopulatedField = $(this);
15 |
16 | var populate = function() {
17 | // Bail if the field's value has been changed by the user
18 | if (prepopulatedField.data('_changed')) {
19 | return;
20 | }
21 |
22 | var values = [];
23 | $.each(dependencies, function(i, field) {
24 | field = $(field);
25 | if (field.val().length > 0) {
26 | values.push(field.val());
27 | }
28 | });
29 | prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode));
30 | };
31 |
32 | prepopulatedField.data('_changed', false);
33 | prepopulatedField.change(function() {
34 | prepopulatedField.data('_changed', true);
35 | });
36 |
37 | if (!prepopulatedField.val()) {
38 | $(dependencies.join(',')).keyup(populate).change(populate).focus(populate);
39 | }
40 | });
41 | };
42 | })(django.jQuery);
43 |
--------------------------------------------------------------------------------
/static/admin/js/prepopulate.min.js:
--------------------------------------------------------------------------------
1 | (function(c){c.fn.prepopulate=function(e,f,g){return this.each(function(){var a=c(this),b=function(){if(!a.data("_changed")){var b=[];c.each(e,function(a,d){d=c(d);01&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/ca.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/cs.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/da.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/de.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/el.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/en.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/es.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/et.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/eu.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/fa.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها میتوانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/fi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/fr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/gl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/he.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/hi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/hr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/hu.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/id.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/is.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/it.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/ja.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/km.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/ko.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/lt.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/lv.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/mk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/ms.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/nb.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/nl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/pl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/pt-BR.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/pt.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/ro.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/ru.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/sk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/sr-Cyrl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/sr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/sv.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/th.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/tr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/uk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/vi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/zh-CN.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/select2/i18n/zh-TW.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2007-2012 Steven Levithan
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/static/search/css/bootstrap-reboot.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
3 | * Copyright 2011-2018 The Bootstrap Authors
4 | * Copyright 2011-2018 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */
--------------------------------------------------------------------------------
/static/search/css/data.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | overflow-x: hidden;
5 | color: white;
6 | background-color: #040E20;
7 | height: 100%;
8 | }
9 | .code_pre{
10 | color: white;
11 | width: 400px;
12 | height: 250px;
13 | }
--------------------------------------------------------------------------------
/static/search/css/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | background: url("../img/109221.jpg");
5 | background-size: cover;
6 | background-repeat:no-repeat;
7 | background-attachment:fixed;
8 | overflow-x: hidden;
9 | color: white;
10 | background-color: #040E20;
11 | height: 100%;
12 | }
13 |
14 | .place{
15 | height: 100px;
16 | }
17 |
18 | #search_eye {
19 | margin: 0 auto;
20 | width: 100%;
21 | height: 35%;
22 | text-align: center;
23 | }
24 |
25 | #search_frame {
26 | margin: 0 auto;
27 | width: 80%;
28 | height: 52px;
29 | text-align: center;
30 | /* background-color: blue */
31 | }
32 |
33 | #search_msg {
34 | margin: 0 auto;
35 | width: 100%;
36 | height: 52px;
37 | background-color: rgba(100, 100, 100, 0.7);
38 | border-radius: 25px;
39 | border-style: none;
40 | outline: none;
41 | text-align: center;
42 | font-size: 20px;
43 | color: white;
44 | }
45 |
46 | #search_frame h2 {
47 | font-size: 35px;
48 | color: #34A5DD;
49 | font-weight: bold;
50 | }
51 |
52 | ::-webkit-input-placeholder {
53 | /* WebKit browsers */
54 | color: white;
55 | }
56 |
57 | :-moz-placeholder {
58 | /* Mozilla Firefox 4 to 18 */
59 | color: white;
60 | }
61 |
62 | ::-moz-placeholder {
63 | /* Mozilla Firefox 19+ */
64 | color: white;
65 | }
66 |
67 | :-ms-input-placeholder {
68 | /* Internet Explorer 10+ */
69 | color: white;
70 | }
--------------------------------------------------------------------------------
/static/search/css/top/themes/image.css:
--------------------------------------------------------------------------------
1 | /* Image style */
2 | #scrollUp {
3 | background-image: url("../../../img/top.png");
4 | bottom: 20px;
5 | right: 20px;
6 | width: 38px; /* Width of image */
7 | height: 38px; /* Height of image */
8 | }
9 |
--------------------------------------------------------------------------------
/static/search/img/109221.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/search/img/109221.jpg
--------------------------------------------------------------------------------
/static/search/img/481285.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/search/img/481285.jpg
--------------------------------------------------------------------------------
/static/search/img/SearchLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/search/img/SearchLogo.png
--------------------------------------------------------------------------------
/static/search/img/eye.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/search/img/eye.png
--------------------------------------------------------------------------------
/static/search/img/top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/imjdl/SearchApp/44694e20d87b05c102a01b0169ee0f5f52b8912f/static/search/img/top.png
--------------------------------------------------------------------------------
/static/search/js/jquery.scrollUp.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * scrollup v2.4.1
3 | * Url: http://markgoodyear.com/labs/scrollup/
4 | * Copyright (c) Mark Goodyear — @markgdyr — http://markgoodyear.com
5 | * License: MIT
6 | */
7 | !function(l,o,e){"use strict";l.fn.scrollUp=function(o){l.data(e.body,"scrollUp")||(l.data(e.body,"scrollUp",!0),l.fn.scrollUp.init(o))},l.fn.scrollUp.init=function(r){var s,t,c,i,n,a,d,p=l.fn.scrollUp.settings=l.extend({},l.fn.scrollUp.defaults,r),f=!1;switch(d=p.scrollTrigger?l(p.scrollTrigger):l("",{id:p.scrollName,href:"#top"}),p.scrollTitle&&d.attr("title",p.scrollTitle),d.appendTo("body"),p.scrollImg||p.scrollTrigger||d.html(p.scrollText),d.css({display:"none",position:"fixed",zIndex:p.zIndex}),p.activeOverlay&&l("",{id:p.scrollName+"-active"}).css({position:"absolute",top:p.scrollDistance+"px",width:"100%",borderTop:"1px dotted"+p.activeOverlay,zIndex:p.zIndex}).appendTo("body"),p.animation){case"fade":s="fadeIn",t="fadeOut",c=p.animationSpeed;break;case"slide":s="slideDown",t="slideUp",c=p.animationSpeed;break;default:s="show",t="hide",c=0}i="top"===p.scrollFrom?p.scrollDistance:l(e).height()-l(o).height()-p.scrollDistance,n=l(o).scroll(function(){l(o).scrollTop()>i?f||(d[s](c),f=!0):f&&(d[t](c),f=!1)}),p.scrollTarget?"number"==typeof p.scrollTarget?a=p.scrollTarget:"string"==typeof p.scrollTarget&&(a=Math.floor(l(p.scrollTarget).offset().top)):a=0,d.click(function(o){o.preventDefault(),l("html, body").animate({scrollTop:a},p.scrollSpeed,p.easingType)})},l.fn.scrollUp.defaults={scrollName:"scrollUp",scrollDistance:300,scrollFrom:"top",scrollSpeed:300,easingType:"linear",animation:"fade",animationSpeed:200,scrollTrigger:!1,scrollTarget:!1,scrollText:"Scroll to top",scrollTitle:!1,scrollImg:!1,activeOverlay:!1,zIndex:2147483647},l.fn.scrollUp.destroy=function(r){l.removeData(e.body,"scrollUp"),l("#"+l.fn.scrollUp.settings.scrollName).remove(),l("#"+l.fn.scrollUp.settings.scrollName+"-active").remove(),l.fn.jquery.split(".")[1]>=7?l(o).off("scroll",r):l(o).unbind("scroll",r)},l.scrollUp=l.fn.scrollUp}(jQuery,window,document);
--------------------------------------------------------------------------------
/static/search/js/top.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | $.scrollUp({
3 | scrollName: 'scrollUp', // Element ID
4 | scrollDistance: 300, // Distance from top/bottom before showing element (px)
5 | scrollFrom: 'top', // 'top' or 'bottom'
6 | scrollSpeed: 300, // Speed back to top (ms)
7 | easingType: 'linear', // Scroll to top easing (see http://easings.net/)
8 | animation: 'fade', // Fade, slide, none
9 | animationSpeed: 200, // Animation speed (ms)
10 | scrollTrigger: false, // Set a custom triggering element. Can be an HTML string or jQuery object
11 | scrollTarget: false, // Set a custom target element for scrolling to. Can be element or number
12 | // scrollText: '', // Text for element, can contain HTML
13 | scrollTitle: false, // Set a custom title if required.
14 | scrollImg: true,
15 | activeOverlay: false, // Set CSS color to display scrollUp active point, e.g '#00FFFF'
16 | zIndex: 2147483647 // Z-Index for the overlay
17 | });
18 | });
--------------------------------------------------------------------------------
/templates/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 404 Not Found
6 |
7 |
8 | Not Found
9 | The requested URL {{ path }} not found on this server.
10 |
11 | Apache/2.1.7 (Windows) Server at elloit.xin Port 80
12 |
13 |
--------------------------------------------------------------------------------
/templates/admin/base_site.html:
--------------------------------------------------------------------------------
1 | {% extends "admin/base.html" %}
2 |
3 | {% block title %}SearchWebApp{% endblock %}
4 | {% block branding %}
5 |
6 | {% endblock %}
7 |
8 | {% block nav-global %}{% endblock %}
9 |
--------------------------------------------------------------------------------