sunspot_solr 2.2.2 → 2.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/sunspot-solr +2 -6
- data/lib/sunspot/solr/server.rb +2 -3
- data/solr/README.txt +181 -181
- data/solr/bin/post +29 -19
- data/solr/bin/solr +247 -428
- data/solr/bin/solr.cmd +102 -256
- data/solr/bin/solr.in.cmd +15 -7
- data/solr/bin/solr.in.sh +26 -12
- data/solr/server/README.txt +110 -113
- data/solr/server/contexts/solr-jetty-context.xml +8 -8
- data/solr/server/etc/jetty-http.xml +47 -0
- data/solr/server/etc/jetty-https-ssl.xml +175 -159
- data/solr/server/etc/jetty-https.xml +53 -0
- data/solr/server/etc/jetty-ssl.xml +46 -0
- data/solr/server/etc/jetty.xml +189 -167
- data/solr/server/etc/webdefault.xml +527 -527
- data/solr/server/lib/javax.servlet-api-3.1.0.jar +0 -0
- data/solr/server/lib/jetty-continuation-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-deploy-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-http-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-io-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-jmx-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-rewrite-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-security-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-server-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-servlet-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-servlets-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-util-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-webapp-9.2.11.v20150529.jar +0 -0
- data/solr/server/lib/jetty-xml-9.2.11.v20150529.jar +0 -0
- data/solr/server/modules/http.mod +9 -0
- data/solr/server/modules/https.mod +9 -0
- data/solr/server/modules/server.mod +11 -0
- data/solr/server/modules/ssl.mod +9 -0
- data/solr/server/resources/jetty-logging.properties +1 -0
- data/solr/server/resources/log4j.properties +24 -24
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/commons-exec-1.3.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{hadoop-annotations-2.3.0.jar → hadoop-annotations-2.6.0.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-2.6.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-2.6.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-2.6.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/htrace-core-3.0.4.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.4.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.4.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.4.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/jackson-core-2.5.4.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/jackson-dataformat-smile-2.5.4.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-analyzers-common-5.0.0.jar → lucene-analyzers-common-5.3.1.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-analyzers-kuromoji-5.0.0.jar → lucene-analyzers-kuromoji-5.3.1.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-analyzers-phonetic-5.0.0.jar → lucene-analyzers-phonetic-5.3.1.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-expressions-5.0.0.jar → lucene-expressions-5.3.1.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-grouping-5.0.0.jar → lucene-grouping-5.3.1.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-queryparser-5.0.0.jar → lucene-queryparser-5.3.1.jar} +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-sandbox-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.3.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.3.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-core-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-5.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/t-digest-3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/web.xml +169 -181
- data/solr/server/solr-webapp/webapp/WEB-INF/weblogic.xml +28 -28
- data/solr/server/solr-webapp/webapp/admin.html +164 -163
- data/solr/server/solr-webapp/webapp/css/angular/analysis.css +304 -0
- data/solr/server/solr-webapp/webapp/css/angular/chosen.css +465 -0
- data/solr/server/solr-webapp/webapp/css/angular/cloud.css +398 -0
- data/solr/server/solr-webapp/webapp/css/angular/common.css +724 -0
- data/solr/server/solr-webapp/webapp/css/angular/cores.css +233 -0
- data/solr/server/solr-webapp/webapp/css/angular/dataimport.css +370 -0
- data/solr/server/solr-webapp/webapp/css/angular/documents.css +179 -0
- data/solr/server/solr-webapp/webapp/css/angular/files.css +53 -0
- data/solr/server/solr-webapp/webapp/css/angular/index.css +206 -0
- data/solr/server/solr-webapp/webapp/css/angular/logging.css +376 -0
- data/solr/server/solr-webapp/webapp/css/angular/menu.css +321 -0
- data/solr/server/solr-webapp/webapp/css/angular/plugins.css +212 -0
- data/solr/server/solr-webapp/webapp/css/angular/query.css +162 -0
- data/solr/server/solr-webapp/webapp/css/angular/replication.css +500 -0
- data/solr/server/solr-webapp/webapp/css/angular/schema-browser.css +567 -0
- data/solr/server/solr-webapp/webapp/css/angular/segments.css +173 -0
- data/solr/server/solr-webapp/webapp/css/angular/threads.css +161 -0
- data/solr/server/solr-webapp/webapp/css/chosen.css +421 -421
- data/solr/server/solr-webapp/webapp/css/styles/analysis.css +311 -311
- data/solr/server/solr-webapp/webapp/css/styles/cloud.css +410 -410
- data/solr/server/solr-webapp/webapp/css/styles/common.css +701 -701
- data/solr/server/solr-webapp/webapp/css/styles/cores.css +244 -244
- data/solr/server/solr-webapp/webapp/css/styles/dashboard.css +155 -155
- data/solr/server/solr-webapp/webapp/css/styles/dataimport.css +403 -403
- data/solr/server/solr-webapp/webapp/css/styles/documents.css +197 -197
- data/solr/server/solr-webapp/webapp/css/styles/files.css +54 -54
- data/solr/server/solr-webapp/webapp/css/styles/index.css +207 -207
- data/solr/server/solr-webapp/webapp/css/styles/java-properties.css +52 -52
- data/solr/server/solr-webapp/webapp/css/styles/logging.css +391 -391
- data/solr/server/solr-webapp/webapp/css/styles/menu.css +329 -328
- data/solr/server/solr-webapp/webapp/css/styles/plugins.css +195 -195
- data/solr/server/solr-webapp/webapp/css/styles/query.css +173 -173
- data/solr/server/solr-webapp/webapp/css/styles/replication.css +515 -515
- data/solr/server/solr-webapp/webapp/css/styles/schema-browser.css +578 -578
- data/solr/server/solr-webapp/webapp/css/styles/segments.css +145 -0
- data/solr/server/solr-webapp/webapp/css/styles/threads.css +172 -172
- data/solr/server/solr-webapp/webapp/img/chosen-sprite-2x.png +0 -0
- data/solr/server/solr-webapp/webapp/img/filetypes/README +27 -27
- data/solr/server/solr-webapp/webapp/img/solr.svg +39 -39
- data/solr/server/solr-webapp/webapp/index.html +208 -0
- data/solr/server/solr-webapp/webapp/js/angular/app.js +713 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/analysis.js +199 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/cloud.js +528 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/core-overview.js +225 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/cores.js +465 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/dataimport.js +284 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/documents.js +139 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/files.js +92 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/index.js +95 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/java-properties.js +45 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/logging.js +146 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/plugins.js +166 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/query.js +99 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/replication.js +227 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/schema-browser.js +432 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/segments.js +94 -0
- data/solr/server/solr-webapp/webapp/js/angular/controllers/threads.js +51 -0
- data/solr/server/solr-webapp/webapp/js/angular/services.js +214 -0
- data/solr/server/solr-webapp/webapp/js/lib/ZeroClipboard.js +342 -342
- data/solr/server/solr-webapp/webapp/js/lib/chosen.js +982 -982
- data/solr/server/solr-webapp/webapp/js/lib/console.js +29 -29
- data/solr/server/solr-webapp/webapp/js/lib/d3.js +9373 -9373
- data/solr/server/solr-webapp/webapp/js/lib/highlight.js +31 -31
- data/solr/server/solr-webapp/webapp/js/lib/jquery-1.7.2.min.js +30 -30
- data/solr/server/solr-webapp/webapp/js/lib/jquery.ajaxfileupload.js +184 -184
- data/solr/server/solr-webapp/webapp/js/lib/jquery.blockUI.js +523 -523
- data/solr/server/solr-webapp/webapp/js/lib/jquery.cookie.js +71 -71
- data/solr/server/solr-webapp/webapp/js/lib/jquery.form.js +806 -806
- data/solr/server/solr-webapp/webapp/js/lib/jquery.jstree.js +3534 -3534
- data/solr/server/solr-webapp/webapp/js/lib/jquery.sammy.js +1863 -1863
- data/solr/server/solr-webapp/webapp/js/lib/jquery.timeago.js +189 -189
- data/solr/server/solr-webapp/webapp/js/lib/linker.js +48 -48
- data/solr/server/solr-webapp/webapp/js/lib/naturalSort.js +82 -0
- data/solr/server/solr-webapp/webapp/js/lib/order.js +216 -216
- data/solr/server/solr-webapp/webapp/js/main.js +60 -58
- data/solr/server/solr-webapp/webapp/js/require.js +11349 -11349
- data/solr/server/solr-webapp/webapp/js/scripts/analysis.js +545 -545
- data/solr/server/solr-webapp/webapp/js/scripts/app.js +680 -679
- data/solr/server/solr-webapp/webapp/js/scripts/cloud.js +877 -877
- data/solr/server/solr-webapp/webapp/js/scripts/cores.js +719 -719
- data/solr/server/solr-webapp/webapp/js/scripts/dashboard.js +562 -562
- data/solr/server/solr-webapp/webapp/js/scripts/dataimport.js +812 -812
- data/solr/server/solr-webapp/webapp/js/scripts/documents.js +370 -370
- data/solr/server/solr-webapp/webapp/js/scripts/files.js +265 -265
- data/solr/server/solr-webapp/webapp/js/scripts/index.js +340 -340
- data/solr/server/solr-webapp/webapp/js/scripts/java-properties.js +106 -106
- data/solr/server/solr-webapp/webapp/js/scripts/logging.js +578 -576
- data/solr/server/solr-webapp/webapp/js/scripts/ping.js +72 -72
- data/solr/server/solr-webapp/webapp/js/scripts/plugins.js +462 -462
- data/solr/server/solr-webapp/webapp/js/scripts/query.js +229 -229
- data/solr/server/solr-webapp/webapp/js/scripts/replication.js +527 -527
- data/solr/server/solr-webapp/webapp/js/scripts/schema-browser.js +1229 -1229
- data/solr/server/solr-webapp/webapp/js/scripts/segments.js +206 -0
- data/solr/server/solr-webapp/webapp/js/scripts/threads.js +158 -158
- data/solr/server/solr-webapp/webapp/libs/angular-chosen.js +139 -0
- data/solr/server/solr-webapp/webapp/libs/angular-cookies.js +229 -0
- data/solr/server/solr-webapp/webapp/libs/angular-cookies.min.js +31 -0
- data/solr/server/solr-webapp/webapp/libs/angular-resource.min.js +36 -0
- data/solr/server/solr-webapp/webapp/libs/angular-route.js +1018 -0
- data/solr/server/solr-webapp/webapp/libs/angular-route.min.js +38 -0
- data/solr/server/solr-webapp/webapp/libs/angular-sanitize.js +703 -0
- data/solr/server/solr-webapp/webapp/libs/angular-sanitize.min.js +39 -0
- data/solr/server/solr-webapp/webapp/libs/angular.js +26093 -0
- data/solr/server/solr-webapp/webapp/libs/angular.min.js +273 -0
- data/solr/server/solr-webapp/webapp/libs/chosen.jquery.js +1194 -0
- data/solr/server/solr-webapp/webapp/libs/chosen.jquery.min.js +30 -0
- data/solr/server/solr-webapp/webapp/libs/d3.js +9373 -0
- data/solr/server/solr-webapp/webapp/libs/highlight.js +31 -0
- data/solr/server/solr-webapp/webapp/libs/jquery-2.1.3.min.js +29 -0
- data/solr/server/solr-webapp/webapp/libs/jquery.jstree.js +3534 -0
- data/solr/server/solr-webapp/webapp/libs/ngtimeago.js +102 -0
- data/solr/server/solr-webapp/webapp/partials/analysis.html +128 -0
- data/solr/server/solr-webapp/webapp/partials/cloud.html +104 -0
- data/solr/server/solr-webapp/webapp/partials/core_overview.html +227 -0
- data/solr/server/solr-webapp/webapp/partials/cores.html +231 -0
- data/solr/server/solr-webapp/webapp/partials/dataimport.html +209 -0
- data/solr/server/solr-webapp/webapp/partials/documents.html +118 -0
- data/solr/server/solr-webapp/webapp/partials/files.html +47 -0
- data/solr/server/solr-webapp/webapp/partials/index.html +261 -0
- data/solr/server/solr-webapp/webapp/partials/java-properties.html +27 -0
- data/solr/server/solr-webapp/webapp/partials/logging-levels.html +56 -0
- data/solr/server/solr-webapp/webapp/partials/logging.html +56 -0
- data/solr/server/solr-webapp/webapp/partials/plugins.html +72 -0
- data/solr/server/solr-webapp/webapp/partials/query.html +356 -0
- data/solr/server/solr-webapp/webapp/partials/replication.html +239 -0
- data/solr/server/solr-webapp/webapp/partials/schema-browser.html +206 -0
- data/solr/server/solr-webapp/webapp/partials/segments.html +99 -0
- data/solr/server/solr-webapp/webapp/partials/threads.html +65 -0
- data/solr/server/solr-webapp/webapp/tpl/analysis.html +83 -83
- data/solr/server/solr-webapp/webapp/tpl/cloud.html +87 -87
- data/solr/server/solr-webapp/webapp/tpl/cores.html +226 -226
- data/solr/server/solr-webapp/webapp/tpl/dashboard.html +201 -201
- data/solr/server/solr-webapp/webapp/tpl/dataimport.html +183 -183
- data/solr/server/solr-webapp/webapp/tpl/documents.html +107 -107
- data/solr/server/solr-webapp/webapp/tpl/files.html +44 -44
- data/solr/server/solr-webapp/webapp/tpl/index.html +250 -250
- data/solr/server/solr-webapp/webapp/tpl/logging.html +23 -23
- data/solr/server/solr-webapp/webapp/tpl/plugins.html +39 -39
- data/solr/server/solr-webapp/webapp/tpl/query.html +361 -361
- data/solr/server/solr-webapp/webapp/tpl/replication.html +216 -216
- data/solr/server/solr-webapp/webapp/tpl/schema-browser.html +192 -192
- data/solr/server/solr-webapp/webapp/tpl/segments.html +49 -0
- data/solr/server/solr-webapp/webapp/tpl/threads.html +56 -56
- data/solr/server/solr/README.txt +77 -77
- data/solr/server/solr/solr.xml +51 -51
- data/solr/server/solr/zoo.cfg +17 -17
- data/solr/server/start.jar +0 -0
- data/spec/server_spec.rb +3 -8
- metadata +132 -43
- data/solr/server/lib/jetty-continuation-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-deploy-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-http-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-io-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-jmx-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-security-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-server-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-servlet-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-util-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-webapp-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/jetty-xml-8.1.10.v20130312.jar +0 -0
- data/solr/server/lib/servlet-api-3.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/.gitignore +0 -1
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-2.3.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-2.3.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-2.3.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.3.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.3.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.1.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.1.1.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-core-5.0.0.jar +0 -0
- data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-5.0.0.jar +0 -0
- data/solr/server/webapps/solr.war +0 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
/*
|
2
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
+
contributor license agreements. See the NOTICE file distributed with
|
4
|
+
this work for additional information regarding copyright ownership.
|
5
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
+
(the "License"); you may not use this file except in compliance with
|
7
|
+
the License. You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
var MB_FACTOR = 1024*1024;
|
19
|
+
|
20
|
+
solrAdminApp.controller('SegmentsController', function($scope, $routeParams, $interval, Segments) {
|
21
|
+
$scope.resetMenu("segments");
|
22
|
+
|
23
|
+
$scope.refresh = function() {
|
24
|
+
|
25
|
+
Segments.get({core: $routeParams.core}, function(data) {
|
26
|
+
var segments = data.segments;
|
27
|
+
|
28
|
+
var segmentSizeInBytesMax = getLargestSegmentSize(segments);
|
29
|
+
$scope.segmentMB = Math.floor(segmentSizeInBytesMax / MB_FACTOR);
|
30
|
+
$scope.xaxis = calculateXAxis(segmentSizeInBytesMax);
|
31
|
+
|
32
|
+
$scope.documentCount = 0;
|
33
|
+
$scope.deletionCount = 0;
|
34
|
+
|
35
|
+
$scope.segments = [];
|
36
|
+
for (var name in segments) {
|
37
|
+
var segment = segments[name];
|
38
|
+
|
39
|
+
var segmentSizeInBytesLog = Math.log(segment.sizeInBytes);
|
40
|
+
var segmentSizeInBytesMaxLog = Math.log(segmentSizeInBytesMax);
|
41
|
+
|
42
|
+
segment.totalSize = Math.floor((segmentSizeInBytesLog / segmentSizeInBytesMaxLog ) * 100);
|
43
|
+
|
44
|
+
segment.deletedDocSize = Math.floor((segment.delCount / (segment.delCount + segment.totalSize)) * segment.totalSize);
|
45
|
+
if (segment.delDocSize <= 0.001) delete segment.deletedDocSize;
|
46
|
+
|
47
|
+
segment.aliveDocSize = segment.totalSize - segment.deletedDocSize;
|
48
|
+
|
49
|
+
$scope.segments.push(segment);
|
50
|
+
|
51
|
+
$scope.documentCount += segment.size;
|
52
|
+
$scope.deletionCount += segment.delCount;
|
53
|
+
}
|
54
|
+
$scope.deletionsPercentage = calculateDeletionsPercentage($scope.documentCount, $scope.deletionCount);
|
55
|
+
});
|
56
|
+
};
|
57
|
+
|
58
|
+
$scope.toggleAutoRefresh = function() {
|
59
|
+
$scope.autorefresh = !$scope.autorefresh;
|
60
|
+
if ($scope.autorefresh) {
|
61
|
+
$scope.interval = $interval($scope.refresh, 1000);
|
62
|
+
} else if ($scope.interval) {
|
63
|
+
$interval.cancel($scope.interval);
|
64
|
+
}
|
65
|
+
};
|
66
|
+
$scope.refresh();
|
67
|
+
});
|
68
|
+
|
69
|
+
var calculateXAxis = function(segmentInBytesMax) {
|
70
|
+
var steps = [];
|
71
|
+
var log = Math.log(segmentInBytesMax);
|
72
|
+
|
73
|
+
for (var j=0, step=log/4; j<3; j++, step+=log/4) {
|
74
|
+
steps.push({pos:j, value:Math.floor((Math.pow(Math.E, step))/MB_FACTOR)})
|
75
|
+
}
|
76
|
+
return steps;
|
77
|
+
};
|
78
|
+
|
79
|
+
var getLargestSegmentSize = function(segments) {
|
80
|
+
var max = 0;
|
81
|
+
for (var name in segments) {
|
82
|
+
max = Math.max(max, segments[name].sizeInBytes);
|
83
|
+
}
|
84
|
+
return max;
|
85
|
+
};
|
86
|
+
|
87
|
+
var calculateDeletionsPercentage = function(docCount, delCount) {
|
88
|
+
if (docCount == 0) {
|
89
|
+
return 0;
|
90
|
+
} else {
|
91
|
+
var percent = delCount / docCount * 100;
|
92
|
+
return Math.round(percent * 100) / 100;
|
93
|
+
}
|
94
|
+
};
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/*
|
2
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
+
contributor license agreements. See the NOTICE file distributed with
|
4
|
+
this work for additional information regarding copyright ownership.
|
5
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
+
(the "License"); you may not use this file except in compliance with
|
7
|
+
the License. You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
solrAdminApp.controller('ThreadsController',
|
19
|
+
["$scope", "Threads",
|
20
|
+
function($scope, Threads){
|
21
|
+
$scope.resetMenu("threads", true);
|
22
|
+
$scope.refresh = function() {
|
23
|
+
Threads.get(function(data) {
|
24
|
+
var threadDump = data.system.threadDump;
|
25
|
+
var threads = [];
|
26
|
+
for (var i=1; i<threadDump.length; i+=2) {
|
27
|
+
var thread = threadDump[i];
|
28
|
+
if (!!thread.stackTrace) {
|
29
|
+
var stackTrace = [];
|
30
|
+
for (var j=0; j<thread.stackTrace.length; j++) {
|
31
|
+
var trace = thread.stackTrace[j].replace("(", "\u200B("); // allow wrapping to happen, \u200B is a zero-width space
|
32
|
+
stackTrace.push({id:thread.id + ":" + j, trace: trace});
|
33
|
+
}
|
34
|
+
thread.stackTrace = stackTrace;
|
35
|
+
}
|
36
|
+
threads.push(thread);
|
37
|
+
}
|
38
|
+
$scope.threads = threads;
|
39
|
+
});
|
40
|
+
};
|
41
|
+
$scope.toggleStacktrace = function(thread) {
|
42
|
+
thread.showStackTrace = !thread.showStackTrace;
|
43
|
+
};
|
44
|
+
$scope.toggleStacktraces = function() {
|
45
|
+
$scope.showAllStacktraces = !$scope.showAllStacktraces;
|
46
|
+
for (var i=0; i<$scope.threads.length; i++) {
|
47
|
+
$scope.threads[i].showStackTrace = $scope.showAllStacktraces;
|
48
|
+
}
|
49
|
+
};
|
50
|
+
$scope.refresh();
|
51
|
+
}]);
|
@@ -0,0 +1,214 @@
|
|
1
|
+
/*
|
2
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
+
contributor license agreements. See the NOTICE file distributed with
|
4
|
+
this work for additional information regarding copyright ownership.
|
5
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
+
(the "License"); you may not use this file except in compliance with
|
7
|
+
the License. You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
var solrAdminServices = angular.module('solrAdminServices', ['ngResource']);
|
19
|
+
|
20
|
+
solrAdminServices.factory('System',
|
21
|
+
['$resource', function($resource) {
|
22
|
+
return $resource('/solr/admin/info/system', {"wt":"json", "_":Date.now()});
|
23
|
+
}])
|
24
|
+
.factory('Cores',
|
25
|
+
['$resource', function($resource) {
|
26
|
+
return $resource('/solr/admin/cores',
|
27
|
+
{'wt':'json', '_':Date.now()}, {
|
28
|
+
"query": {},
|
29
|
+
"list": {params:{indexInfo: false}},
|
30
|
+
"add": {params:{action: "CREATE"}},
|
31
|
+
"unload": {params:{action: "UNLOAD", core: "@core"}},
|
32
|
+
"rename": {params:{action: "RENAME"}},
|
33
|
+
"swap": {params:{}},
|
34
|
+
"reload": {method: "GET", params:{action:"RELOAD", core: "@core"}},
|
35
|
+
"optimize": {params:{}}
|
36
|
+
});
|
37
|
+
}])
|
38
|
+
.factory('Logging',
|
39
|
+
['$resource', function($resource) {
|
40
|
+
return $resource('/solr/admin/info/logging', {'wt':'json', '_':Date.now()}, {
|
41
|
+
"events": {params: {since:'0'}},
|
42
|
+
"levels": {},
|
43
|
+
"setLevel": {}
|
44
|
+
});
|
45
|
+
}])
|
46
|
+
.factory('Zookeeper',
|
47
|
+
['$resource', function($resource) {
|
48
|
+
return $resource('/solr/zookeeper', {wt:'json', _:Date.now()}, {
|
49
|
+
"simple": {},
|
50
|
+
"dump": {params: {dump: "true"}},
|
51
|
+
"liveNodes": {params: {path: '/live_nodes'}},
|
52
|
+
"clusterState": {params: {detail: "true", path: "/clusterstate.json"}},
|
53
|
+
"detail": {params: {detail: "true", path: "@path"}}
|
54
|
+
});
|
55
|
+
}])
|
56
|
+
.factory('Properties',
|
57
|
+
['$resource', function($resource) {
|
58
|
+
return $resource('/solr/admin/info/properties', {'wt':'json', '_':Date.now()});
|
59
|
+
}])
|
60
|
+
.factory('Threads',
|
61
|
+
['$resource', function($resource) {
|
62
|
+
return $resource('/solr/admin/info/threads', {'wt':'json', '_':Date.now()});
|
63
|
+
}])
|
64
|
+
.factory('Properties',
|
65
|
+
['$resource', function($resource) {
|
66
|
+
return $resource('/solr/admin/info/properties', {'wt':'json', '_':Date.now()});
|
67
|
+
}])
|
68
|
+
.factory('Replication',
|
69
|
+
['$resource', function($resource) {
|
70
|
+
return $resource('/solr/:core/replication', {'wt':'json', core: "@core", '_':Date.now()}, {
|
71
|
+
"details": {params: {command: "details"}},
|
72
|
+
"command": {params: {}}
|
73
|
+
});
|
74
|
+
}])
|
75
|
+
.factory('CoreSystem',
|
76
|
+
['$resource', function($resource) {
|
77
|
+
return $resource('/solr/:core/admin/system', {wt:'json', core: "@core", _:Date.now()});
|
78
|
+
}])
|
79
|
+
.factory('Update',
|
80
|
+
['$resource', function($resource) {
|
81
|
+
return $resource('/solr/:core/:handler', {core: '@core', wt:'json', _:Date.now(), handler:'update'}, {
|
82
|
+
"optimize": {params: { optimize: "true"}},
|
83
|
+
"commit": {params: {commit: "true"}},
|
84
|
+
"post": {headers: {'Content-type': 'application/json'}, method: "POST", params: {handler: '@handler'}},
|
85
|
+
"postJson": {headers: {'Content-type': 'application/json'}, method: "POST", params: {handler: '@handler'}},
|
86
|
+
"postXml": {headers: {'Content-type': 'text/xml'}, method: "POST", params: {handler: '@handler'}},
|
87
|
+
"postCsv": {headers: {'Content-type': 'application/csv'}, method: "POST", params: {handler: '@handler'}}
|
88
|
+
});
|
89
|
+
}])
|
90
|
+
.service('FileUpload', function ($http) {
|
91
|
+
this.upload = function(params, file, success, error){
|
92
|
+
var url = "/solr/" + params.core + "/" + params.handler + "?";
|
93
|
+
raw = params.raw;
|
94
|
+
delete params.core;
|
95
|
+
delete params.handler;
|
96
|
+
delete params.raw;
|
97
|
+
url += $.param(params);
|
98
|
+
if (raw && raw.length>0) {
|
99
|
+
if (raw[0] != "&") raw = "&" + raw;
|
100
|
+
url += raw;
|
101
|
+
}
|
102
|
+
var fd = new FormData();
|
103
|
+
fd.append('file', file);
|
104
|
+
$http.post(url, fd, {
|
105
|
+
transformRequest: angular.identity,
|
106
|
+
headers: {'Content-Type': undefined}
|
107
|
+
}).success(success).error(error);
|
108
|
+
}
|
109
|
+
})
|
110
|
+
.factory('Luke',
|
111
|
+
['$resource', function($resource) {
|
112
|
+
return $resource('/solr/:core/admin/luke', {core: '@core', wt:'json', _:Date.now()}, {
|
113
|
+
"index": {params: {numTerms: 0}},
|
114
|
+
"schema": {params: {show:'schema'}},
|
115
|
+
"field": {},
|
116
|
+
"fields": {params: {show:'schema'}, interceptor: {
|
117
|
+
response: function(response) {
|
118
|
+
var fieldsAndTypes = [];
|
119
|
+
for (var field in response.data.schema.fields) {
|
120
|
+
fieldsAndTypes.push({group: "Fields", label: field, value: "fieldname=" + field});
|
121
|
+
}
|
122
|
+
for (var type in response.data.schema.types) {
|
123
|
+
fieldsAndTypes.push({group: "Types", label: type, value: "fieldtype=" + type});
|
124
|
+
}
|
125
|
+
return fieldsAndTypes;
|
126
|
+
}
|
127
|
+
}}
|
128
|
+
});
|
129
|
+
}])
|
130
|
+
.factory('Analysis',
|
131
|
+
['$resource', function($resource) {
|
132
|
+
return $resource('/solr/:core/analysis/field', {core: '@core', wt:'json', _:Date.now()}, {
|
133
|
+
"field": {params: {"analysis.showmatch": true}}
|
134
|
+
});
|
135
|
+
}])
|
136
|
+
.factory('DataImport',
|
137
|
+
['$resource', function($resource) {
|
138
|
+
return $resource('/solr/:core/dataimport', {core: '@core', indent:'on', wt:'json', _:Date.now()}, {
|
139
|
+
"config": {params: {command: "show-config", doNotIntercept: "true"},
|
140
|
+
transformResponse: function(data) {
|
141
|
+
return {config: data};
|
142
|
+
}
|
143
|
+
},
|
144
|
+
"status": {params: {command: "status", doNotIntercept: "true"}},
|
145
|
+
"reload": {params: {command: "reload-config"}},
|
146
|
+
"post": {method: "POST",
|
147
|
+
headers: {'Content-type': 'application/x-www-form-urlencoded'},
|
148
|
+
transformRequest: function(data) { return $.param(data) }}
|
149
|
+
});
|
150
|
+
}])
|
151
|
+
.factory('Ping',
|
152
|
+
['$resource', function($resource) {
|
153
|
+
return $resource('/solr/:core/admin/ping', {wt:'json', core: '@core', ts:Date.now(), _:Date.now()}, {
|
154
|
+
"ping": {},
|
155
|
+
"status": {params:{action:"status"}}
|
156
|
+
});
|
157
|
+
}])
|
158
|
+
.factory('Mbeans',
|
159
|
+
['$resource', function($resource) {
|
160
|
+
return $resource('/solr/:core/admin/mbeans', {'wt':'json', core: '@core', '_':Date.now()}, {
|
161
|
+
stats: {params: {stats: true}},
|
162
|
+
info: {},
|
163
|
+
reference: {
|
164
|
+
params: {wt: "xml", stats: true}, transformResponse: function (data) {
|
165
|
+
return {reference: data}
|
166
|
+
}
|
167
|
+
},
|
168
|
+
delta: {method: "POST",
|
169
|
+
params: {stats: true, diff:true},
|
170
|
+
headers: {'Content-type': 'application/x-www-form-urlencoded'},
|
171
|
+
transformRequest: function(data) {
|
172
|
+
return "stream.body=" + encodeURIComponent(data);
|
173
|
+
}
|
174
|
+
}
|
175
|
+
});
|
176
|
+
}])
|
177
|
+
.factory('Files',
|
178
|
+
['$resource', function($resource) {
|
179
|
+
return $resource('/solr/:core/admin/file', {'wt':'json', core: '@core', '_':Date.now()}, {
|
180
|
+
"list": {},
|
181
|
+
"get": {method: "GET", interceptor: {
|
182
|
+
response: function(config) {return config;}
|
183
|
+
}}
|
184
|
+
});
|
185
|
+
}])
|
186
|
+
.factory('Query',
|
187
|
+
['$resource', function($resource) {
|
188
|
+
var resource = $resource('/solr/:core:handler', {core: '@core', handler: '@handler'}, {
|
189
|
+
"query": {
|
190
|
+
method: "GET", transformResponse: function (data) {
|
191
|
+
return {data: data}
|
192
|
+
}
|
193
|
+
}
|
194
|
+
});
|
195
|
+
resource.url = function(params) {
|
196
|
+
var qs = [];
|
197
|
+
for (key in params) {
|
198
|
+
if (key != "core" && key != "handler" && key != "doNotIntercept") {
|
199
|
+
for (var i in params[key]) {
|
200
|
+
qs.push(key + "=" + params[key][i]);
|
201
|
+
}
|
202
|
+
}
|
203
|
+
}
|
204
|
+
return "/solr/" + params.core + params.handler + "?" + qs.join("&");
|
205
|
+
}
|
206
|
+
return resource;
|
207
|
+
}])
|
208
|
+
.factory('Segments',
|
209
|
+
['$resource', function($resource) {
|
210
|
+
return $resource('/solr/:core/admin/segments', {'wt':'json', core: '@core', _:Date.now()}, {
|
211
|
+
get: {}
|
212
|
+
});
|
213
|
+
}
|
214
|
+
]);
|
@@ -1,342 +1,342 @@
|
|
1
|
-
/*
|
2
|
-
|
3
|
-
The MIT License (MIT)
|
4
|
-
Copyright (c) 2012 Jon Rohan, James M. Greene,
|
5
|
-
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
8
|
-
in the Software without restriction, including without limitation the rights
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
11
|
-
furnished to do so, subject to the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be included in
|
14
|
-
all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
THE SOFTWARE.
|
23
|
-
|
24
|
-
*/
|
25
|
-
|
26
|
-
// Simple Set Clipboard System
|
27
|
-
// Author: Joseph Huckaby
|
28
|
-
|
29
|
-
var ZeroClipboard = {
|
30
|
-
|
31
|
-
version: "1.0.7",
|
32
|
-
clients: {}, // registered upload clients on page, indexed by id
|
33
|
-
moviePath: 'ZeroClipboard.swf', // URL to movie
|
34
|
-
nextId: 1, // ID of next movie
|
35
|
-
|
36
|
-
$: function(thingy) {
|
37
|
-
// simple DOM lookup utility function
|
38
|
-
if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
|
39
|
-
if (!thingy.addClass) {
|
40
|
-
// extend element with a few useful methods
|
41
|
-
thingy.hide = function() { this.style.display = 'none'; };
|
42
|
-
thingy.show = function() { this.style.display = ''; };
|
43
|
-
thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
|
44
|
-
thingy.removeClass = function(name) {
|
45
|
-
var classes = this.className.split(/\s+/);
|
46
|
-
var idx = -1;
|
47
|
-
for (var k = 0; k < classes.length; k++) {
|
48
|
-
if (classes[k] == name) { idx = k; k = classes.length; }
|
49
|
-
}
|
50
|
-
if (idx > -1) {
|
51
|
-
classes.splice( idx, 1 );
|
52
|
-
this.className = classes.join(' ');
|
53
|
-
}
|
54
|
-
return this;
|
55
|
-
};
|
56
|
-
thingy.hasClass = function(name) {
|
57
|
-
return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
|
58
|
-
};
|
59
|
-
}
|
60
|
-
return thingy;
|
61
|
-
},
|
62
|
-
|
63
|
-
setMoviePath: function(path) {
|
64
|
-
// set path to ZeroClipboard.swf
|
65
|
-
this.moviePath = path;
|
66
|
-
},
|
67
|
-
|
68
|
-
dispatch: function(id, eventName, args) {
|
69
|
-
// receive event from flash movie, send to client
|
70
|
-
var client = this.clients[id];
|
71
|
-
if (client) {
|
72
|
-
client.receiveEvent(eventName, args);
|
73
|
-
}
|
74
|
-
},
|
75
|
-
|
76
|
-
register: function(id, client) {
|
77
|
-
// register new client to receive events
|
78
|
-
this.clients[id] = client;
|
79
|
-
},
|
80
|
-
|
81
|
-
getDOMObjectPosition: function(obj, stopObj) {
|
82
|
-
// get absolute coordinates for dom element
|
83
|
-
var info = {
|
84
|
-
left: 0,
|
85
|
-
top: 0,
|
86
|
-
width: obj.width ? obj.width : obj.offsetWidth,
|
87
|
-
height: obj.height ? obj.height : obj.offsetHeight
|
88
|
-
};
|
89
|
-
|
90
|
-
while (obj && (obj != stopObj)) {
|
91
|
-
info.left += obj.offsetLeft;
|
92
|
-
info.top += obj.offsetTop;
|
93
|
-
obj = obj.offsetParent;
|
94
|
-
}
|
95
|
-
|
96
|
-
return info;
|
97
|
-
},
|
98
|
-
|
99
|
-
Client: function(elem) {
|
100
|
-
// constructor for new simple upload client
|
101
|
-
this.handlers = {};
|
102
|
-
|
103
|
-
// unique ID
|
104
|
-
this.id = ZeroClipboard.nextId++;
|
105
|
-
this.movieId = 'ZeroClipboardMovie_' + this.id;
|
106
|
-
|
107
|
-
// register client with singleton to receive flash events
|
108
|
-
ZeroClipboard.register(this.id, this);
|
109
|
-
|
110
|
-
// create movie
|
111
|
-
if (elem) this.glue(elem);
|
112
|
-
}
|
113
|
-
};
|
114
|
-
|
115
|
-
ZeroClipboard.Client.prototype = {
|
116
|
-
|
117
|
-
id: 0, // unique ID for us
|
118
|
-
ready: false, // whether movie is ready to receive events or not
|
119
|
-
movie: null, // reference to movie object
|
120
|
-
clipText: '', // text to copy to clipboard
|
121
|
-
handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
|
122
|
-
cssEffects: true, // enable CSS mouse effects on dom container
|
123
|
-
handlers: null, // user event handlers
|
124
|
-
|
125
|
-
glue: function(elem, appendElem, stylesToAdd) {
|
126
|
-
// glue to DOM element
|
127
|
-
// elem can be ID or actual DOM element object
|
128
|
-
this.domElement = ZeroClipboard.$(elem);
|
129
|
-
|
130
|
-
// float just above object, or zIndex 99 if dom element isn't set
|
131
|
-
var zIndex = 99;
|
132
|
-
if (this.domElement.style.zIndex) {
|
133
|
-
zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
|
134
|
-
}
|
135
|
-
|
136
|
-
if (typeof(appendElem) == 'string') {
|
137
|
-
appendElem = ZeroClipboard.$(appendElem);
|
138
|
-
}
|
139
|
-
else if (typeof(appendElem) == 'undefined') {
|
140
|
-
appendElem = document.getElementsByTagName('body')[0];
|
141
|
-
}
|
142
|
-
|
143
|
-
// find X/Y position of domElement
|
144
|
-
var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
|
145
|
-
|
146
|
-
// create floating DIV above element
|
147
|
-
this.div = document.createElement('div');
|
148
|
-
var style = this.div.style;
|
149
|
-
style.position = 'absolute';
|
150
|
-
style.left = '' + box.left + 'px';
|
151
|
-
style.top = '' + box.top + 'px';
|
152
|
-
style.width = '' + box.width + 'px';
|
153
|
-
style.height = '' + box.height + 'px';
|
154
|
-
style.zIndex = zIndex;
|
155
|
-
|
156
|
-
style.left = '0px';
|
157
|
-
style.top = '0px';
|
158
|
-
|
159
|
-
if (typeof(stylesToAdd) == 'object') {
|
160
|
-
for (addedStyle in stylesToAdd) {
|
161
|
-
style[addedStyle] = stylesToAdd[addedStyle];
|
162
|
-
}
|
163
|
-
}
|
164
|
-
|
165
|
-
// style.backgroundColor = '#f00'; // debug
|
166
|
-
|
167
|
-
appendElem.appendChild(this.div);
|
168
|
-
|
169
|
-
this.div.innerHTML = this.getHTML( box.width, box.height );
|
170
|
-
},
|
171
|
-
|
172
|
-
getHTML: function(width, height) {
|
173
|
-
// return HTML for movie
|
174
|
-
var html = '';
|
175
|
-
var flashvars = 'id=' + this.id +
|
176
|
-
'&width=' + width +
|
177
|
-
'&height=' + height;
|
178
|
-
|
179
|
-
if (navigator.userAgent.match(/MSIE/)) {
|
180
|
-
// IE gets an OBJECT tag
|
181
|
-
var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
|
182
|
-
html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
|
183
|
-
}
|
184
|
-
else {
|
185
|
-
// all other browsers get an EMBED tag
|
186
|
-
html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
|
187
|
-
}
|
188
|
-
return html;
|
189
|
-
},
|
190
|
-
|
191
|
-
hide: function() {
|
192
|
-
// temporarily hide floater offscreen
|
193
|
-
if (this.div) {
|
194
|
-
this.div.style.left = '-2000px';
|
195
|
-
}
|
196
|
-
},
|
197
|
-
|
198
|
-
show: function() {
|
199
|
-
// show ourselves after a call to hide()
|
200
|
-
this.reposition();
|
201
|
-
},
|
202
|
-
|
203
|
-
destroy: function() {
|
204
|
-
// destroy control and floater
|
205
|
-
if (this.domElement && this.div) {
|
206
|
-
this.hide();
|
207
|
-
this.div.innerHTML = '';
|
208
|
-
|
209
|
-
var body = document.getElementsByTagName('body')[0];
|
210
|
-
try { body.removeChild( this.div ); } catch(e) {;}
|
211
|
-
|
212
|
-
this.domElement = null;
|
213
|
-
this.div = null;
|
214
|
-
}
|
215
|
-
},
|
216
|
-
|
217
|
-
reposition: function(elem) {
|
218
|
-
// reposition our floating div, optionally to new container
|
219
|
-
// warning: container CANNOT change size, only position
|
220
|
-
if (elem) {
|
221
|
-
this.domElement = ZeroClipboard.$(elem);
|
222
|
-
if (!this.domElement) this.hide();
|
223
|
-
}
|
224
|
-
|
225
|
-
console.debug( this.domElement, this.div );
|
226
|
-
|
227
|
-
if (this.domElement && this.div) {
|
228
|
-
var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
|
229
|
-
console.debug( box );
|
230
|
-
var style = this.div.style;
|
231
|
-
style.left = '' + box.left + 'px';
|
232
|
-
style.top = '' + box.top + 'px';
|
233
|
-
}
|
234
|
-
},
|
235
|
-
|
236
|
-
setText: function(newText) {
|
237
|
-
// set text to be copied to clipboard
|
238
|
-
this.clipText = newText;
|
239
|
-
if (this.ready) this.movie.setText(newText);
|
240
|
-
},
|
241
|
-
|
242
|
-
addEventListener: function(eventName, func) {
|
243
|
-
// add user event listener for event
|
244
|
-
// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
|
245
|
-
eventName = eventName.toString().toLowerCase().replace(/^on/, '');
|
246
|
-
if (!this.handlers[eventName]) this.handlers[eventName] = [];
|
247
|
-
this.handlers[eventName].push(func);
|
248
|
-
},
|
249
|
-
|
250
|
-
setHandCursor: function(enabled) {
|
251
|
-
// enable hand cursor (true), or default arrow cursor (false)
|
252
|
-
this.handCursorEnabled = enabled;
|
253
|
-
if (this.ready) this.movie.setHandCursor(enabled);
|
254
|
-
},
|
255
|
-
|
256
|
-
setCSSEffects: function(enabled) {
|
257
|
-
// enable or disable CSS effects on DOM container
|
258
|
-
this.cssEffects = !!enabled;
|
259
|
-
},
|
260
|
-
|
261
|
-
receiveEvent: function(eventName, args) {
|
262
|
-
// receive event from flash
|
263
|
-
eventName = eventName.toString().toLowerCase().replace(/^on/, '');
|
264
|
-
|
265
|
-
// special behavior for certain events
|
266
|
-
switch (eventName) {
|
267
|
-
case 'load':
|
268
|
-
// movie claims it is ready, but in IE this isn't always the case...
|
269
|
-
// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
|
270
|
-
this.movie = document.getElementById(this.movieId);
|
271
|
-
if (!this.movie) {
|
272
|
-
var self = this;
|
273
|
-
setTimeout( function() { self.receiveEvent('load', null); }, 1 );
|
274
|
-
return;
|
275
|
-
}
|
276
|
-
|
277
|
-
// firefox on pc needs a "kick" in order to set these in certain cases
|
278
|
-
if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
|
279
|
-
var self = this;
|
280
|
-
setTimeout( function() { self.receiveEvent('load', null); }, 100 );
|
281
|
-
this.ready = true;
|
282
|
-
return;
|
283
|
-
}
|
284
|
-
|
285
|
-
this.ready = true;
|
286
|
-
this.movie.setText( this.clipText );
|
287
|
-
this.movie.setHandCursor( this.handCursorEnabled );
|
288
|
-
break;
|
289
|
-
|
290
|
-
case 'mouseover':
|
291
|
-
if (this.domElement && this.cssEffects) {
|
292
|
-
this.domElement.addClass('hover');
|
293
|
-
if (this.recoverActive) this.domElement.addClass('active');
|
294
|
-
}
|
295
|
-
break;
|
296
|
-
|
297
|
-
case 'mouseout':
|
298
|
-
if (this.domElement && this.cssEffects) {
|
299
|
-
this.recoverActive = false;
|
300
|
-
if (this.domElement.hasClass('active')) {
|
301
|
-
this.domElement.removeClass('active');
|
302
|
-
this.recoverActive = true;
|
303
|
-
}
|
304
|
-
this.domElement.removeClass('hover');
|
305
|
-
}
|
306
|
-
break;
|
307
|
-
|
308
|
-
case 'mousedown':
|
309
|
-
if (this.domElement && this.cssEffects) {
|
310
|
-
this.domElement.addClass('active');
|
311
|
-
}
|
312
|
-
break;
|
313
|
-
|
314
|
-
case 'mouseup':
|
315
|
-
if (this.domElement && this.cssEffects) {
|
316
|
-
this.domElement.removeClass('active');
|
317
|
-
this.recoverActive = false;
|
318
|
-
}
|
319
|
-
break;
|
320
|
-
} // switch eventName
|
321
|
-
|
322
|
-
if (this.handlers[eventName]) {
|
323
|
-
for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
|
324
|
-
var func = this.handlers[eventName][idx];
|
325
|
-
|
326
|
-
if (typeof(func) == 'function') {
|
327
|
-
// actual function reference
|
328
|
-
func(this, args);
|
329
|
-
}
|
330
|
-
else if ((typeof(func) == 'object') && (func.length == 2)) {
|
331
|
-
// PHP style object + method, i.e. [myObject, 'myMethod']
|
332
|
-
func[0][ func[1] ](this, args);
|
333
|
-
}
|
334
|
-
else if (typeof(func) == 'string') {
|
335
|
-
// name of function
|
336
|
-
window[func](this, args);
|
337
|
-
}
|
338
|
-
} // foreach event handler defined
|
339
|
-
} // user defined handler for event
|
340
|
-
}
|
341
|
-
|
342
|
-
};
|
1
|
+
/*
|
2
|
+
|
3
|
+
The MIT License (MIT)
|
4
|
+
Copyright (c) 2012 Jon Rohan, James M. Greene,
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
8
|
+
in the Software without restriction, including without limitation the rights
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
11
|
+
furnished to do so, subject to the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be included in
|
14
|
+
all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
THE SOFTWARE.
|
23
|
+
|
24
|
+
*/
|
25
|
+
|
26
|
+
// Simple Set Clipboard System
|
27
|
+
// Author: Joseph Huckaby
|
28
|
+
|
29
|
+
var ZeroClipboard = {
|
30
|
+
|
31
|
+
version: "1.0.7",
|
32
|
+
clients: {}, // registered upload clients on page, indexed by id
|
33
|
+
moviePath: 'ZeroClipboard.swf', // URL to movie
|
34
|
+
nextId: 1, // ID of next movie
|
35
|
+
|
36
|
+
$: function(thingy) {
|
37
|
+
// simple DOM lookup utility function
|
38
|
+
if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
|
39
|
+
if (!thingy.addClass) {
|
40
|
+
// extend element with a few useful methods
|
41
|
+
thingy.hide = function() { this.style.display = 'none'; };
|
42
|
+
thingy.show = function() { this.style.display = ''; };
|
43
|
+
thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
|
44
|
+
thingy.removeClass = function(name) {
|
45
|
+
var classes = this.className.split(/\s+/);
|
46
|
+
var idx = -1;
|
47
|
+
for (var k = 0; k < classes.length; k++) {
|
48
|
+
if (classes[k] == name) { idx = k; k = classes.length; }
|
49
|
+
}
|
50
|
+
if (idx > -1) {
|
51
|
+
classes.splice( idx, 1 );
|
52
|
+
this.className = classes.join(' ');
|
53
|
+
}
|
54
|
+
return this;
|
55
|
+
};
|
56
|
+
thingy.hasClass = function(name) {
|
57
|
+
return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
|
58
|
+
};
|
59
|
+
}
|
60
|
+
return thingy;
|
61
|
+
},
|
62
|
+
|
63
|
+
setMoviePath: function(path) {
|
64
|
+
// set path to ZeroClipboard.swf
|
65
|
+
this.moviePath = path;
|
66
|
+
},
|
67
|
+
|
68
|
+
dispatch: function(id, eventName, args) {
|
69
|
+
// receive event from flash movie, send to client
|
70
|
+
var client = this.clients[id];
|
71
|
+
if (client) {
|
72
|
+
client.receiveEvent(eventName, args);
|
73
|
+
}
|
74
|
+
},
|
75
|
+
|
76
|
+
register: function(id, client) {
|
77
|
+
// register new client to receive events
|
78
|
+
this.clients[id] = client;
|
79
|
+
},
|
80
|
+
|
81
|
+
getDOMObjectPosition: function(obj, stopObj) {
|
82
|
+
// get absolute coordinates for dom element
|
83
|
+
var info = {
|
84
|
+
left: 0,
|
85
|
+
top: 0,
|
86
|
+
width: obj.width ? obj.width : obj.offsetWidth,
|
87
|
+
height: obj.height ? obj.height : obj.offsetHeight
|
88
|
+
};
|
89
|
+
|
90
|
+
while (obj && (obj != stopObj)) {
|
91
|
+
info.left += obj.offsetLeft;
|
92
|
+
info.top += obj.offsetTop;
|
93
|
+
obj = obj.offsetParent;
|
94
|
+
}
|
95
|
+
|
96
|
+
return info;
|
97
|
+
},
|
98
|
+
|
99
|
+
Client: function(elem) {
|
100
|
+
// constructor for new simple upload client
|
101
|
+
this.handlers = {};
|
102
|
+
|
103
|
+
// unique ID
|
104
|
+
this.id = ZeroClipboard.nextId++;
|
105
|
+
this.movieId = 'ZeroClipboardMovie_' + this.id;
|
106
|
+
|
107
|
+
// register client with singleton to receive flash events
|
108
|
+
ZeroClipboard.register(this.id, this);
|
109
|
+
|
110
|
+
// create movie
|
111
|
+
if (elem) this.glue(elem);
|
112
|
+
}
|
113
|
+
};
|
114
|
+
|
115
|
+
ZeroClipboard.Client.prototype = {
|
116
|
+
|
117
|
+
id: 0, // unique ID for us
|
118
|
+
ready: false, // whether movie is ready to receive events or not
|
119
|
+
movie: null, // reference to movie object
|
120
|
+
clipText: '', // text to copy to clipboard
|
121
|
+
handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
|
122
|
+
cssEffects: true, // enable CSS mouse effects on dom container
|
123
|
+
handlers: null, // user event handlers
|
124
|
+
|
125
|
+
glue: function(elem, appendElem, stylesToAdd) {
|
126
|
+
// glue to DOM element
|
127
|
+
// elem can be ID or actual DOM element object
|
128
|
+
this.domElement = ZeroClipboard.$(elem);
|
129
|
+
|
130
|
+
// float just above object, or zIndex 99 if dom element isn't set
|
131
|
+
var zIndex = 99;
|
132
|
+
if (this.domElement.style.zIndex) {
|
133
|
+
zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
|
134
|
+
}
|
135
|
+
|
136
|
+
if (typeof(appendElem) == 'string') {
|
137
|
+
appendElem = ZeroClipboard.$(appendElem);
|
138
|
+
}
|
139
|
+
else if (typeof(appendElem) == 'undefined') {
|
140
|
+
appendElem = document.getElementsByTagName('body')[0];
|
141
|
+
}
|
142
|
+
|
143
|
+
// find X/Y position of domElement
|
144
|
+
var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
|
145
|
+
|
146
|
+
// create floating DIV above element
|
147
|
+
this.div = document.createElement('div');
|
148
|
+
var style = this.div.style;
|
149
|
+
style.position = 'absolute';
|
150
|
+
style.left = '' + box.left + 'px';
|
151
|
+
style.top = '' + box.top + 'px';
|
152
|
+
style.width = '' + box.width + 'px';
|
153
|
+
style.height = '' + box.height + 'px';
|
154
|
+
style.zIndex = zIndex;
|
155
|
+
|
156
|
+
style.left = '0px';
|
157
|
+
style.top = '0px';
|
158
|
+
|
159
|
+
if (typeof(stylesToAdd) == 'object') {
|
160
|
+
for (addedStyle in stylesToAdd) {
|
161
|
+
style[addedStyle] = stylesToAdd[addedStyle];
|
162
|
+
}
|
163
|
+
}
|
164
|
+
|
165
|
+
// style.backgroundColor = '#f00'; // debug
|
166
|
+
|
167
|
+
appendElem.appendChild(this.div);
|
168
|
+
|
169
|
+
this.div.innerHTML = this.getHTML( box.width, box.height );
|
170
|
+
},
|
171
|
+
|
172
|
+
getHTML: function(width, height) {
|
173
|
+
// return HTML for movie
|
174
|
+
var html = '';
|
175
|
+
var flashvars = 'id=' + this.id +
|
176
|
+
'&width=' + width +
|
177
|
+
'&height=' + height;
|
178
|
+
|
179
|
+
if (navigator.userAgent.match(/MSIE/)) {
|
180
|
+
// IE gets an OBJECT tag
|
181
|
+
var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
|
182
|
+
html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
|
183
|
+
}
|
184
|
+
else {
|
185
|
+
// all other browsers get an EMBED tag
|
186
|
+
html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
|
187
|
+
}
|
188
|
+
return html;
|
189
|
+
},
|
190
|
+
|
191
|
+
hide: function() {
|
192
|
+
// temporarily hide floater offscreen
|
193
|
+
if (this.div) {
|
194
|
+
this.div.style.left = '-2000px';
|
195
|
+
}
|
196
|
+
},
|
197
|
+
|
198
|
+
show: function() {
|
199
|
+
// show ourselves after a call to hide()
|
200
|
+
this.reposition();
|
201
|
+
},
|
202
|
+
|
203
|
+
destroy: function() {
|
204
|
+
// destroy control and floater
|
205
|
+
if (this.domElement && this.div) {
|
206
|
+
this.hide();
|
207
|
+
this.div.innerHTML = '';
|
208
|
+
|
209
|
+
var body = document.getElementsByTagName('body')[0];
|
210
|
+
try { body.removeChild( this.div ); } catch(e) {;}
|
211
|
+
|
212
|
+
this.domElement = null;
|
213
|
+
this.div = null;
|
214
|
+
}
|
215
|
+
},
|
216
|
+
|
217
|
+
reposition: function(elem) {
|
218
|
+
// reposition our floating div, optionally to new container
|
219
|
+
// warning: container CANNOT change size, only position
|
220
|
+
if (elem) {
|
221
|
+
this.domElement = ZeroClipboard.$(elem);
|
222
|
+
if (!this.domElement) this.hide();
|
223
|
+
}
|
224
|
+
|
225
|
+
console.debug( this.domElement, this.div );
|
226
|
+
|
227
|
+
if (this.domElement && this.div) {
|
228
|
+
var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
|
229
|
+
console.debug( box );
|
230
|
+
var style = this.div.style;
|
231
|
+
style.left = '' + box.left + 'px';
|
232
|
+
style.top = '' + box.top + 'px';
|
233
|
+
}
|
234
|
+
},
|
235
|
+
|
236
|
+
setText: function(newText) {
|
237
|
+
// set text to be copied to clipboard
|
238
|
+
this.clipText = newText;
|
239
|
+
if (this.ready) this.movie.setText(newText);
|
240
|
+
},
|
241
|
+
|
242
|
+
addEventListener: function(eventName, func) {
|
243
|
+
// add user event listener for event
|
244
|
+
// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
|
245
|
+
eventName = eventName.toString().toLowerCase().replace(/^on/, '');
|
246
|
+
if (!this.handlers[eventName]) this.handlers[eventName] = [];
|
247
|
+
this.handlers[eventName].push(func);
|
248
|
+
},
|
249
|
+
|
250
|
+
setHandCursor: function(enabled) {
|
251
|
+
// enable hand cursor (true), or default arrow cursor (false)
|
252
|
+
this.handCursorEnabled = enabled;
|
253
|
+
if (this.ready) this.movie.setHandCursor(enabled);
|
254
|
+
},
|
255
|
+
|
256
|
+
setCSSEffects: function(enabled) {
|
257
|
+
// enable or disable CSS effects on DOM container
|
258
|
+
this.cssEffects = !!enabled;
|
259
|
+
},
|
260
|
+
|
261
|
+
receiveEvent: function(eventName, args) {
|
262
|
+
// receive event from flash
|
263
|
+
eventName = eventName.toString().toLowerCase().replace(/^on/, '');
|
264
|
+
|
265
|
+
// special behavior for certain events
|
266
|
+
switch (eventName) {
|
267
|
+
case 'load':
|
268
|
+
// movie claims it is ready, but in IE this isn't always the case...
|
269
|
+
// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
|
270
|
+
this.movie = document.getElementById(this.movieId);
|
271
|
+
if (!this.movie) {
|
272
|
+
var self = this;
|
273
|
+
setTimeout( function() { self.receiveEvent('load', null); }, 1 );
|
274
|
+
return;
|
275
|
+
}
|
276
|
+
|
277
|
+
// firefox on pc needs a "kick" in order to set these in certain cases
|
278
|
+
if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
|
279
|
+
var self = this;
|
280
|
+
setTimeout( function() { self.receiveEvent('load', null); }, 100 );
|
281
|
+
this.ready = true;
|
282
|
+
return;
|
283
|
+
}
|
284
|
+
|
285
|
+
this.ready = true;
|
286
|
+
this.movie.setText( this.clipText );
|
287
|
+
this.movie.setHandCursor( this.handCursorEnabled );
|
288
|
+
break;
|
289
|
+
|
290
|
+
case 'mouseover':
|
291
|
+
if (this.domElement && this.cssEffects) {
|
292
|
+
this.domElement.addClass('hover');
|
293
|
+
if (this.recoverActive) this.domElement.addClass('active');
|
294
|
+
}
|
295
|
+
break;
|
296
|
+
|
297
|
+
case 'mouseout':
|
298
|
+
if (this.domElement && this.cssEffects) {
|
299
|
+
this.recoverActive = false;
|
300
|
+
if (this.domElement.hasClass('active')) {
|
301
|
+
this.domElement.removeClass('active');
|
302
|
+
this.recoverActive = true;
|
303
|
+
}
|
304
|
+
this.domElement.removeClass('hover');
|
305
|
+
}
|
306
|
+
break;
|
307
|
+
|
308
|
+
case 'mousedown':
|
309
|
+
if (this.domElement && this.cssEffects) {
|
310
|
+
this.domElement.addClass('active');
|
311
|
+
}
|
312
|
+
break;
|
313
|
+
|
314
|
+
case 'mouseup':
|
315
|
+
if (this.domElement && this.cssEffects) {
|
316
|
+
this.domElement.removeClass('active');
|
317
|
+
this.recoverActive = false;
|
318
|
+
}
|
319
|
+
break;
|
320
|
+
} // switch eventName
|
321
|
+
|
322
|
+
if (this.handlers[eventName]) {
|
323
|
+
for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
|
324
|
+
var func = this.handlers[eventName][idx];
|
325
|
+
|
326
|
+
if (typeof(func) == 'function') {
|
327
|
+
// actual function reference
|
328
|
+
func(this, args);
|
329
|
+
}
|
330
|
+
else if ((typeof(func) == 'object') && (func.length == 2)) {
|
331
|
+
// PHP style object + method, i.e. [myObject, 'myMethod']
|
332
|
+
func[0][ func[1] ](this, args);
|
333
|
+
}
|
334
|
+
else if (typeof(func) == 'string') {
|
335
|
+
// name of function
|
336
|
+
window[func](this, args);
|
337
|
+
}
|
338
|
+
} // foreach event handler defined
|
339
|
+
} // user defined handler for event
|
340
|
+
}
|
341
|
+
|
342
|
+
};
|