├── .gitignore ├── README.md ├── apps ├── accounts │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── scripts │ │ ├── __init__.py │ │ ├── retired_account_cleaner.py │ │ └── sync_dingding_user_id.py │ ├── templatetags │ │ ├── __init__.py │ │ └── custom_tags.py │ ├── tests.py │ ├── urls.py │ └── views │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── permission.py │ │ └── user.py ├── cmdb │ ├── __init__.py │ ├── admin.py │ ├── api │ │ ├── __init__.py │ │ ├── accessory.py │ │ ├── app.py │ │ ├── asset.py │ │ ├── department.py │ │ ├── idc.py │ │ ├── ip.py │ │ └── segment.py │ ├── apps.py │ ├── docs │ │ ├── accessory_template.xlsx │ │ ├── app_template.xls │ │ ├── network_devices_template.xls │ │ └── server_template.xls │ ├── forms.py │ ├── migrations │ │ └── __init__.py │ ├── models │ │ ├── __init__.py │ │ ├── accessory.py │ │ ├── asset.py │ │ ├── base.py │ │ └── business.py │ ├── scripts │ │ ├── __init__.py │ │ ├── cmdb-win-create-task.bat │ │ ├── cmdb.ini │ │ ├── cmdb_add_authorized_keys.py │ │ ├── cmdb_agent.py │ │ ├── cmdb_agent_old.py │ │ ├── cmdb_data_inspection.py │ │ ├── cmdb_esx_info.py │ │ ├── cmdb_ip_monitor.py │ │ ├── cmdb_linux_agent │ │ ├── cmdb_mac_ip_monitor.py │ │ ├── cmdb_openstack_info.py │ │ ├── cmdb_win_agent.exe │ │ ├── cmdb_win_agent.go │ │ ├── dbms_linux_agent │ │ └── get_idle_host.py │ ├── tests.py │ ├── urls.py │ ├── utils │ │ ├── __init__.py │ │ ├── gitlib.py │ │ ├── jenkins_api.py │ │ └── wex_api.py │ └── views │ │ ├── __init__.py │ │ ├── accessory.py │ │ ├── business.py │ │ ├── cabinet.py │ │ ├── caddy.py │ │ ├── charts.py │ │ ├── cpu.py │ │ ├── disk.py │ │ ├── idc.py │ │ ├── inventory_record.py │ │ ├── ip.py │ │ ├── jump_wire.py │ │ ├── maintenance.py │ │ ├── memory.py │ │ ├── net_device.py │ │ ├── network_adapter.py │ │ ├── network_cable.py │ │ ├── optical_transceiver.py │ │ ├── segment.py │ │ ├── server.py │ │ └── vlan.py ├── common │ ├── __init__.py │ ├── admin.py │ ├── migrations │ │ └── __init__.py │ ├── mixins.py │ ├── models.py │ ├── tests.py │ ├── urls.py │ ├── utils │ │ ├── __init__.py │ │ ├── base.py │ │ ├── config.py │ │ ├── cryptor.py │ │ ├── ding_api.py │ │ ├── email_api.py │ │ ├── http_api.py │ │ ├── json_encoder.py │ │ ├── magicbox_api.py │ │ ├── path_utils.py │ │ ├── redis_api.py │ │ ├── switch.py │ │ └── zabbix_api.py │ └── views.py ├── dns_pod │ ├── __init__.py │ ├── admin.py │ ├── api.py │ ├── apps.py │ ├── charts.py │ ├── forms.py │ ├── models.py │ ├── serializers.py │ ├── signals │ │ ├── handlers.py │ │ └── signals.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── gunicorn.conf.py ├── job │ ├── __init__.py │ ├── admin.py │ ├── api │ │ ├── inventory.py │ │ ├── job.py │ │ ├── playbook.py │ │ └── scripts.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models │ │ ├── __init__.py │ │ ├── continuous_deploy.py │ │ └── job.py │ ├── serializers │ │ ├── __init__.py │ │ └── config.py │ ├── tasks │ │ ├── ansible_api.py │ │ ├── ansible_runner.py │ │ ├── gen_resource.py │ │ ├── paramiko_runner.py │ │ ├── redis.py │ │ ├── task.py │ │ └── task_thread.py │ ├── tests.py │ ├── urls.py │ ├── utils │ │ ├── __init__.py │ │ └── config.py │ ├── views │ │ ├── __init__.py │ │ ├── charts.py │ │ ├── cmd_execute.py │ │ ├── config.py │ │ ├── file.py │ │ ├── galaxy.py │ │ ├── inventory.py │ │ ├── job.py │ │ ├── job_periodic_task.py │ │ ├── playbook.py │ │ ├── scripts.py │ │ └── task.py │ └── ws │ │ ├── __init__.py │ │ └── consumer.py ├── manage.py ├── shutdown.sh ├── ssh │ ├── __init__.py │ ├── admin.py │ ├── api │ │ └── __init__.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ │ └── __init__.py │ ├── models │ │ ├── __init__.py │ │ ├── host_user.py │ │ └── perilous_command.py │ ├── tests.py │ ├── urls.py │ ├── utils │ │ ├── __init__.py │ │ ├── executor.py │ │ └── host_user.py │ └── views │ │ ├── __init__.py │ │ ├── charts.py │ │ ├── host_user.py │ │ ├── perilous_cmd.py │ │ ├── perilous_cmd_check.py │ │ ├── perilous_cmd_grant.py │ │ └── perilous_cmd_group.py ├── startup.sh ├── static │ ├── ace │ │ ├── ace.js │ │ ├── ace_init.js │ │ ├── ext-beautify.js │ │ ├── ext-chromevox.js │ │ ├── ext-elastic_tabstops_lite.js │ │ ├── ext-emmet.js │ │ ├── ext-error_marker.js │ │ ├── ext-keybinding_menu.js │ │ ├── ext-language_tools.js │ │ ├── ext-linking.js │ │ ├── ext-modelist.js │ │ ├── ext-old_ie.js │ │ ├── ext-searchbox.js │ │ ├── ext-settings_menu.js │ │ ├── ext-spellcheck.js │ │ ├── ext-split.js │ │ ├── ext-static_highlight.js │ │ ├── ext-statusbar.js │ │ ├── ext-textarea.js │ │ ├── ext-themelist.js │ │ ├── ext-whitespace.js │ │ ├── keybinding-emacs.js │ │ ├── keybinding-vim.js │ │ ├── mode-abap.js │ │ ├── mode-abc.js │ │ ├── mode-actionscript.js │ │ ├── mode-ada.js │ │ ├── mode-apache_conf.js │ │ ├── mode-applescript.js │ │ ├── mode-asciidoc.js │ │ ├── mode-assembly_x86.js │ │ ├── mode-autohotkey.js │ │ ├── mode-batchfile.js │ │ ├── mode-bro.js │ │ ├── mode-c9search.js │ │ ├── mode-c_cpp.js │ │ ├── mode-cirru.js │ │ ├── mode-clojure.js │ │ ├── mode-cobol.js │ │ ├── mode-coffee.js │ │ ├── mode-coldfusion.js │ │ ├── mode-csharp.js │ │ ├── mode-css.js │ │ ├── mode-curly.js │ │ ├── mode-d.js │ │ ├── mode-dart.js │ │ ├── mode-diff.js │ │ ├── mode-django.js │ │ ├── mode-dockerfile.js │ │ ├── mode-dot.js │ │ ├── mode-drools.js │ │ ├── mode-eiffel.js │ │ ├── mode-ejs.js │ │ ├── mode-elixir.js │ │ ├── mode-elm.js │ │ ├── mode-erlang.js │ │ ├── mode-forth.js │ │ ├── mode-fortran.js │ │ ├── mode-ftl.js │ │ ├── mode-gcode.js │ │ ├── mode-gherkin.js │ │ ├── mode-gitignore.js │ │ ├── mode-glsl.js │ │ ├── mode-gobstones.js │ │ ├── mode-golang.js │ │ ├── mode-graphqlschema.js │ │ ├── mode-groovy.js │ │ ├── mode-haml.js │ │ ├── mode-handlebars.js │ │ ├── mode-haskell.js │ │ ├── mode-haskell_cabal.js │ │ ├── mode-haxe.js │ │ ├── mode-hjson.js │ │ ├── mode-html.js │ │ ├── mode-html_elixir.js │ │ ├── mode-html_ruby.js │ │ ├── mode-ini.js │ │ ├── mode-io.js │ │ ├── mode-jack.js │ │ ├── mode-jade.js │ │ ├── mode-java.js │ │ ├── mode-javascript.js │ │ ├── mode-json.js │ │ ├── mode-jsoniq.js │ │ ├── mode-jsp.js │ │ ├── mode-jsx.js │ │ ├── mode-julia.js │ │ ├── mode-kotlin.js │ │ ├── mode-latex.js │ │ ├── mode-lean.js │ │ ├── mode-less.js │ │ ├── mode-liquid.js │ │ ├── mode-lisp.js │ │ ├── mode-live_script.js │ │ ├── mode-livescript.js │ │ ├── mode-logiql.js │ │ ├── mode-lsl.js │ │ ├── mode-lua.js │ │ ├── mode-luapage.js │ │ ├── mode-lucene.js │ │ ├── mode-makefile.js │ │ ├── mode-markdown.js │ │ ├── mode-mask.js │ │ ├── mode-matlab.js │ │ ├── mode-mavens_mate_log.js │ │ ├── mode-maze.js │ │ ├── mode-mel.js │ │ ├── mode-mips_assembler.js │ │ ├── mode-mipsassembler.js │ │ ├── mode-mushcode.js │ │ ├── mode-mysql.js │ │ ├── mode-nix.js │ │ ├── mode-nsis.js │ │ ├── mode-objectivec.js │ │ ├── mode-ocaml.js │ │ ├── mode-pascal.js │ │ ├── mode-perl.js │ │ ├── mode-pgsql.js │ │ ├── mode-php.js │ │ ├── mode-pig.js │ │ ├── mode-plain_text.js │ │ ├── mode-powershell.js │ │ ├── mode-praat.js │ │ ├── mode-prolog.js │ │ ├── mode-properties.js │ │ ├── mode-protobuf.js │ │ ├── mode-python.js │ │ ├── mode-r.js │ │ ├── mode-razor.js │ │ ├── mode-rdoc.js │ │ ├── mode-rhtml.js │ │ ├── mode-rst.js │ │ ├── mode-ruby.js │ │ ├── mode-rust.js │ │ ├── mode-sass.js │ │ ├── mode-scad.js │ │ ├── mode-scala.js │ │ ├── mode-scheme.js │ │ ├── mode-scss.js │ │ ├── mode-sh.js │ │ ├── mode-sjs.js │ │ ├── mode-smarty.js │ │ ├── mode-snippets.js │ │ ├── mode-soy_template.js │ │ ├── mode-space.js │ │ ├── mode-sparql.js │ │ ├── mode-sql.js │ │ ├── mode-sqlserver.js │ │ ├── mode-stylus.js │ │ ├── mode-svg.js │ │ ├── mode-swift.js │ │ ├── mode-swig.js │ │ ├── mode-tcl.js │ │ ├── mode-tex.js │ │ ├── mode-text.js │ │ ├── mode-textile.js │ │ ├── mode-toml.js │ │ ├── mode-tsx.js │ │ ├── mode-turtle.js │ │ ├── mode-twig.js │ │ ├── mode-typescript.js │ │ ├── mode-vala.js │ │ ├── mode-vbscript.js │ │ ├── mode-velocity.js │ │ ├── mode-verilog.js │ │ ├── mode-vhdl.js │ │ ├── mode-wollok.js │ │ ├── mode-xml.js │ │ ├── mode-xquery.js │ │ ├── mode-yaml.js │ │ ├── snippets │ │ │ └── sql.js │ │ ├── theme-ambiance.js │ │ ├── theme-chaos.js │ │ ├── theme-chrome.js │ │ ├── theme-clouds.js │ │ ├── theme-clouds_midnight.js │ │ ├── theme-cobalt.js │ │ ├── theme-crimson_editor.js │ │ ├── theme-dawn.js │ │ ├── theme-dreamweaver.js │ │ ├── theme-eclipse.js │ │ ├── theme-github.js │ │ ├── theme-gob.js │ │ ├── theme-gruvbox.js │ │ ├── theme-idle_fingers.js │ │ ├── theme-iplastic.js │ │ ├── theme-katzenmilch.js │ │ ├── theme-kr_theme.js │ │ ├── theme-kuroir.js │ │ ├── theme-merbivore.js │ │ ├── theme-merbivore_soft.js │ │ ├── theme-mono_industrial.js │ │ ├── theme-monokai.js │ │ ├── theme-pastel_on_dark.js │ │ ├── theme-solarized_dark.js │ │ ├── theme-solarized_light.js │ │ ├── theme-sqlserver.js │ │ ├── theme-terminal.js │ │ ├── theme-textmate.js │ │ ├── theme-tomorrow.js │ │ ├── theme-tomorrow_night.js │ │ ├── theme-tomorrow_night_blue.js │ │ ├── theme-tomorrow_night_bright.js │ │ ├── theme-tomorrow_night_eighties.js │ │ ├── theme-twilight.js │ │ ├── theme-vibrant_ink.js │ │ ├── theme-xcode.js │ │ ├── worker-coffee.js │ │ ├── worker-css.js │ │ ├── worker-html.js │ │ ├── worker-javascript.js │ │ ├── worker-json.js │ │ ├── worker-lua.js │ │ ├── worker-php.js │ │ ├── worker-xml.js │ │ └── worker-xquery.js │ ├── 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 │ ├── bootsidemenu │ │ ├── .gitignore │ │ ├── README.md │ │ ├── css │ │ │ ├── BootSideMenu.css │ │ │ └── theme │ │ │ │ ├── darkblue.css │ │ │ │ ├── dracula.css │ │ │ │ ├── pinklady.css │ │ │ │ ├── somebook.css │ │ │ │ └── zenburn.css │ │ ├── js │ │ │ └── BootSideMenu.js │ │ └── test.html │ ├── bootstrap-3.3.7-dist │ │ ├── css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ ├── bootstrap-theme.min.css │ │ │ ├── bootstrap-theme.min.css.map │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ ├── bootstrap.min.css │ │ │ ├── bootstrap.min.css.map │ │ │ └── dashboard.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ └── npm.js │ ├── bootstrap-fileinput │ │ ├── css │ │ │ ├── fileinput-rtl.css │ │ │ ├── fileinput-rtl.min.css │ │ │ ├── fileinput.css │ │ │ └── fileinput.min.css │ │ ├── img │ │ │ ├── loading-sm.gif │ │ │ └── loading.gif │ │ ├── js │ │ │ ├── fileinput.js │ │ │ ├── fileinput.min.js │ │ │ ├── locales │ │ │ │ ├── LANG.js │ │ │ │ ├── ar.js │ │ │ │ ├── az.js │ │ │ │ ├── bg.js │ │ │ │ ├── ca.js │ │ │ │ ├── cr.js │ │ │ │ ├── cs.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── es.js │ │ │ │ ├── et.js │ │ │ │ ├── fa.js │ │ │ │ ├── fi.js │ │ │ │ ├── fr.js │ │ │ │ ├── gl.js │ │ │ │ ├── he.js │ │ │ │ ├── hu.js │ │ │ │ ├── id.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── ka.js │ │ │ │ ├── kr.js │ │ │ │ ├── kz.js │ │ │ │ ├── lt.js │ │ │ │ ├── nl.js │ │ │ │ ├── no.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt-BR.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sk.js │ │ │ │ ├── sl.js │ │ │ │ ├── sv.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── uk.js │ │ │ │ ├── uz.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh-TW.js │ │ │ │ └── zh.js │ │ │ └── plugins │ │ │ │ ├── piexif.js │ │ │ │ ├── piexif.min.js │ │ │ │ ├── purify.js │ │ │ │ ├── purify.min.js │ │ │ │ ├── sortable.js │ │ │ │ └── sortable.min.js │ │ ├── scss │ │ │ ├── fileinput-rtl.scss │ │ │ ├── fileinput.scss │ │ │ └── themes │ │ │ │ ├── explorer-fa │ │ │ │ └── theme.scss │ │ │ │ ├── explorer-fas │ │ │ │ └── theme.scss │ │ │ │ └── explorer │ │ │ │ └── theme.scss │ │ └── themes │ │ │ ├── explorer-fa │ │ │ ├── theme.css │ │ │ ├── theme.js │ │ │ ├── theme.min.css │ │ │ └── theme.min.js │ │ │ ├── explorer-fas │ │ │ ├── theme.css │ │ │ ├── theme.js │ │ │ ├── theme.min.css │ │ │ └── theme.min.js │ │ │ ├── explorer │ │ │ ├── theme.css │ │ │ ├── theme.js │ │ │ ├── theme.min.css │ │ │ └── theme.min.js │ │ │ ├── fa │ │ │ ├── theme.js │ │ │ └── theme.min.js │ │ │ ├── fas │ │ │ ├── theme.js │ │ │ └── theme.min.js │ │ │ └── gly │ │ │ ├── theme.js │ │ │ └── theme.min.js │ ├── bootstrap-multiselect │ │ ├── css │ │ │ └── bootstrap-multiselect.css │ │ └── js │ │ │ └── bootstrap-multiselect.js │ ├── bootstrap-paginator-1.0.2 │ │ └── js │ │ │ └── bootstrap-paginator.js │ ├── bootstrap-select │ │ ├── css │ │ │ ├── bootstrap-select.css │ │ │ ├── bootstrap-select.css.map │ │ │ └── bootstrap-select.min.css │ │ └── js │ │ │ ├── bootstrap-select.js │ │ │ ├── bootstrap-select.js.map │ │ │ └── bootstrap-select.min.js │ ├── bootstrap-slider-10.6.2 │ │ ├── css │ │ │ ├── bootstrap-slider.css │ │ │ └── bootstrap-slider.min.css │ │ └── js │ │ │ ├── bootstrap-slider.js │ │ │ └── bootstrap-slider.min.js │ ├── bootstrap-switch │ │ ├── css │ │ │ └── bootstrap-switch.min.css │ │ └── js │ │ │ └── bootstrap-switch.min.js │ ├── bootstrap-table │ │ ├── css │ │ │ └── bootstrap-table.min.css │ │ ├── extensions │ │ │ └── editable │ │ │ │ ├── bootstrap-table-editable.js │ │ │ │ └── bootstrap-table-editable.min.js │ │ └── js │ │ │ ├── bootstrap-table-export.min.js │ │ │ ├── bootstrap-table-zh-CN.min.js │ │ │ ├── bootstrap-table.min.js │ │ │ └── tableExport.min.js │ ├── bootstrap3-editable │ │ ├── css │ │ │ └── bootstrap-editable.css │ │ ├── img │ │ │ ├── clear.png │ │ │ └── loading.gif │ │ └── js │ │ │ ├── bootstrap-editable.js │ │ │ └── bootstrap-editable.min.js │ ├── datepicker │ │ ├── bootstrap-datepicker.js │ │ └── datepicker3.css │ ├── daterangepicker │ │ ├── css │ │ │ └── daterangepicker.css │ │ └── js │ │ │ ├── daterangepicker.js │ │ │ └── moment.min.js │ ├── datetimepicker │ │ ├── css │ │ │ ├── bootstrap-datetimepicker.css │ │ │ ├── daterangepicker-bs2.css │ │ │ └── daterangepicker-bs3.css │ │ └── js │ │ │ ├── bootstrap-datetimepicker.js │ │ │ └── bootstrap-datetimepicker.zh-CN.js │ ├── echarts-2.2.7 │ │ └── js │ │ │ ├── chart │ │ │ ├── bar.js │ │ │ ├── chord.js │ │ │ ├── eventRiver.js │ │ │ ├── force.js │ │ │ ├── funnel.js │ │ │ ├── gauge.js │ │ │ ├── heatmap.js │ │ │ ├── k.js │ │ │ ├── line.js │ │ │ ├── map.js │ │ │ ├── pie.js │ │ │ ├── radar.js │ │ │ ├── scatter.js │ │ │ ├── tree.js │ │ │ ├── treemap.js │ │ │ ├── venn.js │ │ │ └── wordCloud.js │ │ │ ├── echarts-all.js │ │ │ ├── echarts.js │ │ │ ├── echarts.min.js │ │ │ └── macarons.js │ ├── favicon.ico │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── jquery │ │ ├── jquery.form.min.js │ │ └── jquery.min.js │ ├── layer-v3.1.1 │ │ ├── layer.js │ │ ├── mobile │ │ │ ├── layer.js │ │ │ └── need │ │ │ │ └── layer.css │ │ └── theme │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ ├── metisMenu │ │ ├── css │ │ │ └── metisMenu.min.css │ │ └── js │ │ │ └── metisMenu.min.js │ ├── oneops │ │ ├── css │ │ │ └── login.css │ │ └── js │ │ │ ├── Validform_v5.3.2_min.js │ │ │ └── oneops.js │ ├── sb-admin-2 │ │ ├── css │ │ │ ├── sb-admin-2.css │ │ │ └── sb-admin-2.min.css │ │ └── js │ │ │ ├── sb-admin-2.js │ │ │ └── sb-admin-2.min.js │ ├── select2-4.0.5 │ │ ├── css │ │ │ ├── select2.css │ │ │ └── select2.min.css │ │ └── js │ │ │ ├── i18n │ │ │ ├── af.js │ │ │ ├── ar.js │ │ │ ├── az.js │ │ │ ├── bg.js │ │ │ ├── bs.js │ │ │ ├── ca.js │ │ │ ├── cs.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── dsb.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 │ │ │ ├── hsb.js │ │ │ ├── hu.js │ │ │ ├── hy.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 │ │ │ ├── ps.js │ │ │ ├── pt-BR.js │ │ │ ├── pt.js │ │ │ ├── ro.js │ │ │ ├── ru.js │ │ │ ├── sk.js │ │ │ ├── sl.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 │ │ │ ├── select2.js │ │ │ └── select2.min.js │ ├── smart-wizard │ │ ├── css │ │ │ ├── smart_wizard.css │ │ │ ├── smart_wizard.min.css │ │ │ ├── smart_wizard_theme_arrows.css │ │ │ ├── smart_wizard_theme_arrows.min.css │ │ │ ├── smart_wizard_theme_circles.css │ │ │ ├── smart_wizard_theme_circles.min.css │ │ │ ├── smart_wizard_theme_dots.css │ │ │ └── smart_wizard_theme_dots.min.css │ │ └── js │ │ │ ├── jquery.smartWizard.js │ │ │ └── jquery.smartWizard.min.js │ ├── sweetalert │ │ ├── sweetalert.css │ │ └── sweetalert.min.js │ ├── toastr │ │ ├── toastr.min.css │ │ └── toastr.min.js │ └── zTree_v3 │ │ ├── css │ │ ├── awesomeStyle │ │ │ ├── awesome.css │ │ │ ├── awesome.less │ │ │ ├── fa.less │ │ │ └── img │ │ │ │ └── loading.gif │ │ ├── demo.css │ │ ├── metroStyle │ │ │ ├── img │ │ │ │ ├── line_conn.png │ │ │ │ ├── loading.gif │ │ │ │ ├── metro.gif │ │ │ │ └── metro.png │ │ │ └── metroStyle.css │ │ └── zTreeStyle │ │ │ ├── img │ │ │ ├── diy │ │ │ │ ├── 1_close.png │ │ │ │ ├── 1_open.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── 7.png │ │ │ │ ├── 8.png │ │ │ │ └── 9.png │ │ │ ├── line_conn.gif │ │ │ ├── loading.gif │ │ │ ├── zTreeStandard.gif │ │ │ └── zTreeStandard.png │ │ │ └── zTreeStyle.css │ │ ├── demo │ │ ├── cn │ │ │ ├── asyncData │ │ │ │ ├── getNodes.php │ │ │ │ └── getNodesForBigData.php │ │ │ ├── bigdata │ │ │ │ ├── common.html │ │ │ │ ├── diy_async.html │ │ │ │ └── page.html │ │ │ ├── core │ │ │ │ ├── async.html │ │ │ │ ├── async_fun.html │ │ │ │ ├── click.html │ │ │ │ ├── custom_font.html │ │ │ │ ├── custom_icon.html │ │ │ │ ├── custom_iconSkin.html │ │ │ │ ├── expand.html │ │ │ │ ├── noicon.html │ │ │ │ ├── noline.html │ │ │ │ ├── otherMouse.html │ │ │ │ ├── searchNodes.html │ │ │ │ ├── simpleData.html │ │ │ │ ├── standardData.html │ │ │ │ ├── update_fun.html │ │ │ │ └── url.html │ │ │ ├── excheck │ │ │ │ ├── checkbox.html │ │ │ │ ├── checkbox_chkDisabled.html │ │ │ │ ├── checkbox_count.html │ │ │ │ ├── checkbox_fun.html │ │ │ │ ├── checkbox_halfCheck.html │ │ │ │ ├── checkbox_nocheck.html │ │ │ │ ├── radio.html │ │ │ │ ├── radio_chkDisabled.html │ │ │ │ ├── radio_fun.html │ │ │ │ ├── radio_halfCheck.html │ │ │ │ └── radio_nocheck.html │ │ │ ├── exedit │ │ │ │ ├── async_edit.html │ │ │ │ ├── drag.html │ │ │ │ ├── drag_fun.html │ │ │ │ ├── drag_super.html │ │ │ │ ├── edit.html │ │ │ │ ├── edit_fun.html │ │ │ │ ├── edit_super.html │ │ │ │ └── multiTree.html │ │ │ ├── exhide │ │ │ │ ├── checkbox.html │ │ │ │ ├── common.html │ │ │ │ └── radio.html │ │ │ ├── index.html │ │ │ └── super │ │ │ │ ├── asyncForAll.html │ │ │ │ ├── awesome.html │ │ │ │ ├── checkbox_radio.html │ │ │ │ ├── diydom.html │ │ │ │ ├── dragWithOther.html │ │ │ │ ├── fuzzySearch.html │ │ │ │ ├── left_menu.html │ │ │ │ ├── left_menuForOutLook.gif │ │ │ │ ├── left_menuForOutLook.html │ │ │ │ ├── left_menuForOutLook.png │ │ │ │ ├── metro.html │ │ │ │ ├── oneclick.html │ │ │ │ ├── oneroot.html │ │ │ │ ├── rightClickMenu.html │ │ │ │ ├── select_menu.html │ │ │ │ ├── select_menu_checkbox.html │ │ │ │ ├── select_menu_radio.html │ │ │ │ └── singlepath.html │ │ ├── en │ │ │ ├── asyncData │ │ │ │ ├── getNodes.php │ │ │ │ └── getNodesForBigData.php │ │ │ ├── bigdata │ │ │ │ ├── common.html │ │ │ │ ├── diy_async.html │ │ │ │ └── page.html │ │ │ ├── core │ │ │ │ ├── async.html │ │ │ │ ├── async_fun.html │ │ │ │ ├── click.html │ │ │ │ ├── custom_font.html │ │ │ │ ├── custom_icon.html │ │ │ │ ├── custom_iconSkin.html │ │ │ │ ├── expand.html │ │ │ │ ├── noicon.html │ │ │ │ ├── noline.html │ │ │ │ ├── otherMouse.html │ │ │ │ ├── searchNodes.html │ │ │ │ ├── simpleData.html │ │ │ │ ├── standardData.html │ │ │ │ ├── update_fun.html │ │ │ │ └── url.html │ │ │ ├── excheck │ │ │ │ ├── checkbox.html │ │ │ │ ├── checkbox_chkDisabled.html │ │ │ │ ├── checkbox_count.html │ │ │ │ ├── checkbox_fun.html │ │ │ │ ├── checkbox_halfCheck.html │ │ │ │ ├── checkbox_nocheck.html │ │ │ │ ├── radio.html │ │ │ │ ├── radio_chkDisabled.html │ │ │ │ ├── radio_fun.html │ │ │ │ ├── radio_halfCheck.html │ │ │ │ └── radio_nocheck.html │ │ │ ├── exedit │ │ │ │ ├── async_edit.html │ │ │ │ ├── drag.html │ │ │ │ ├── drag_fun.html │ │ │ │ ├── drag_super.html │ │ │ │ ├── edit.html │ │ │ │ ├── edit_fun.html │ │ │ │ ├── edit_super.html │ │ │ │ └── multiTree.html │ │ │ ├── exhide │ │ │ │ ├── checkbox.html │ │ │ │ ├── common.html │ │ │ │ └── radio.html │ │ │ ├── index.html │ │ │ └── super │ │ │ │ ├── asyncForAll.html │ │ │ │ ├── awesome.html │ │ │ │ ├── checkbox_radio.html │ │ │ │ ├── diydom.html │ │ │ │ ├── dragWithOther.html │ │ │ │ ├── fuzzySearch.html │ │ │ │ ├── left_menu.html │ │ │ │ ├── left_menuForOutLook.gif │ │ │ │ ├── left_menuForOutLook.html │ │ │ │ ├── left_menuForOutLook.png │ │ │ │ ├── metro.html │ │ │ │ ├── oneclick.html │ │ │ │ ├── oneroot.html │ │ │ │ ├── rightClickMenu.html │ │ │ │ ├── select_menu.html │ │ │ │ ├── select_menu_checkbox.html │ │ │ │ ├── select_menu_radio.html │ │ │ │ ├── singlepath.html │ │ │ │ └── ztree.html │ │ └── js │ │ │ ├── fuzzysearch.js │ │ │ └── fuzzysearch.min.js │ │ └── js │ │ ├── fuzzysearch.js │ │ ├── fuzzysearch.min.js │ │ ├── jquery-1.4.4.min.js │ │ ├── jquery.ztree.all.js │ │ ├── jquery.ztree.all.min.js │ │ ├── jquery.ztree.core.js │ │ ├── jquery.ztree.core.min.js │ │ ├── jquery.ztree.excheck.js │ │ ├── jquery.ztree.excheck.min.js │ │ ├── jquery.ztree.exedit.js │ │ ├── jquery.ztree.exedit.min.js │ │ ├── jquery.ztree.exhide.js │ │ └── jquery.ztree.exhide.min.js ├── templates │ ├── accounts │ │ ├── perm.html │ │ ├── perm_group.html │ │ ├── user.html │ │ └── user_profile.html │ ├── base.html │ ├── base_workflow.html │ ├── cmdb │ │ ├── accessory.html │ │ ├── app.html │ │ ├── app_audit.html │ │ ├── app_server.html │ │ ├── biz_mgt_dept.html │ │ ├── cabinet.html │ │ ├── caddy.html │ │ ├── charts.html │ │ ├── charts_server.html │ │ ├── cpu.html │ │ ├── disk.html │ │ ├── idc.html │ │ ├── inventory_record.html │ │ ├── ip.html │ │ ├── maintenance.html │ │ ├── memory.html │ │ ├── network_adapter.html │ │ ├── network_cable.html │ │ ├── network_device.html │ │ ├── optical_transceiver.html │ │ ├── physical_machine.html │ │ ├── segment.html │ │ ├── virtual_machine.html │ │ └── vlan.html │ ├── common │ │ └── settings.html │ ├── dns_pod │ │ ├── charts.html │ │ ├── dns_log.html │ │ ├── record.html │ │ └── zone.html │ ├── foot_script.html │ ├── head_css_js.html │ ├── head_custom_script.html │ ├── index.html │ ├── job │ │ ├── charts.html │ │ ├── cmd_execute.html │ │ ├── config.html │ │ ├── file_download.html │ │ ├── file_upload.html │ │ ├── galaxy.html │ │ ├── help.html │ │ ├── inventory.html │ │ ├── inventory_file.html │ │ ├── job.html │ │ ├── job_add.html │ │ ├── job_execute.html │ │ ├── job_log.html │ │ ├── periodic_task.html │ │ ├── playbook.html │ │ ├── playbook_file.html │ │ ├── scripts.html │ │ ├── task.html │ │ └── task_detail.html │ ├── login.html │ ├── message.html │ ├── nav_bar_header.html │ ├── nav_bar_left_cmdb.html │ ├── nav_bar_left_default.html │ ├── nav_bar_left_dns.html │ ├── nav_bar_left_job.html │ ├── nav_bar_left_ssh.html │ ├── nav_bar_left_tools.html │ ├── nav_bar_left_workflow.html │ ├── ssh │ │ ├── charts.html │ │ ├── host_user.html │ │ ├── host_user_overview.html │ │ ├── perilous_cmd.html │ │ ├── perilous_cmd_grant.html │ │ └── perilous_cmd_group.html │ ├── tools │ │ ├── encryption.html │ │ ├── index.html │ │ ├── net_surfing.html │ │ ├── qizhi_create_host.html │ │ └── tomcat.html │ └── workflow │ │ ├── ali_cdn.html │ │ ├── ali_cdn_detail.html │ │ ├── ali_oss.html │ │ ├── ali_oss_apk.html │ │ ├── ali_oss_apk_detail.html │ │ ├── ali_oss_detail.html │ │ ├── app_apply.html │ │ ├── app_apply_detail.html │ │ ├── app_offline.html │ │ ├── app_offline_detail.html │ │ ├── azure_oss_apk.html │ │ ├── azure_oss_apk_detail.html │ │ ├── dashboard.html │ │ ├── flow_end.html │ │ ├── flow_ongoing.html │ │ ├── flow_pending.html │ │ ├── flow_total.html │ │ ├── net_cross_segment_access.html │ │ ├── net_cross_segment_access_detail.html │ │ ├── steps.html │ │ ├── tomcat_dump.html │ │ ├── tomcat_dump_detail.html │ │ ├── tomcat_jstack.html │ │ ├── tomcat_jstack_detail.html │ │ └── workflow.html ├── tools │ ├── __init__.py │ ├── admin.py │ ├── api │ │ ├── __init__.py │ │ ├── encryption.py │ │ ├── qizhi.py │ │ └── tomcat.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ │ └── __init__.py │ ├── models │ │ └── __init__.py │ ├── scripts │ │ ├── dbpasswordhelper.class │ │ ├── tomcat_restart.sh │ │ └── tomcat_restart.yml │ ├── tests.py │ ├── urls.py │ ├── utils │ │ ├── __init__.py │ │ ├── qizhi_api.py │ │ └── workflowops_api.py │ └── views │ │ ├── __init__.py │ │ ├── dashboard.py │ │ ├── encryption.py │ │ ├── net_surfing.py │ │ ├── qizhi.py │ │ └── tomcat.py ├── wdoneops.conf ├── wdoneops │ ├── __init__.py │ ├── asgi.py │ ├── celery.py │ ├── context_processors.py │ ├── routing.py │ ├── settings.py │ ├── urls.py │ ├── views.py │ └── wsgi.py └── workflow │ ├── __init__.py │ ├── admin.py │ ├── api │ ├── ali_cdn.py │ ├── app.py │ └── workflow.py │ ├── apps.py │ ├── migrations │ └── __init__.py │ ├── models.py │ ├── scripts │ ├── __init__.py │ ├── app_offline.yml │ └── tomcat_dump.yml │ ├── tasks │ ├── __init__.py │ └── network.py │ ├── templatetags │ ├── __init__.py │ └── workflow.py │ ├── tests.py │ ├── urls.py │ ├── utils │ ├── __init__.py │ ├── aliyun_cdn.py │ ├── aliyun_oss.py │ └── azure_oss.py │ └── views │ ├── __init__.py │ ├── ali_cdn.py │ ├── ali_oss.py │ ├── app_apply.py │ ├── app_offline.py │ ├── azure_oss.py │ ├── flow.py │ ├── network.py │ ├── tomcat.py │ └── workflow.py ├── docs ├── celery_beat.service ├── celery_worker.service ├── help.txt ├── images │ ├── cmdb.png │ ├── dns.jpg │ ├── job.png │ └── workflow.png ├── nginx_wdoneops.conf ├── service.sh ├── wdoneops.service └── wdoneops_all.service └── requirement ├── requrement.txt └── yum.txt /apps/accounts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/accounts/__init__.py -------------------------------------------------------------------------------- /apps/accounts/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountsConfig(AppConfig): 5 | name = 'accounts' 6 | -------------------------------------------------------------------------------- /apps/accounts/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/accounts/migrations/__init__.py -------------------------------------------------------------------------------- /apps/accounts/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import AbstractUser 3 | 4 | 5 | class User(AbstractUser): 6 | password2 = models.CharField('可逆向解密', max_length=50, null=True, blank=True) 7 | display = models.CharField('中文名', max_length=50, blank=True) 8 | ding_dept_id = models.CharField('钉钉中的部门ID', max_length=50, blank=True) 9 | ding_user_id = models.CharField('钉钉中的用户ID', max_length=50, blank=True) 10 | 11 | def __str__(self): 12 | return self.username 13 | 14 | class Meta: 15 | db_table = 'accounts_user' 16 | verbose_name = u'用户表' 17 | verbose_name_plural = u'用户表' 18 | 19 | 20 | class RetiredEmployeeRecord(models.Model): 21 | work_no = models.CharField(max_length=10) 22 | display = models.CharField(max_length=50) 23 | comment = models.CharField(max_length=50) 24 | date_retired = models.DateTimeField(auto_now_add=True) 25 | 26 | class Meta: 27 | db_table = 'retired_employee_record' 28 | verbose_name = u'员工离职记录表' 29 | verbose_name_plural = u'员工离职记录表' 30 | -------------------------------------------------------------------------------- /apps/accounts/scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/accounts/scripts/__init__.py -------------------------------------------------------------------------------- /apps/accounts/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/accounts/templatetags/__init__.py -------------------------------------------------------------------------------- /apps/accounts/templatetags/custom_tags.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | from django import template 3 | from django.utils.safestring import mark_safe 4 | 5 | register = template.Library() 6 | 7 | 8 | # 替换换行符 9 | @register.simple_tag 10 | def format_str(string): 11 | return mark_safe(string.replace(',', '
')) 12 | -------------------------------------------------------------------------------- /apps/accounts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/accounts/views/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | from .auth import * 3 | -------------------------------------------------------------------------------- /apps/cmdb/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/__init__.py -------------------------------------------------------------------------------- /apps/cmdb/api/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from .idc import * 4 | from .department import * 5 | from .asset import * 6 | from .ip import * 7 | from .app import * 8 | 9 | -------------------------------------------------------------------------------- /apps/cmdb/api/accessory.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.utils.decorators import method_decorator 3 | from django.views.decorators.csrf import csrf_exempt 4 | from django.views.generic import View 5 | from common.mixins import JSONResponseMixin 6 | from common.utils.base import send_msg_to_admin 7 | from cmdb.models.accessory import Accessory 8 | 9 | 10 | @method_decorator(csrf_exempt, name='dispatch') 11 | class AccessoryResidualAPIView(JSONResponseMixin, View): 12 | 13 | def get(self, request, *args, **kwargs): 14 | try: 15 | mode = request.GET.get("mode", '') 16 | mode_id = request.GET.get("mode_id", '') 17 | idc_id = request.GET.get("idc_id", '') 18 | if not mode or not mode_id or not idc_id: 19 | print(mode, mode_id, idc_id) 20 | res = {'code': 1, 'errmsg': '非法调用!'} 21 | else: 22 | residual = Accessory.objects.filter(storehouse__id=idc_id, mode=mode, mode_id=mode_id, is_active=True).count() 23 | res = {'code': 0, 'result': residual} 24 | except Exception as e: 25 | res = {'code': 1, 'errmsg': '执行出错:%s' % str(e)} 26 | return self.render_json_response(res) 27 | -------------------------------------------------------------------------------- /apps/cmdb/api/idc.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import traceback 3 | from django.http import QueryDict 4 | from django.db.models import F 5 | from rest_framework.views import APIView 6 | from rest_framework.versioning import URLPathVersioning 7 | from common.mixins import JSONResponseMixin 8 | from dns_pod.models import Record, DnsLog 9 | -------------------------------------------------------------------------------- /apps/cmdb/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class CmdbConfig(AppConfig): 5 | name = 'cmdb' 6 | -------------------------------------------------------------------------------- /apps/cmdb/docs/accessory_template.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/docs/accessory_template.xlsx -------------------------------------------------------------------------------- /apps/cmdb/docs/app_template.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/docs/app_template.xls -------------------------------------------------------------------------------- /apps/cmdb/docs/network_devices_template.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/docs/network_devices_template.xls -------------------------------------------------------------------------------- /apps/cmdb/docs/server_template.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/docs/server_template.xls -------------------------------------------------------------------------------- /apps/cmdb/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/migrations/__init__.py -------------------------------------------------------------------------------- /apps/cmdb/models/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from .base import * 4 | from .business import * 5 | from .asset import * 6 | from .accessory import * 7 | -------------------------------------------------------------------------------- /apps/cmdb/scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/scripts/__init__.py -------------------------------------------------------------------------------- /apps/cmdb/scripts/cmdb-win-create-task.bat: -------------------------------------------------------------------------------- 1 | 2 | schtasks /create /tn "CMDB Agent Task." /ru system /tr C:\cmdb_win_agent.exe /sc DAILY /st 01:00:00 3 | 4 | start %systemroot%\tasks 5 | 6 | echo Create task success... 7 | 8 | pause 9 | 10 | rem del /f create-cmdb-task.bat 11 | -------------------------------------------------------------------------------- /apps/cmdb/scripts/cmdb.ini: -------------------------------------------------------------------------------- 1 | [cmdb] 2 | cmdb_host_api = http://172.20.1.47:5001/api 3 | -------------------------------------------------------------------------------- /apps/cmdb/scripts/cmdb_linux_agent: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/scripts/cmdb_linux_agent -------------------------------------------------------------------------------- /apps/cmdb/scripts/cmdb_win_agent.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/scripts/cmdb_win_agent.exe -------------------------------------------------------------------------------- /apps/cmdb/scripts/dbms_linux_agent: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/scripts/dbms_linux_agent -------------------------------------------------------------------------------- /apps/cmdb/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/cmdb/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/cmdb/utils/__init__.py -------------------------------------------------------------------------------- /apps/cmdb/utils/gitlib.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from common.utils.cryptor import cryptor 3 | import gitlab 4 | import traceback 5 | 6 | gitlab_url = 'http://git.yadoom.com' 7 | gitlab_username = "jenkins@yadoom.com" 8 | gitlab_password = "775c36d2cf164e57abed52bc7ec2699c" 9 | 10 | 11 | def get_gitlab_instance(): 12 | password = cryptor.decrypt(gitlab_password) 13 | gitlab_server = gitlab.Gitlab(gitlab_url, email=gitlab_username, password=password) 14 | gitlab_server.auth() 15 | return gitlab_server 16 | 17 | 18 | def get_gitlib_group_list(): 19 | gitlab_server = get_gitlab_instance() 20 | groups = gitlab_server.groups.list(all=True) 21 | return [group.name for group in groups] 22 | -------------------------------------------------------------------------------- /apps/cmdb/utils/wex_api.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import json 5 | from common.utils.http_api import HttpRequests 6 | from common.utils.base import send_msg_to_admin 7 | 8 | http_request = HttpRequests() 9 | 10 | 11 | def application_update(data): 12 | url = "http://wex.yadoom.com/api/wex/api/application/update" 13 | # data = { 14 | # "app_code": data["app_code"], 15 | # "app_name": data["app_name"], 16 | # "app_type": data["app_type"], 17 | # "tomcat_port": data["tomcat_port"], 18 | # "scm_url": data["scm_url"], 19 | # "importance": data["importance"], 20 | # "domain_name": data["domain_name"], 21 | # "primary": data["primary"], 22 | # "secondary": data["secondary"], 23 | # "comment": data["comment"] 24 | # } 25 | headers = {"Content-Type": "application/json; charset=UTF-8"} 26 | status, ret = http_request.post(url=url, params=json.dumps(data), headers=headers) 27 | if status is False: 28 | send_msg_to_admin("wex更新应用接口调用出错:\n" + ret) 29 | print(ret) 30 | -------------------------------------------------------------------------------- /apps/cmdb/views/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from .idc import * 4 | from .business import * 5 | from .server import * 6 | from .net_device import * 7 | from .cabinet import * 8 | from .segment import * 9 | from .vlan import * 10 | -------------------------------------------------------------------------------- /apps/cmdb/views/charts.py: -------------------------------------------------------------------------------- 1 | 2 | from django.shortcuts import render 3 | from django.contrib.auth.decorators import login_required 4 | from cmdb.models.business import BizMgtDept 5 | 6 | @login_required 7 | def charts(request): 8 | path1, path2 = 'CMDB', '可视化' 9 | return render(request, 'cmdb/charts.html', locals()) 10 | 11 | 12 | @login_required 13 | def charts_server(request): 14 | path1, path2 = 'CMDB', '服务器使用率' 15 | dept_name = request.GET.get('dept_name') 16 | pct_range = request.GET.get('pct_range') 17 | dept_list = BizMgtDept.objects.filter(parent_id=2) 18 | return render(request, 'cmdb/charts_server.html', locals()) 19 | -------------------------------------------------------------------------------- /apps/common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/common/__init__.py -------------------------------------------------------------------------------- /apps/common/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from common.models import RPCIpWhite 3 | 4 | 5 | @admin.register(RPCIpWhite) 6 | class RPCIpWhiteAdmin(admin.ModelAdmin): 7 | list_display = ('id', 'url_name', 'ip_list', 'applicant', 'comment') 8 | search_fields = ['url_name', 'ip_list', 'applicant', 'comment'] 9 | list_filter = ('url_name', 'applicant',) 10 | readonly_fields = ['url_name', ] 11 | -------------------------------------------------------------------------------- /apps/common/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/common/migrations/__init__.py -------------------------------------------------------------------------------- /apps/common/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | 5 | 6 | class Config(models.Model): 7 | item = models.CharField('配置项', max_length=50, primary_key=True) 8 | value = models.CharField('配置项值', max_length=200) 9 | comment = models.CharField('描述', max_length=200, default='', blank=True) 10 | 11 | class Meta: 12 | db_table = 'common_config' 13 | verbose_name = u'系统配置' 14 | verbose_name_plural = u'系统配置' 15 | 16 | 17 | class RPCIpWhite(models.Model): 18 | """ 19 | RPC API ip 白名单 20 | """ 21 | url_name = models.CharField(max_length=255, unique=True) 22 | ip_list = models.TextField('ip列表,逗号分隔', default='*') 23 | applicant = models.CharField('申请人', max_length=255) 24 | comment = models.CharField('申请备注', max_length=200, default='', blank=True) 25 | 26 | class Meta: 27 | db_table = 'common_rpc_ip_white' 28 | verbose_name = u'远程调用api接口白名单表' 29 | verbose_name_plural = u'远程调用api接口白名单表' 30 | -------------------------------------------------------------------------------- /apps/common/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/common/urls.py: -------------------------------------------------------------------------------- 1 | # coding:utf-8 2 | from django.urls import path 3 | from .views import email_check, settings 4 | 5 | app_name = 'common' 6 | 7 | # API 8 | urlpatterns = [ 9 | ] 10 | 11 | urlpatterns += [ 12 | path('email/check/', email_check), 13 | path('settings/', settings, name='settings'), 14 | ] 15 | -------------------------------------------------------------------------------- /apps/common/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/common/utils/__init__.py -------------------------------------------------------------------------------- /apps/common/utils/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from common.models import Config 3 | 4 | 5 | class SysConfig(object): 6 | def __init__(self): 7 | try: 8 | # 获取系统配置信息 9 | all_config = Config.objects.all().values('item', 'value') 10 | sys_config = {} 11 | for items in all_config: 12 | sys_config[items['item']] = items['value'].strip() 13 | except Exception: 14 | self.sys_config = {} 15 | else: 16 | self.sys_config = sys_config 17 | 18 | sys_config = SysConfig().sys_config 19 | -------------------------------------------------------------------------------- /apps/common/utils/switch.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | 3 | 4 | class Switch(object): 5 | def __init__(self, value): 6 | self.value = value 7 | self.fall = False 8 | 9 | def __iter__(self): 10 | """Return the match method once, then stop""" 11 | yield self.match 12 | raise StopIteration 13 | 14 | def match(self, *args): 15 | """Indicate whether or not to enter a case suite""" 16 | if self.fall or not args: 17 | return True 18 | elif self.value in args: # changed for v1.5, see below 19 | self.fall = True 20 | return True 21 | else: 22 | return False 23 | -------------------------------------------------------------------------------- /apps/dns_pod/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/dns_pod/__init__.py -------------------------------------------------------------------------------- /apps/dns_pod/admin.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | from django.contrib import admin 3 | 4 | # Register your models here. 5 | from dns_pod.models import Zone, Record 6 | 7 | 8 | @admin.register(Zone) 9 | class ZoneAdmin(admin.ModelAdmin): 10 | list_display = ('id', 'domain_name', 'type', 'comment', 'create_time') 11 | search_fields = ['domain_name', 'comment'] 12 | list_filter = ('type',) 13 | 14 | 15 | @admin.register(Record) 16 | class RecordAdmin(admin.ModelAdmin): 17 | list_display = ('id', 'zone', 'host', 'type', 'data', 'status', 'ttl', 'mx_priority', 'priority', 'serial', 18 | 'refresh', 'retry', 'expire', 'minimum', 'resp_person', 'primary_ns', 'update_time', 'create_time') 19 | search_fields = ['zone', 'host', 'type', 'data'] 20 | list_filter = ('zone', 'type', 'status',) 21 | -------------------------------------------------------------------------------- /apps/dns_pod/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class DnsPodConfig(AppConfig): 5 | name = 'dns_pod' 6 | -------------------------------------------------------------------------------- /apps/dns_pod/charts.py: -------------------------------------------------------------------------------- 1 | 2 | from django.shortcuts import render 3 | from django.contrib.auth.decorators import login_required 4 | 5 | 6 | @login_required 7 | def charts(request): 8 | return render(request, 'dns_pod/charts.html') 9 | -------------------------------------------------------------------------------- /apps/dns_pod/forms.py: -------------------------------------------------------------------------------- 1 | # _*_ coding: utf-8 _*_ 2 | 3 | from django.forms import ModelForm 4 | from dns_pod.models import Zone, Record 5 | 6 | 7 | class ZoneForm(ModelForm): 8 | class Meta: 9 | model = Zone 10 | fields = ['domain_name', 'type', 'comment'] 11 | 12 | 13 | class RecordForm(ModelForm): 14 | class Meta: 15 | model = Record 16 | fields = ['zone', 'host', 'type', 'data', 'ttl', 'status'] 17 | -------------------------------------------------------------------------------- /apps/dns_pod/serializers.py: -------------------------------------------------------------------------------- 1 | 2 | from rest_framework import serializers 3 | from dns_pod.models import Zone, Record 4 | 5 | 6 | class ZoneSerializer(serializers.ModelSerializer): 7 | class Meta: 8 | model = Zone 9 | fields = ('id', 'domain_name', 'type', 'comment') 10 | 11 | 12 | class RecordSerializer(serializers.ModelSerializer): 13 | class Meta: 14 | model = Record 15 | fields = ('id', 'zone', 'host', 'type', 'data', 'ttl', 'mx_priority', 'view') 16 | -------------------------------------------------------------------------------- /apps/dns_pod/signals/handlers.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | from django.dispatch import receiver 3 | from dns_pod.signals.signals import post_update, post_save, post_delete 4 | from dns_pod.models import Zone, Record 5 | 6 | 7 | @receiver(post_update, dispatch_uid="post_update_receiver") 8 | def post_update_receiver(sender, **kwargs): 9 | print(kwargs['user']) 10 | print('my_signal received') 11 | 12 | 13 | @receiver(post_save, dispatch_uid="post_save_receiver") 14 | def post_save_receiver(sender, created, instance, **kwargs): 15 | dns_type = Zone.objects.get(domain_name=instance.zone) 16 | if created: 17 | # True if a new record was created. 18 | Record().using().save() 19 | print('my_signal received') 20 | 21 | 22 | @receiver(post_delete, dispatch_uid="post_delete_receiver") 23 | def post_delete_receiver(sender, created, instance, **kwargs): 24 | print(kwargs['user']) 25 | print('my_signal received') 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /apps/dns_pod/signals/signals.py: -------------------------------------------------------------------------------- 1 | # coding:utf-8 2 | 3 | from django.dispatch import Signal 4 | 5 | post_save = Signal(providing_args=["record"]) 6 | post_update = Signal(providing_args=["record"]) 7 | 8 | post_save = Signal(providing_args=["record"]) 9 | post_delete = Signal(providing_args=["record"]) 10 | -------------------------------------------------------------------------------- /apps/dns_pod/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/gunicorn.conf.py: -------------------------------------------------------------------------------- 1 | import os 2 | import multiprocessing 3 | import configparser 4 | 5 | BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 6 | 7 | cfg = configparser.ConfigParser() 8 | cfg.read(os.path.join(BASE_DIR, 'wdoneops.conf')) 9 | 10 | bind = "{}:{}".format(cfg.get('base', 'ip'), cfg.get('base', 'port')) 11 | workers = multiprocessing.cpu_count() * 2 + 1 12 | errorlog = 'logs/gunicorn.error.log' 13 | accesslog = 'logs/gunicorn.access.log' 14 | loglevel = 'debug' 15 | proc_name = 'wd-oneops' 16 | limit_request_line = 8190 17 | reload = True 18 | daemon = True 19 | -------------------------------------------------------------------------------- /apps/job/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/job/__init__.py -------------------------------------------------------------------------------- /apps/job/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class JobConfig(AppConfig): 5 | name = 'job' 6 | -------------------------------------------------------------------------------- /apps/job/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/job/migrations/__init__.py -------------------------------------------------------------------------------- /apps/job/models/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from .continuous_deploy import * 3 | from .job import * 4 | -------------------------------------------------------------------------------- /apps/job/serializers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/job/serializers/__init__.py -------------------------------------------------------------------------------- /apps/job/serializers/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from rest_framework import serializers 3 | from job.models.job import JobConfig 4 | 5 | 6 | class JobConfigSerializer(serializers.Serializer): 7 | pk = serializers.IntegerField(read_only=True) 8 | title = serializers.CharField(required=False, allow_blank=True, max_length=100) 9 | code = serializers.CharField(style={'base_template': 'textarea.html'}) 10 | linenos = serializers.BooleanField(required=False) 11 | 12 | def create(self, validated_data): 13 | """ 14 | 传入验证过的数据, 创建并返回`JobConfig`实例。 15 | """ 16 | return JobConfig.objects.create(**validated_data) 17 | 18 | def update(self, instance, validated_data): 19 | """ 20 | 传入验证过的数据, 更新并返回已有的`JobConfig`实例。 21 | """ 22 | instance.title = validated_data.get('title', instance.title) 23 | instance.code = validated_data.get('code', instance.code) 24 | instance.linenos = validated_data.get('linenos', instance.linenos) 25 | instance.language = validated_data.get('language', instance.language) 26 | instance.style = validated_data.get('style', instance.style) 27 | instance.save() 28 | return instance 29 | -------------------------------------------------------------------------------- /apps/job/tasks/ansible_runner.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from .ansible_api import AnsibleAPI 3 | 4 | 5 | class AnsibleRunner(AnsibleAPI): 6 | def __init__(self, host, resource, hosts_file, hostuser, task_id, *args, **kwargs): 7 | self.host = host 8 | self.hostuser = hostuser 9 | self.playbook = None 10 | self.task = task_id 11 | super(AnsibleAPI, self).__init__(resource, hosts_file, *args, **kwargs) 12 | 13 | def save_task_log(self): 14 | super(AnsibleRunner, self).save_result() 15 | 16 | def run_ad_hoc(self, host, module_name, module_args): 17 | """ 18 | :param host: 19 | :param module_name: command, shell, copy 20 | :param module_args: "src=%s dest=%s" % (src, dest) 21 | :return: 22 | """ 23 | super(AnsibleRunner, self).run_ad_hoc(host, module_name, module_args) 24 | 25 | def run_playbook(self, playbook, extra_vars=None): 26 | """ 27 | :param playbook: [''] 28 | :param extra_vars: {"key": "value"} 29 | :return: 30 | """ 31 | super(AnsibleRunner, self).run_playbook(playbook, extra_vars) 32 | -------------------------------------------------------------------------------- /apps/job/tasks/redis.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from common.utils.redis_api import OPRedis 4 | from job.utils.config import MyJobConfig 5 | 6 | job_config = MyJobConfig().sys_config 7 | # 公用一个Redis连接池 8 | ansible_redis = job_config.get('ansible_redis', '') 9 | ansible_redis_pwd = job_config.get('ansible_redis_pwd', '') 10 | AnsibleRedisPool = OPRedis(ansible_redis, ansible_redis_pwd) 11 | -------------------------------------------------------------------------------- /apps/job/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/job/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/job/utils/__init__.py -------------------------------------------------------------------------------- /apps/job/utils/config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from job.models.job import JobConfig 3 | 4 | 5 | class MyJobConfig(object): 6 | def __init__(self): 7 | self.sys_config = {} 8 | try: 9 | # 获取系统配置信息 10 | all_config = JobConfig.objects.all().values('item', 'value') 11 | for items in all_config: 12 | self.sys_config[items['item']] = items['value'].strip() 13 | except Exception: 14 | pass 15 | 16 | job_config = MyJobConfig().sys_config 17 | -------------------------------------------------------------------------------- /apps/job/views/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from .config import * 3 | from .inventory import * 4 | from .playbook import * 5 | -------------------------------------------------------------------------------- /apps/job/views/charts.py: -------------------------------------------------------------------------------- 1 | 2 | from django.shortcuts import render 3 | from django.contrib.auth.decorators import login_required 4 | 5 | 6 | @login_required 7 | def charts(request): 8 | return render(request, 'job/charts.html') 9 | -------------------------------------------------------------------------------- /apps/job/ws/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/job/ws/__init__.py -------------------------------------------------------------------------------- /apps/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", "wdoneops.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 | -------------------------------------------------------------------------------- /apps/ssh/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/ssh/__init__.py -------------------------------------------------------------------------------- /apps/ssh/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/ssh/api/__init__.py -------------------------------------------------------------------------------- /apps/ssh/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SshConfig(AppConfig): 5 | name = 'ssh' 6 | -------------------------------------------------------------------------------- /apps/ssh/forms.py: -------------------------------------------------------------------------------- 1 | # _*_ coding: utf-8 _*_ 2 | 3 | from django.forms import ModelForm 4 | from ssh.models.host_user import HostUser 5 | from ssh.models.perilous_command import PerilousCommand, CommandDetail, CommandGroup 6 | 7 | 8 | class HostUserForm(ModelForm): 9 | class Meta: 10 | model = HostUser 11 | fields = ["username", "login_type", "password", "key_password", "key_path", "key_pub", "key_pvt", 12 | "version", "active", "description"] 13 | 14 | 15 | class PerilousCommandForm(ModelForm): 16 | class Meta: 17 | model = PerilousCommand 18 | fields = ["cmd_regex", "cmd_type", "comment"] 19 | 20 | 21 | class CommandDetailForm(ModelForm): 22 | class Meta: 23 | model = CommandDetail 24 | fields = ["perilous_command", "cmd_type"] 25 | 26 | 27 | class CommandGroupForm(ModelForm): 28 | class Meta: 29 | model = CommandGroup 30 | fields = ["name", "command_detail", "comment", "group_type"] 31 | -------------------------------------------------------------------------------- /apps/ssh/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/ssh/migrations/__init__.py -------------------------------------------------------------------------------- /apps/ssh/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/ssh/models/__init__.py -------------------------------------------------------------------------------- /apps/ssh/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/ssh/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/ssh/utils/__init__.py -------------------------------------------------------------------------------- /apps/ssh/utils/host_user.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import traceback 5 | from cmdb.models.asset import Server 6 | from ssh.models.host_user import HostUserAsset 7 | 8 | 9 | def get_host_user(ip, port, user): 10 | try: 11 | host = Server.objects.get(login_address='{}:{}'.format(ip, str(port))) 12 | hua = HostUserAsset.objects.get(asset=host, host_user__username=user, host_user__active=True) 13 | return hua.host_user 14 | except Server.DoesNotExist: 15 | traceback.print_exc() 16 | except HostUserAsset.DoesNotExist: 17 | traceback.print_exc() 18 | except Exception: 19 | traceback.print_exc() 20 | return 21 | -------------------------------------------------------------------------------- /apps/ssh/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/ssh/views/__init__.py -------------------------------------------------------------------------------- /apps/ssh/views/charts.py: -------------------------------------------------------------------------------- 1 | 2 | from django.shortcuts import render 3 | from django.contrib.auth.decorators import login_required 4 | 5 | 6 | @login_required 7 | def charts(request): 8 | return render(request, 'ssh/charts.html') 9 | -------------------------------------------------------------------------------- /apps/static/ace/ext-error_marker.js: -------------------------------------------------------------------------------- 1 | 2 | ; 3 | (function() { 4 | ace.require(["ace/ext/error_marker"], function() {}); 5 | })(); 6 | -------------------------------------------------------------------------------- /apps/static/ace/mode-plain_text.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/mode/plain_text",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/behaviour"], function(require, exports, module) { 2 | "use strict"; 3 | 4 | var oop = require("../lib/oop"); 5 | var TextMode = require("./text").Mode; 6 | var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; 7 | var Behaviour = require("./behaviour").Behaviour; 8 | 9 | var Mode = function() { 10 | this.HighlightRules = TextHighlightRules; 11 | this.$behaviour = new Behaviour(); 12 | }; 13 | 14 | oop.inherits(Mode, TextMode); 15 | 16 | (function() { 17 | this.type = "text"; 18 | this.getNextLineIndent = function(state, line, tab) { 19 | return ''; 20 | }; 21 | this.$id = "ace/mode/plain_text"; 22 | }).call(Mode.prototype); 23 | 24 | exports.Mode = Mode; 25 | }); 26 | -------------------------------------------------------------------------------- /apps/static/ace/mode-text.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/static/ace/snippets/sql.js: -------------------------------------------------------------------------------- 1 | define("ace/snippets/sql",["require","exports","module"], function(require, exports, module) { 2 | "use strict"; 3 | 4 | exports.snippetText = "snippet tbl\n\ 5 | create table ${1:table} (\n\ 6 | ${2:columns}\n\ 7 | );\n\ 8 | snippet col\n\ 9 | ${1:name} ${2:type} ${3:default ''} ${4:not null}\n\ 10 | snippet ccol\n\ 11 | ${1:name} varchar2(${2:size}) ${3:default ''} ${4:not null}\n\ 12 | snippet ncol\n\ 13 | ${1:name} number ${3:default 0} ${4:not null}\n\ 14 | snippet dcol\n\ 15 | ${1:name} date ${3:default sysdate} ${4:not null}\n\ 16 | snippet ind\n\ 17 | create index ${3:$1_$2} on ${1:table}(${2:column});\n\ 18 | snippet uind\n\ 19 | create unique index ${1:name} on ${2:table}(${3:column});\n\ 20 | snippet tblcom\n\ 21 | comment on table ${1:table} is '${2:comment}';\n\ 22 | snippet colcom\n\ 23 | comment on column ${1:table}.${2:column} is '${3:comment}';\n\ 24 | snippet addcol\n\ 25 | alter table ${1:table} add (${2:column} ${3:type});\n\ 26 | snippet seq\n\ 27 | create sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\n\ 28 | snippet s*\n\ 29 | select * from ${1:table}\n\ 30 | "; 31 | exports.scope = "sql"; 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/static/admin/fonts/Roboto-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/admin/fonts/Roboto-Bold-webfont.woff -------------------------------------------------------------------------------- /apps/static/admin/fonts/Roboto-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/admin/fonts/Roboto-Light-webfont.woff -------------------------------------------------------------------------------- /apps/static/admin/fonts/Roboto-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/admin/fonts/Roboto-Regular-webfont.woff -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/static/admin/img/calendar-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /apps/static/admin/img/gis/move_vertex_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/static/admin/img/gis/move_vertex_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-addlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-changelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-deletelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-unknown-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-unknown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/icon-yes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/inline-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/sorting-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /apps/static/admin/img/tooltag-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/img/tooltag-arrowright.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/static/admin/js/cancel.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | 'use strict'; 3 | $(function() { 4 | $('.cancel-link').click(function(e) { 5 | e.preventDefault(); 6 | window.history.back(); 7 | }); 8 | }); 9 | })(django.jQuery); 10 | -------------------------------------------------------------------------------- /apps/static/admin/js/change_form.js: -------------------------------------------------------------------------------- 1 | /*global showAddAnotherPopup, showRelatedObjectLookupPopup showRelatedObjectPopup updateRelatedObjectLinks*/ 2 | 3 | (function($) { 4 | 'use strict'; 5 | $(document).ready(function() { 6 | var modelName = $('#django-admin-form-add-constants').data('modelName'); 7 | $('body').on('click', '.add-another', function(e) { 8 | e.preventDefault(); 9 | var event = $.Event('django:add-another-related'); 10 | $(this).trigger(event); 11 | if (!event.isDefaultPrevented()) { 12 | showAddAnotherPopup(this); 13 | } 14 | }); 15 | 16 | if (modelName) { 17 | $('form#' + modelName + '_form :input:visible:enabled:first').focus(); 18 | } 19 | }); 20 | })(django.jQuery); 21 | -------------------------------------------------------------------------------- /apps/static/admin/js/collapse.js: -------------------------------------------------------------------------------- 1 | /*global gettext*/ 2 | (function($) { 3 | 'use strict'; 4 | $(document).ready(function() { 5 | // Add anchor tag for Show/Hide link 6 | $("fieldset.collapse").each(function(i, elem) { 7 | // Don't hide if fields in this fieldset have errors 8 | if ($(elem).find("div.errors").length === 0) { 9 | $(elem).addClass("collapsed").find("h2").first().append(' (' + 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 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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}})(); -------------------------------------------------------------------------------- /apps/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 | -------------------------------------------------------------------------------- /apps/static/bootsidemenu/.gitignore: -------------------------------------------------------------------------------- 1 | js/bootstrap.js 2 | js/bootstrap.min.js 3 | js/jquery-1.11.1.min.js 4 | js/html5shiv.min.js 5 | js/respond.min.js 6 | css/bootstrap-theme.min.css 7 | css/bootstrap-theme.css.map 8 | css/bootstrap-theme.css 9 | css/bootstrap.min.css 10 | css/bootstrap.css.map 11 | css/bootstrap.css 12 | fonts/glyphicons-halflings-regular.woff 13 | fonts/glyphicons-halflings-regular.ttf 14 | fonts/glyphicons-halflings-regular.svg 15 | fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /apps/static/bootsidemenu/css/theme/darkblue.css: -------------------------------------------------------------------------------- 1 | /*========== Theme Darkblue ==========*/ 2 | .darkblue { 3 | background-color: #1D4E6D; 4 | color: #F7A92C; 5 | } 6 | 7 | .darkblue .toggler { 8 | background-color: #1D4E6D; 9 | } 10 | 11 | .darkblue a, 12 | .darkblue a:hover, 13 | .darkblue a:visited { 14 | color: #9CDD80; 15 | } 16 | 17 | .darkblue.bootsidemenu-left, 18 | .darkblue.bootsidemenu-right, 19 | .darkblue.bootsidemenu-left > .toggler, 20 | .darkblue.bootsidemenu-right > .toggler { 21 | border-color: #44475a; 22 | } 23 | 24 | .darkblue .list-group-item.active, 25 | .darkblue .list-group-item.active:focus, 26 | .darkblue .list-group-item.active:hover, 27 | .darkblue .item.active:focus { 28 | color: #44475a; 29 | background-color: #BED6FF; 30 | border-color: #BED6FF; 31 | } 32 | 33 | .darkblue a.list-group-item { 34 | color: #F7A92C; 35 | } 36 | 37 | .darkblue a.list-group-item:focus, 38 | .darkblue a.list-group-item:hover, 39 | .darkblue button.list-group-item:focus, 40 | .darkblue button.list-group-item:hover { 41 | color: #44475a; 42 | text-decoration: none; 43 | background-color: #BED6FF; 44 | border-color: #BED6FF; 45 | } 46 | 47 | /*========== /Theme Darkblue ==========*/ -------------------------------------------------------------------------------- /apps/static/bootsidemenu/css/theme/dracula.css: -------------------------------------------------------------------------------- 1 | /*========== Theme Dracula ==========*/ 2 | 3 | .dracula { 4 | background-color: #282a36; 5 | color: #f8f8f2; 6 | } 7 | 8 | .dracula .toggler { 9 | background-color: #282a36; 10 | } 11 | 12 | .dracula a, 13 | .dracula a:hover, 14 | .dracula a:visited { 15 | color: #6272a4; 16 | } 17 | 18 | .dracula.bootsidemenu-left, 19 | .dracula.bootsidemenu-right, 20 | .dracula.bootsidemenu-left > .toggler, 21 | .dracula.bootsidemenu-right > .toggler { 22 | border-color: #44475a; 23 | } 24 | 25 | .dracula .list-group-item.active, 26 | .dracula .list-group-item.active:focus, 27 | .dracula .list-group-item.active:hover, 28 | .dracula .item.active:focus { 29 | color: #44475a; 30 | background-color: #ff5555; 31 | border-color: #ff5555; 32 | } 33 | 34 | .dracula a.list-group-item { 35 | color: #f8f8f2; 36 | } 37 | 38 | .dracula a.list-group-item:focus, 39 | .dracula a.list-group-item:hover, 40 | .dracula button.list-group-item:focus, 41 | .dracula button.list-group-item:hover { 42 | color: #44475a; 43 | text-decoration: none; 44 | background-color: #ff5555; 45 | border-color: #ff5555; 46 | } 47 | 48 | /*========== /Theme Dracula ==========*/ -------------------------------------------------------------------------------- /apps/static/bootsidemenu/css/theme/pinklady.css: -------------------------------------------------------------------------------- 1 | /*========== Theme Pink Lady ==========*/ 2 | .pinklady { 3 | background-color: #e1afd2; 4 | color: #e4ecfd; 5 | } 6 | 7 | .pinklady .toggler { 8 | background-color: #e1afd2; 9 | } 10 | 11 | .pinklady a, 12 | .pinklady a:hover, 13 | .pinklady a:visited { 14 | color: #ad368e; 15 | } 16 | 17 | .pinklady.bootsidemenu-left, 18 | .pinklady.bootsidemenu-right, 19 | .pinklady.bootsidemenu-left > .toggler, 20 | .pinklady.bootsidemenu-right > .toggler { 21 | border-color: #d987c4; 22 | } 23 | 24 | .pinklady .list-group-item.active, 25 | .pinklady .list-group-item.active:focus, 26 | .pinklady .list-group-item.active:hover, 27 | .pinklady .item.active:focus { 28 | color: #44475a; 29 | background-color: #d987c4; 30 | border-color: #d987c4; 31 | } 32 | 33 | .pinklady a.list-group-item { 34 | color: #e4ecfd; 35 | } 36 | 37 | .pinklady a.list-group-item:focus, 38 | .pinklady a.list-group-item:hover, 39 | .pinklady button.list-group-item:focus, 40 | .pinklady button.list-group-item:hover { 41 | color: #44475a; 42 | text-decoration: none; 43 | background-color: #d987c4; 44 | border-color: #d987c4; 45 | } 46 | 47 | /*========== /Theme Pink Lady ==========*/ -------------------------------------------------------------------------------- /apps/static/bootsidemenu/css/theme/somebook.css: -------------------------------------------------------------------------------- 1 | /*========== Theme Some Book ==========*/ 2 | .somebook { 3 | background-color: #4468B0; 4 | color: #ffffff; 5 | } 6 | 7 | .somebook .toggler { 8 | background-color: #4468B0; 9 | } 10 | 11 | .somebook a, 12 | .somebook a:hover, 13 | .somebook a:visited { 14 | color: #0D1423; 15 | } 16 | 17 | .somebook.bootsidemenu-left, 18 | .somebook.bootsidemenu-right, 19 | .somebook.bootsidemenu-left > .toggler, 20 | .somebook.bootsidemenu-right > .toggler { 21 | border-color: #3D5D9E; 22 | } 23 | 24 | .somebook .list-group-item.active, 25 | .somebook .list-group-item.active:focus, 26 | .somebook .list-group-item.active:hover, 27 | .somebook .item.active:focus { 28 | color: #ffffff; 29 | background-color: #3D5D9E; 30 | border-color: #3D5D9E; 31 | } 32 | 33 | .somebook a.list-group-item { 34 | color: #ffffff; 35 | } 36 | 37 | .somebook a.list-group-item:focus, 38 | .somebook a.list-group-item:hover, 39 | .somebook button.list-group-item:focus, 40 | .somebook button.list-group-item:hover { 41 | color: #ffffff; 42 | text-decoration: none; 43 | background-color: #3D5D9E; 44 | border-color: #3D5D9E; 45 | } 46 | /*========== /Theme Some Book ==========*/ -------------------------------------------------------------------------------- /apps/static/bootsidemenu/css/theme/zenburn.css: -------------------------------------------------------------------------------- 1 | /*========== Theme Zenburn ==========*/ 2 | .zenburn { 3 | background-color: #404040; 4 | color: #CAE682; 5 | } 6 | 7 | .zenburn .toggler { 8 | background-color: #404040; 9 | } 10 | 11 | .zenburn a, 12 | .zenburn a:hover, 13 | .zenburn a:visited { 14 | color: #EFEFAF; 15 | } 16 | 17 | .zenburn.bootsidemenu-left, 18 | .zenburn.bootsidemenu-right, 19 | .zenburn.bootsidemenu-left > .toggler, 20 | .zenburn.bootsidemenu-right > .toggler { 21 | border-color: #44475a; 22 | } 23 | 24 | .zenburn .list-group-item.active, 25 | .zenburn .list-group-item.active:focus, 26 | .zenburn .list-group-item.active:hover, 27 | .zenburn .item.active:focus { 28 | color: #44475a; 29 | background-color: #DFBE95; 30 | border-color: #DFBE95; 31 | } 32 | 33 | .zenburn a.list-group-item { 34 | color: #CAE682; 35 | } 36 | 37 | .zenburn a.list-group-item:focus, 38 | .zenburn a.list-group-item:hover, 39 | .zenburn button.list-group-item:focus, 40 | .zenburn button.list-group-item:hover { 41 | color: #44475a; 42 | text-decoration: none; 43 | background-color: #DFBE95; 44 | border-color: #DFBE95; 45 | } 46 | 47 | /*========== /Theme Zenburn ==========*/ -------------------------------------------------------------------------------- /apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /apps/static/bootstrap-3.3.7-dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /apps/static/bootstrap-fileinput/img/loading-sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap-fileinput/img/loading-sm.gif -------------------------------------------------------------------------------- /apps/static/bootstrap-fileinput/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap-fileinput/img/loading.gif -------------------------------------------------------------------------------- /apps/static/bootstrap-multiselect/css/bootstrap-multiselect.css: -------------------------------------------------------------------------------- 1 | .multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:bold}.multiselect-container>li>label.multiselect-group{margin:0;padding:3px 20px 3px 20px;height:100%;font-weight:bold}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:normal}.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0}.multiselect-container>li>a>label>input[type="checkbox"]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px} -------------------------------------------------------------------------------- /apps/static/bootstrap-table/js/bootstrap-table-zh-CN.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.11.0 - 2016-07-02 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2016 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";a.fn.bootstrapTable.locales["zh-CN"]={formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候……"},formatRecordsPerPage:function(a){return"每页显示 "+a+" 条记录"},formatShowingRows:function(a,b,c){return"显示第 "+a+" 到第 "+b+" 条记录,总共 "+c+" 条记录"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatRefresh:function(){return"刷新"},formatToggle:function(){return"切换"},formatColumns:function(){return"列"},formatExport:function(){return"导出数据"},formatClearFilters:function(){return"清空过滤"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["zh-CN"])}(jQuery); -------------------------------------------------------------------------------- /apps/static/bootstrap3-editable/img/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap3-editable/img/clear.png -------------------------------------------------------------------------------- /apps/static/bootstrap3-editable/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/bootstrap3-editable/img/loading.gif -------------------------------------------------------------------------------- /apps/static/datetimepicker/js/bootstrap-datetimepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simplified Chinese translation for bootstrap-datetimepicker 3 | * Yuan Cheung 4 | */ 5 | ;(function($){ 6 | $.fn.datetimepicker.dates['zh-CN'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今天", 13 | suffix: [], 14 | meridiem: ["上午", "下午"] 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /apps/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/favicon.ico -------------------------------------------------------------------------------- /apps/static/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /apps/static/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /apps/static/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /apps/static/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /apps/static/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /apps/static/layer-v3.1.1/theme/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/layer-v3.1.1/theme/default/icon-ext.png -------------------------------------------------------------------------------- /apps/static/layer-v3.1.1/theme/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/layer-v3.1.1/theme/default/icon.png -------------------------------------------------------------------------------- /apps/static/layer-v3.1.1/theme/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/layer-v3.1.1/theme/default/loading-0.gif -------------------------------------------------------------------------------- /apps/static/layer-v3.1.1/theme/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/layer-v3.1.1/theme/default/loading-1.gif -------------------------------------------------------------------------------- /apps/static/layer-v3.1.1/theme/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/layer-v3.1.1/theme/default/loading-2.gif -------------------------------------------------------------------------------- /apps/static/oneops/css/login.css: -------------------------------------------------------------------------------- 1 | .user-bottom-div { 2 | display: block; 3 | text-align: center; 4 | background-color: #ddd; 5 | position: fixed; 6 | bottom: 0; 7 | width: 100%; 8 | height: 50px; 9 | line-height: 50px; 10 | } 11 | 12 | .lsb-login { 13 | display: flex; 14 | justify-content: center; 15 | align-items: center; 16 | height: 90vh; 17 | } 18 | 19 | .mypanalbox { 20 | background-color: #FFF; 21 | border-radius: 8px; 22 | box-shadow: 3px 3px 3px; 23 | } 24 | 25 | .login-form { 26 | margin: 20px; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /apps/static/sb-admin-2/js/sb-admin-2.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - SB Admin 2 v3.3.7+1 (http://startbootstrap.com/template-overviews/sb-admin-2) 3 | * Copyright 2013-2016 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | $(function(){$("#side-menu").metisMenu()}),$(function(){$(window).bind("load resize",function(){var i=50,n=this.window.innerWidth>0?this.window.innerWidth:this.screen.width;n<768?($("div.navbar-collapse").addClass("collapse"),i=100):$("div.navbar-collapse").removeClass("collapse");var e=(this.window.innerHeight>0?this.window.innerHeight:this.screen.height)-1;e-=i,e<1&&(e=1),e>i&&$("#page-wrapper").css("min-height",e+"px")});for(var i=window.location,n=$("ul.nav a").filter(function(){return this.href==i}).addClass("active").parent();;){if(!n.is("li"))break;n=n.parent().addClass("in").parent()}}); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/af.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Verwyders asseblief "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Voer asseblief "+t+" of meer karakters";return n},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var t="Kies asseblief net "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ar.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum;return"الرجاء حذف "+t+" عناصر"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"الرجاء إضافة "+t+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){return"تستطيع إختيار "+e.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/az.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/bg.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/bs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/bs",[],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 uspijelo."},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ca.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/cs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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;return"Angiv venligst "+t+" tegn mindre"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Angiv venligst "+t+" tegn mere"},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/dsb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/dsb",[],function(){var e=["znamuško","znamušce","znamuška","znamuškow"],t=["zapisk","zapiska","zapiski","zapiskow"],n=function(t,n){if(t===1)return n[0];if(t===2)return n[1];if(t>2&&t<=4)return n[2];if(t>=5)return n[3]};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Pšosym lašuj "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Pšosym zapódaj nanejmjenjej "+r+" "+n(r,e)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(e){return"Móžoš jano "+e.maximum+" "+n(e.maximum,t)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/el.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/en.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/es.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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"No se pudieron cargar los resultados"},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{errorLoading:function(){return"Tuloksia ei saatu ladattua."},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(){return"Haetaan…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/fr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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;return"Supprimez "+t+" caractère"+(t>1)?"s":""},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Saisissez au moins "+t+" caractère"+(t>1)?"s":""},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1)?"s":""},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/gl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var t=e.input.length-e.maximum;return t===1?"Elimine un carácter":"Elimine "+t+" caracteres"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t===1?"Engada un carácter":"Engada "+t+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return e.maximum===1?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/he.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/hi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/hsb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/hsb",[],function(){var e=["znamješko","znamješce","znamješka","znamješkow"],t=["zapisk","zapiskaj","zapiski","zapiskow"],n=function(t,n){if(t===1)return n[0];if(t===2)return n[1];if(t>2&&t<=4)return n[2];if(t>=5)return n[3]};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Prošu zhašej "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Prošu zapodaj znajmjeńša "+r+" "+n(r,e)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(e){return"Móžeš jenož "+e.maximum+" "+n(e.maximum,t)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/hu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/hy.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/hy",[],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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/it.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ja.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/km.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/lt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/mk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ms.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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 "+t+" tegn til";return n+" tegn til"},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/nl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/pl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ps.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="د مهربانۍ لمخي "+t+" توری ړنګ کړئ";return t!=1&&(n=n.replace("توری","توري")),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=t.replace("قلم","قلمونه")),t},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/pt-BR.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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":"caractere",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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ro.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/ru.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/sk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},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"Načítanie ďalších výsledkov…"},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/sl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Prosim zbrišite "+t+" znak";return t==2?n+="a":t!=1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Prosim vpišite še "+t+" znak";return t==2?n+="a":t!=1&&(n+="e"),n},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var t="Označite lahko največ "+e.maximum+" predmet";return e.maximum==2?t+="a":e.maximum!=1&&(t+="e"),t},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/sr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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{errorLoading:function(){return"Sonuç yüklenemedi"},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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/uk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/select2-4.0.5/js/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | 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}})(); -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/awesomeStyle/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/awesomeStyle/img/loading.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/metroStyle/img/line_conn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/metroStyle/img/line_conn.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/metroStyle/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/metroStyle/img/loading.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/metroStyle/img/metro.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/metroStyle/img/metro.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/metroStyle/img/metro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/metroStyle/img/metro.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/1_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/1_close.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/1_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/1_open.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/2.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/3.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/4.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/5.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/6.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/7.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/8.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/diy/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/diy/9.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/line_conn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/line_conn.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/loading.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/zTreeStandard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/zTreeStandard.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/css/zTreeStyle/img/zTreeStandard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/css/zTreeStyle/img/zTreeStandard.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/cn/asyncData/getNodes.php: -------------------------------------------------------------------------------- 1 | 2 | [] 43 | -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/cn/asyncData/getNodesForBigData.php: -------------------------------------------------------------------------------- 1 | 2 | [] 27 | -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/cn/super/left_menuForOutLook.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/demo/cn/super/left_menuForOutLook.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/cn/super/left_menuForOutLook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/demo/cn/super/left_menuForOutLook.png -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/en/asyncData/getNodes.php: -------------------------------------------------------------------------------- 1 | 2 | [] 43 | -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/en/asyncData/getNodesForBigData.php: -------------------------------------------------------------------------------- 1 | 2 | [] 27 | -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/en/super/left_menuForOutLook.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/demo/en/super/left_menuForOutLook.gif -------------------------------------------------------------------------------- /apps/static/zTree_v3/demo/en/super/left_menuForOutLook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/static/zTree_v3/demo/en/super/left_menuForOutLook.png -------------------------------------------------------------------------------- /apps/templates/dns_pod/charts.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block custom_nav_bar_left %} 3 | {% include 'nav_bar_left_dns.html' %} 4 | {% endblock %} 5 | {% block content %} 6 |
7 |
8 |
9 |

暂未实现!

10 |
11 |
12 |
13 | {% endblock %} 14 | 15 | -------------------------------------------------------------------------------- /apps/templates/foot_script.html: -------------------------------------------------------------------------------- 1 | {% load staticfiles %} 2 | -------------------------------------------------------------------------------- /apps/templates/head_custom_script.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block custom_nav_bar_left %} 3 | {% include 'nav_bar_left_default.html' %} 4 | {% endblock %} 5 | {% block content %} 6 |
7 |
8 |
9 |

欢迎,欢迎!

10 |
11 |
12 |
13 | {% endblock %} 14 | 15 | -------------------------------------------------------------------------------- /apps/templates/job/charts.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block custom_nav_bar_left %} 3 | {% include 'nav_bar_left_job.html' %} 4 | {% endblock %} 5 | {% block content %} 6 |
7 |
8 |
9 |

暂未实现!

10 |
11 |
12 |
13 | {% endblock %} 14 | 15 | -------------------------------------------------------------------------------- /apps/templates/job/help.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block custom_head_css_js %} 3 | {% load staticfiles %} 4 | 5 | 6 | {% endblock %} 7 | {% block custom_nav_bar_left %} 8 | {% include 'nav_bar_left_job.html' %} 9 | {% endblock %} 10 | {% block content %} 11 |
12 |
13 |
14 |
15 |

ansible使用copy模块进行文件分发,我已经整合在 "命令执行" 中。

16 |

点击 "作业执行" -》 "命令执行","Ansible模块" 选择 "copy"即可。

17 |

暂时使用以上方法,以后新增 Paramiko + celery执行方式,再开发本页面。

18 |
19 |
20 |
21 |
22 | 23 | {% endblock content %} 24 | {% block custom_foot_css_js %} 25 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /apps/templates/message.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 |

{{message}}

5 | {% endblock content %} 6 | -------------------------------------------------------------------------------- /apps/templates/nav_bar_left_dns.html: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /apps/templates/ssh/charts.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block custom_nav_bar_left %} 3 | {% include 'nav_bar_left_ssh.html' %} 4 | {% endblock %} 5 | {% block content %} 6 |
7 |
8 |
9 |

暂未实现!

10 |
11 |
12 |
13 | {% endblock %} 14 | 15 | -------------------------------------------------------------------------------- /apps/templates/tools/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block custom_nav_bar_left %} 3 | {% include 'nav_bar_left_tools.html' %} 4 | {% endblock %} 5 | {% block content %} 6 |
7 |
8 |
9 |

欢迎,欢迎!

10 |
11 |
12 |
13 | {% endblock %} 14 | 15 | -------------------------------------------------------------------------------- /apps/tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/__init__.py -------------------------------------------------------------------------------- /apps/tools/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin -------------------------------------------------------------------------------- /apps/tools/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/api/__init__.py -------------------------------------------------------------------------------- /apps/tools/api/qizhi.py: -------------------------------------------------------------------------------- 1 | 2 | from django.views.generic import View 3 | from django.http import HttpResponse 4 | from tools.utils.qizhi_api import create_host 5 | 6 | 7 | class QiZhiCreateHostAPIView(View): 8 | 9 | def post(self, request, *args, **kwargs): 10 | try: 11 | group_ids = request.POST.getlist('group', []) 12 | hostname = request.POST.get('hostname', None) 13 | ip = request.POST.get('ip', None) 14 | print(group_ids, hostname, ip) 15 | if group_ids and hostname and ip: 16 | res = create_host(group_ids, hostname, ip) 17 | else: 18 | res = '组、主机名、ip 不允许为空!' 19 | except Exception as e: 20 | res = str(e) 21 | return HttpResponse(res) 22 | -------------------------------------------------------------------------------- /apps/tools/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ToolsConfig(AppConfig): 5 | name = 'tools' 6 | -------------------------------------------------------------------------------- /apps/tools/forms.py: -------------------------------------------------------------------------------- 1 | # _*_ coding: utf-8 _*_ 2 | 3 | -------------------------------------------------------------------------------- /apps/tools/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/migrations/__init__.py -------------------------------------------------------------------------------- /apps/tools/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/models/__init__.py -------------------------------------------------------------------------------- /apps/tools/scripts/dbpasswordhelper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/scripts/dbpasswordhelper.class -------------------------------------------------------------------------------- /apps/tools/scripts/tomcat_restart.yml: -------------------------------------------------------------------------------- 1 | - hosts: "{{apphost}}" 2 | tasks: 3 | - name: copy file to tmp 4 | copy: src=/data/ansible/scripts/admin/tomcat_restart.sh dest=/tmp/tomcat_restart.sh mode=0775 5 | ignore_errors: yes 6 | - name: ops java 7 | shell: /bin/bash /tmp/tomcat_restart.sh {{app_code}} {{tomcat_port}} {{do}} 8 | register: result 9 | ignore_errors: True 10 | - debug: msg="{{result.stdout}}" 11 | serial: "60%" -------------------------------------------------------------------------------- /apps/tools/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/tools/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/utils/__init__.py -------------------------------------------------------------------------------- /apps/tools/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/tools/views/__init__.py -------------------------------------------------------------------------------- /apps/tools/views/dashboard.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.contrib.auth.decorators import login_required 3 | 4 | 5 | @login_required 6 | def dashboard(request): 7 | return render(request, 'tools/index.html') 8 | -------------------------------------------------------------------------------- /apps/tools/views/encryption.py: -------------------------------------------------------------------------------- 1 | 2 | from django.views.generic import TemplateView 3 | from django.contrib.auth.mixins import LoginRequiredMixin 4 | 5 | 6 | class EncryptionView(LoginRequiredMixin, TemplateView): 7 | template_name = "tools/encryption.html" 8 | 9 | def get(self, request, **kwargs): 10 | context = { 11 | 'path1': '小工具', 12 | 'path2': '维密天使' 13 | } 14 | context.update(**kwargs) 15 | return self.render_to_response(context) 16 | -------------------------------------------------------------------------------- /apps/tools/views/qizhi.py: -------------------------------------------------------------------------------- 1 | 2 | from django.views.generic import TemplateView 3 | from django.contrib.auth.mixins import LoginRequiredMixin 4 | 5 | 6 | class QiZhiCreateHostView(LoginRequiredMixin, TemplateView): 7 | template_name = "tools/qizhi_create_host.html" 8 | 9 | def get(self, request, **kwargs): 10 | context = { 11 | 'path1': '小工具', 12 | 'path2': '堡垒机录入' 13 | } 14 | context.update(**kwargs) 15 | return self.render_to_response(context) 16 | -------------------------------------------------------------------------------- /apps/tools/views/tomcat.py: -------------------------------------------------------------------------------- 1 | 2 | from django.views.generic import TemplateView 3 | from django.contrib.auth.mixins import LoginRequiredMixin 4 | 5 | from cmdb.models.asset import Server 6 | 7 | 8 | class TomcatView(LoginRequiredMixin, TemplateView): 9 | template_name = "tools/tomcat.html" 10 | 11 | def get(self, request, **kwargs): 12 | test_host_list = Server.objects.filter(app_env='test').order_by('hostname') 13 | host_id = request.GET.get('select_id', 0) 14 | if host_id == 0: 15 | tomcat_list = list() 16 | else: 17 | tomcat_list = Server.objects.get(id=host_id).app.all() 18 | context = { 19 | 'path1': '小工具', 20 | 'path2': 'Tomcat', 21 | 'test_host_list': test_host_list, 22 | 'select_id': int(host_id), 23 | 'tomcat_list': tomcat_list 24 | } 25 | context.update(**kwargs) 26 | return self.render_to_response(context) 27 | -------------------------------------------------------------------------------- /apps/wdoneops.conf: -------------------------------------------------------------------------------- 1 | #coding: utf8 2 | 3 | [base] 4 | ip = 127.0.0.1 5 | port = 8000 6 | key = 88cccf7ffe3c6c04 7 | root_url = http://oneops.yadoom.com 8 | 9 | [log] 10 | log_file = wdoneops.log 11 | sql_log_file = wdoneops_sql.log 12 | 13 | [oauth] 14 | oauth_api = http://portal.yadoom.com/oauth2 15 | client_id = wd_oneops 16 | client_secret = wd_oneops 17 | redirect_uri = http://192.168.21.241:8888/accounts/oauth/auth/ 18 | 19 | [db_default] 20 | host = 127.0.0.1 21 | port = 3306 22 | user = root 23 | password = root 24 | database = wdoneops 25 | test_database = wdoneops 26 | 27 | [db_bind_prod] 28 | host = 127.0.0.1 29 | port = 3306 30 | user = root 31 | password = root 32 | database = bind_prod 33 | 34 | [db_bind_beta] 35 | host = 127.0.0.1 36 | port = 3306 37 | user = root 38 | password = root 39 | database = bind_beta 40 | 41 | [db_bind_pre] 42 | host = 127.0.0.1 43 | port = 3306 44 | user = root 45 | password = root 46 | database = bind_pre 47 | 48 | [db_bind_test] 49 | host = 127.0.0.1 50 | port = 3306 51 | user = root 52 | password = root 53 | database = bind_test 54 | 55 | [db_bind_dev] 56 | host = 127.0.0.1 57 | port = 3306 58 | user = root 59 | password = root 60 | database = bind_dev 61 | -------------------------------------------------------------------------------- /apps/wdoneops/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, unicode_literals 2 | 3 | # This will make sure the app is always imported when 4 | # Django starts so that shared_task will use this app. 5 | from .celery import celery_app 6 | import pymysql 7 | 8 | pymysql.install_as_MySQLdb() 9 | 10 | __all__ = ('celery_app',) 11 | -------------------------------------------------------------------------------- /apps/wdoneops/asgi.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import django 5 | from channels.routing import get_default_application 6 | 7 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wdoneops.settings") 8 | django.setup() 9 | application = get_default_application() 10 | -------------------------------------------------------------------------------- /apps/wdoneops/celery.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, unicode_literals 2 | import os 3 | import datetime 4 | from celery import Celery, platforms 5 | 6 | # set the default Django settings module for the 'celery' program. 7 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wdoneops.settings') 8 | 9 | celery_app = Celery('wdoneops') 10 | celery_app.now = datetime.datetime.now 11 | 12 | # Using a string here means the worker doesn't have to serialize 13 | # the configuration object to child processes. 14 | # - namespace='CELERY' means all celery-related configuration keys 15 | # should have a `CELERY_` prefix. 16 | celery_app.config_from_object('django.conf:settings', namespace='CELERY') 17 | 18 | # Load task modules from all registered Django app configs. 19 | celery_app.autodiscover_tasks() 20 | 21 | platforms.C_FORCE_ROOT = True 22 | 23 | 24 | @celery_app.task(bind=True) 25 | def debug_task(self): 26 | print('Request: {0!r}'.format(self.request)) 27 | -------------------------------------------------------------------------------- /apps/wdoneops/context_processors.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | 3 | 4 | def global_info(request): 5 | """存放用户,菜单信息等.""" 6 | user = request.user 7 | if user: 8 | # 获取待办数量 9 | try: 10 | todo = 0 11 | except Exception: 12 | todo = 0 13 | else: 14 | todo = 0 15 | request.session.set_expiry(86400) 16 | info = { 17 | 'todo': todo 18 | } 19 | return info 20 | -------------------------------------------------------------------------------- /apps/wdoneops/routing.py: -------------------------------------------------------------------------------- 1 | # https://mp.weixin.qq.com/s/hqaPrPS7w3D-9SeegQAB2Q 2 | # https://github.com/ops-coffee/demo/tree/master/websocket 3 | 4 | from django.urls import path, re_path 5 | from channels.routing import ProtocolTypeRouter, URLRouter 6 | from channels.auth import AuthMiddlewareStack 7 | from job.ws.consumer import AdHocConsumer, PlaybookConsumer, JobConsumer, AppConsumer 8 | 9 | application = ProtocolTypeRouter({ 10 | 11 | "websocket": AuthMiddlewareStack( 12 | URLRouter([ 13 | # URLRouter just takes standard Django path() or url() entries. 14 | path(r'ws/ansible/ad_hoc/', AdHocConsumer), 15 | path(r'ws/ansible/playbook/', PlaybookConsumer), 16 | path(r'ws/ansible/job/', JobConsumer, name='job_consumer'), 17 | path(r'ws/ansible/app/', AppConsumer, name='app_consumer'), 18 | ]), 19 | ), 20 | }) 21 | -------------------------------------------------------------------------------- /apps/wdoneops/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for wdoneops 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", "wdoneops.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /apps/workflow/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/__init__.py -------------------------------------------------------------------------------- /apps/workflow/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | # Register your models here. 3 | from workflow.models import Workflow, FlowStep, FlowStepLog, CommonFlow, CommonFlowArg 4 | 5 | 6 | @admin.register(Workflow) 7 | class WorkflowAdmin(admin.ModelAdmin): 8 | list_display = ('id', 'code', 'name', 'counts', 'uri', 'wf_type', 'comment', 'is_active', 'update_time') 9 | search_fields = ['name', 'comment'] 10 | 11 | 12 | @admin.register(FlowStep) 13 | class FlowStepAdmin(admin.ModelAdmin): 14 | list_display = ('id', 'workflow', 'step', 'group', 'update_time') 15 | search_fields = ['workflow', 'group'] 16 | 17 | 18 | @admin.register(CommonFlow) 19 | class CommonFlowAdmin(admin.ModelAdmin): 20 | list_display = ('id', 'workflow', 'applicant', 'status', 'reason', 'content', 'result', 'update_time') 21 | search_fields = ['workflow', 'applicant', 'content'] 22 | 23 | 24 | @admin.register(CommonFlowArg) 25 | class CommonFlowArgAdmin(admin.ModelAdmin): 26 | list_display = ('id', 'cf', 'arg', 'value') 27 | 28 | 29 | @admin.register(FlowStepLog) 30 | class FlowStepLogAdmin(admin.ModelAdmin): 31 | list_display = ('id', 'cf', 'flow_step', 'operator', 'is_passed', 'reply', 'create_time') 32 | -------------------------------------------------------------------------------- /apps/workflow/api/workflow.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.views.generic import View 3 | from common.mixins import JSONResponseMixin 4 | from workflow.models import CommonFlow 5 | 6 | 7 | class WorkflowInfoAPIView(JSONResponseMixin, View): 8 | 9 | def get(self, request, *args, **kwargs): 10 | try: 11 | result = { 12 | "pending": CommonFlow.objects.filter(status='pending').count(), 13 | "ongoing": CommonFlow.objects.filter(applicant=request.user, status='ongoing').count(), 14 | "end": CommonFlow.objects.filter(applicant=request.user, status='end').count() 15 | } 16 | res = {'code': 0, 'result': result} 17 | except Exception as e: 18 | res = {'code': 1, 'errmsg': '执行出错:%s' % str(e)} 19 | return self.render_json_response(res) 20 | -------------------------------------------------------------------------------- /apps/workflow/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WorkflowConfig(AppConfig): 5 | name = 'workflow' 6 | -------------------------------------------------------------------------------- /apps/workflow/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/migrations/__init__.py -------------------------------------------------------------------------------- /apps/workflow/scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/scripts/__init__.py -------------------------------------------------------------------------------- /apps/workflow/scripts/app_offline.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: "{{apphost}}" 3 | tasks: 4 | - name: stop app process 5 | shell: ps -aux | grep -v grep | grep -w "{{appname}}" | awk '{print $2}'| xargs kill -9 6 | ignore_errors: yes 7 | - name: judge app dir is exits 8 | shell: ls /data/{{appport}}-{{appname}} 9 | ignore_errors: True 10 | register: result 11 | - name: result judge 12 | shell: echo "dir exits" 13 | when: result|succeeded 14 | notify: 15 | rename app dir 16 | - name: judge agent process is exits 17 | shell: ps -aux | grep -v grep | grep -w "{{appname}}" 18 | ignore_errors: True 19 | register: result 20 | 21 | handlers: 22 | - name: rename app dir 23 | shell: mv /data/{{appport}}-{{appname}} /data/{{appname}} 24 | -------------------------------------------------------------------------------- /apps/workflow/scripts/tomcat_dump.yml: -------------------------------------------------------------------------------- 1 | - hosts: "{{apphost}}" 2 | tasks: 3 | - name: get pid 4 | raw: lsof -i:{{app_port}} |tail -n1 |awk '{print $2}' 5 | register: pid 6 | ignore_errors: True 7 | - name: exec jmap 8 | shell: /usr/local/jdk1.8/bin/jmap -dump:format=b,file=/data/logs/apps/{{app_port}}-{{app_name}}/dump/dump.hprof {{pid.stdout}} 9 | ignore_errors: True 10 | - name: wait for 11 | wait_for: 12 | path: /data/logs/apps/{{app_port}}-{{app_name}}/dump/dump.hprof 13 | timeout: 600 14 | - name: download dump file 15 | fetch: src=/data/logs/apps/{{app_port}}-{{app_name}}/dump/dump.hprof dest=/data/dump/{{app_port}}.hprof flat=yes 16 | ignore_errors: True 17 | serial: "60%" 18 | -------------------------------------------------------------------------------- /apps/workflow/tasks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/tasks/__init__.py -------------------------------------------------------------------------------- /apps/workflow/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/templatetags/__init__.py -------------------------------------------------------------------------------- /apps/workflow/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /apps/workflow/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/utils/__init__.py -------------------------------------------------------------------------------- /apps/workflow/utils/aliyun_cdn.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 阿里云python SDK开发CDN刷新页面 3 | # pip install aliyun-python-sdk-cdn 4 | from aliyunsdkcore.client import AcsClient 5 | from aliyunsdkcore.acs_exception.exceptions import ClientException 6 | from aliyunsdkcore.acs_exception.exceptions import ServerException 7 | from aliyunsdkcdn.request.v20180510.RefreshObjectCachesRequest import RefreshObjectCachesRequest 8 | 9 | 10 | class AliCDNManager(object): 11 | 12 | def __init__(self, cdn): 13 | self.access_id = cdn.account 14 | self.access_secret = cdn.secret 15 | self.end_point = cdn.end_point 16 | self.client = AcsClient(self.access_id, self.access_secret, self.end_point) 17 | 18 | def flush(self, obj_uri, obj_type): 19 | request = RefreshObjectCachesRequest() 20 | request.set_accept_format('json') 21 | 22 | # 其值可以为File或Directory 23 | # print(11111, obj_uri, obj_type) 24 | request.set_ObjectType(obj_type) 25 | request.set_ObjectPath(obj_uri.strip()) 26 | 27 | response = self.client.do_action_with_exception(request) 28 | return str(response, encoding='utf-8') 29 | -------------------------------------------------------------------------------- /apps/workflow/utils/azure_oss.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import time 4 | from common.utils.base import BASE_DIR 5 | from azure.storage.blob import BlockBlobService, PublicAccess 6 | 7 | 8 | def upload_apk_to_azure_oss(oss, files): 9 | today = time.strftime("%Y-%m-%d", time.localtime()) 10 | apk_temp_dir = os.path.join(BASE_DIR, "logs", today) 11 | if not os.path.exists(apk_temp_dir): 12 | os.mkdir(apk_temp_dir) 13 | success, fail = [], [] 14 | block_blob_service = BlockBlobService(account_name=oss.account, account_key=oss.secret, 15 | endpoint_suffix=oss.end_point) 16 | for f in files: 17 | file_path = os.path.join(apk_temp_dir, f.name) 18 | 19 | with open(file_path, 'wb+') as info: 20 | for chunk in f.chunks(): 21 | info.write(chunk) 22 | try: 23 | block_blob_service.create_blob_from_path(oss.container, f.name, file_path) 24 | success.append("%s Succeeded:https://kuailehua.blob.core.chinacloudapi.cn/kuailehua/%s" % (f.name, f.name)) 25 | except Exception as e: 26 | fail.append("%s Failed:%s" % (f.name, str(e))) 27 | fail.extend(success) 28 | return fail 29 | -------------------------------------------------------------------------------- /apps/workflow/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/apps/workflow/views/__init__.py -------------------------------------------------------------------------------- /docs/celery_beat.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=WD OneOps Project Celery Beat 3 | After=celery_beat.service 4 | 5 | [Service] 6 | Type=forking 7 | User=root 8 | Group=root 9 | ExecStart=/opt/wdoneops/apps/startup.sh celery_beat 10 | ExecReload= 11 | ExecStop=/opt/wdoneops/apps/shutdown.sh celery_beat 12 | PrivateTmp=true 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | -------------------------------------------------------------------------------- /docs/celery_worker.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=WD OneOps Project Celery Worker 3 | After=celery_worker.service 4 | 5 | [Service] 6 | Type=forking 7 | User=root 8 | Group=root 9 | ExecStart=/opt/wdoneops/apps/startup.sh celery_worker 10 | ExecReload= 11 | ExecStop=/opt/wdoneops/apps/shutdown.sh celery_worker 12 | PrivateTmp=true 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | -------------------------------------------------------------------------------- /docs/help.txt: -------------------------------------------------------------------------------- 1 | 2 | # 高危命令 3 | insert into ssh_perilous_cmd(cmd_regex,cmd_type,comment,creation_date) values 4 | ('ls(?!\\w)', 'white', '', NOW()), 5 | ('ll(?!\\w)', 'white', '', NOW()), 6 | ('cd(?!\\w)', 'white', '', NOW()), 7 | ('date', 'white', '查看系统时间', NOW()), 8 | ('pwd', 'white', '', NOW()), 9 | ('mkdir(?!\\w)', 'white', '', NOW()), 10 | ('touch(?!\\w)', 'white', '', NOW()), 11 | ('echo(?!\\w)', 'white', '', NOW()), 12 | 13 | ('\\S*shutdown(?!\\w)', 'black', '', NOW()), 14 | ('\\S*reboot(?!\\w)', 'black', '', NOW()), 15 | ('\\S*poweroff(?!\\w)', 'black', '', NOW()), 16 | ('\\S*halt(?!\\w)', 'black', '', NOW()) 17 | ; 18 | 19 | # 接口白名单 20 | insert into common_rpc_ip_white(url_name,ip_list,comment,applicant) values 21 | ('api-app-list', '*', '', ''), 22 | ('api-app-detail', '*', '', ''), 23 | ('api-app-port-detail', '*', '', ''), 24 | ('api-app-git-detail', '*', '', ''); 25 | -------------------------------------------------------------------------------- /docs/images/cmdb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/docs/images/cmdb.png -------------------------------------------------------------------------------- /docs/images/dns.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/docs/images/dns.jpg -------------------------------------------------------------------------------- /docs/images/job.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/docs/images/job.png -------------------------------------------------------------------------------- /docs/images/workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kkrepos/oneops/64a9c7fd949b6220234a276614ab6555dc8cc17c/docs/images/workflow.png -------------------------------------------------------------------------------- /docs/wdoneops.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=WD OneOps project 3 | After=wdoneops.service 4 | 5 | [Service] 6 | Type=forking 7 | User=root 8 | Group=root 9 | ExecStart=/opt/wdoneops/apps/startup.sh wdoneops 10 | ExecReload= 11 | ExecStop=/opt/wdoneops/apps/shutdown.sh wdoneops 12 | PrivateTmp=true 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | 17 | -------------------------------------------------------------------------------- /docs/wdoneops_all.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=WD OneOps project ALL 3 | After=wdoneops_all.service 4 | 5 | [Service] 6 | Type=forking 7 | User=root 8 | Group=root 9 | ExecStart=/opt/wdoneops/apps/startup.sh all 10 | ExecReload= 11 | ExecStop=/opt/wdoneops/apps/shutdown.sh all 12 | PrivateTmp=true 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | 17 | -------------------------------------------------------------------------------- /requirement/yum.txt: -------------------------------------------------------------------------------- 1 | # yum install -y openldap-devel python36-devel 2 | --------------------------------------------------------------------------------