You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2017/02/05 11:10:01 UTC
svn commit: r1781731 [17/45] - in /ofbiz/trunk:
applications/accounting/src/main/java/org/apache/ofbiz/accounting/thirdparty/ideal/
applications/accounting/webapp/ap/error/
applications/accounting/webapp/ar/error/
applications/commonext/webapp/ofbizset...
Modified: ofbiz/trunk/plugins/solr/webapp/solr/css/styles/segments.css
URL: http://svn.apache.org/viewvc/ofbiz/trunk/plugins/solr/webapp/solr/css/styles/segments.css?rev=1781731&r1=1781730&r2=1781731&view=diff
==============================================================================
--- ofbiz/trunk/plugins/solr/webapp/solr/css/styles/segments.css (original)
+++ ofbiz/trunk/plugins/solr/webapp/solr/css/styles/segments.css Sun Feb 5 11:09:59 2017
@@ -1,145 +1,145 @@
-/*
-
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-*/
-
-#content #segments .loader
-{
- background-position: 0 50%;
- padding-left: 21px;
-}
-
-#content #segments .reload
-{
- background-image: url( ../../img/ico/arrow-circle.png );
- background-position: 50% 50%;
- display: block;
- height: 30px;
- position: absolute;
- right: 10px;
- top: 10px;
- width: 30px;
-}
-
-#content #segments .reload.loader
-{
- padding-left: 0;
-}
-
-#content #segments .reload span
-{
- display: none;
-}
-
-#content #segments #result
-{
- width: 77%;
-}
-
-#content #segments #result #response
-{
- margin-left: 25px;
-}
-
-#content #segments .segments-holder ul {
- margin-left: 25px;
-}
-#content #segments .segments-holder li {
- margin-bottom: 2px;
- position: relative;
- width: 100%;
-}
-
-#content #segments .segments-holder li .toolitp {
- display: none;
- background: #C8C8C8;
- position: absolute;
- z-index: 1000;
- width:220px;
- height:120px;
- margin-left: 100%;
- opacity: .8;
- padding: 5px;
- border: 1px solid;
- border-radius: 5px;
-}
-
-#content #segments .segments-holder li .toolitp .label {
- float: left;
- width: 20%;
- opacity: 1;
-}
-
-#content #segments .segments-holder li:hover .toolitp {
- display:block;
-}
-
-#content #segments .segments-holder li dl,
-#content #segments .segments-holder li dt {
- padding-bottom: 1px;
- padding-top: 1px;
-}
-#content #segments .segments-holder li dl {
- min-width: 1px;
-}
-#content #segments .segments-holder li dt {
- color: #a0a0a0;
- left: -45px;
- overflow: hidden;
- position: absolute;
- top: 0;
-}
-#content #segments .segments-holder li dt div {
- display: block;
- padding-right: 4px;
- text-align: right;
-}
-#content #segments .segments-holder li dd {
- clear: left;
- float: left;
- margin-left: 2px;
- white-space: nowrap;
- width: 100%;
-}
-
-#content #segments .segments-holder li dd div.deleted {
- background-color: #808080;
- padding-left: 5px;
-}
-
-#content #segments .segments-holder li dd div.live {
- background-color: #DDDDDD;
- float: left;
-}
-
-#content #segments .segments-holder li dd div.start {
- float: left;
- width: 20%;
-}
-
-#content #segments .segments-holder li dd div.end {
- text-align: right;
-}
-
-.merge-candidate {
- background-color: #FFC9F9 !important;
-}
-
-#content #segments .segments-holder li dd div.w5 {
- width: 20%;
- float: left;
-}
+/*
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#content #segments .loader
+{
+ background-position: 0 50%;
+ padding-left: 21px;
+}
+
+#content #segments .reload
+{
+ background-image: url( ../../img/ico/arrow-circle.png );
+ background-position: 50% 50%;
+ display: block;
+ height: 30px;
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ width: 30px;
+}
+
+#content #segments .reload.loader
+{
+ padding-left: 0;
+}
+
+#content #segments .reload span
+{
+ display: none;
+}
+
+#content #segments #result
+{
+ width: 77%;
+}
+
+#content #segments #result #response
+{
+ margin-left: 25px;
+}
+
+#content #segments .segments-holder ul {
+ margin-left: 25px;
+}
+#content #segments .segments-holder li {
+ margin-bottom: 2px;
+ position: relative;
+ width: 100%;
+}
+
+#content #segments .segments-holder li .toolitp {
+ display: none;
+ background: #C8C8C8;
+ position: absolute;
+ z-index: 1000;
+ width:220px;
+ height:120px;
+ margin-left: 100%;
+ opacity: .8;
+ padding: 5px;
+ border: 1px solid;
+ border-radius: 5px;
+}
+
+#content #segments .segments-holder li .toolitp .label {
+ float: left;
+ width: 20%;
+ opacity: 1;
+}
+
+#content #segments .segments-holder li:hover .toolitp {
+ display:block;
+}
+
+#content #segments .segments-holder li dl,
+#content #segments .segments-holder li dt {
+ padding-bottom: 1px;
+ padding-top: 1px;
+}
+#content #segments .segments-holder li dl {
+ min-width: 1px;
+}
+#content #segments .segments-holder li dt {
+ color: #a0a0a0;
+ left: -45px;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+}
+#content #segments .segments-holder li dt div {
+ display: block;
+ padding-right: 4px;
+ text-align: right;
+}
+#content #segments .segments-holder li dd {
+ clear: left;
+ float: left;
+ margin-left: 2px;
+ white-space: nowrap;
+ width: 100%;
+}
+
+#content #segments .segments-holder li dd div.deleted {
+ background-color: #808080;
+ padding-left: 5px;
+}
+
+#content #segments .segments-holder li dd div.live {
+ background-color: #DDDDDD;
+ float: left;
+}
+
+#content #segments .segments-holder li dd div.start {
+ float: left;
+ width: 20%;
+}
+
+#content #segments .segments-holder li dd div.end {
+ text-align: right;
+}
+
+.merge-candidate {
+ background-color: #FFC9F9 !important;
+}
+
+#content #segments .segments-holder li dd div.w5 {
+ width: 20%;
+ float: left;
+}
Propchange: ofbiz/trunk/plugins/solr/webapp/solr/css/styles/segments.css
------------------------------------------------------------------------------
svn:eol-style = native
Modified: ofbiz/trunk/plugins/solr/webapp/solr/js/angular/app.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/plugins/solr/webapp/solr/js/angular/app.js?rev=1781731&r1=1781730&r2=1781731&view=diff
==============================================================================
--- ofbiz/trunk/plugins/solr/webapp/solr/js/angular/app.js (original)
+++ ofbiz/trunk/plugins/solr/webapp/solr/js/angular/app.js Sun Feb 5 11:09:59 2017
@@ -1,799 +1,799 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-var solrAdminApp = angular.module("solrAdminApp", [
- "ngResource",
- "ngRoute",
- "ngCookies",
- "ngtimeago",
- "solrAdminServices",
- "localytics.directives"
-]);
-
-solrAdminApp.config([
- '$routeProvider', function($routeProvider) {
- $routeProvider.
- when('/', {
- templateUrl: 'partials/index.html',
- controller: 'IndexController'
- }).
- when('/~logging', {
- templateUrl: 'partials/logging.html',
- controller: 'LoggingController'
- }).
- when('/~logging/level', {
- templateUrl: 'partials/logging-levels.html',
- controller: 'LoggingLevelController'
- }).
- when('/~cloud', {
- templateUrl: 'partials/cloud.html',
- controller: 'CloudController'
- }).
- when('/~cores', {
- templateUrl: 'partials/cores.html',
- controller: 'CoreAdminController'
- }).
- when('/~cores/:corename', {
- templateUrl: 'partials/cores.html',
- controller: 'CoreAdminController'
- }).
- when('/~collections', {
- templateUrl: 'partials/collections.html',
- controller: 'CollectionsController'
- }).
- when('/~collections/:collection', {
- templateUrl: 'partials/collections.html',
- controller: 'CollectionsController'
- }).
- when('/~threads', {
- templateUrl: 'partials/threads.html',
- controller: 'ThreadsController'
- }).
- when('/~java-properties', {
- templateUrl: 'partials/java-properties.html',
- controller: 'JavaPropertiesController'
- }).
- when('/:core', {
- templateUrl: 'partials/core_overview.html',
- controller: 'CoreOverviewController'
- }).
- when('/:core/collection-overview', {
- templateUrl: 'partials/collection_overview.html',
- controller: 'CollectionOverviewController'
- }).
- when('/:core/analysis', {
- templateUrl: 'partials/analysis.html',
- controller: 'AnalysisController'
- }).
- when('/:core/dataimport', {
- templateUrl: 'partials/dataimport.html',
- controller: 'DataImportController'
- }).
- when('/:core/dataimport/:handler*', {
- templateUrl: 'partials/dataimport.html',
- controller: 'DataImportController'
- }).
- when('/:core/documents', {
- templateUrl: 'partials/documents.html',
- controller: 'DocumentsController'
- }).
- when('/:core/files', {
- templateUrl: 'partials/files.html',
- controller: 'FilesController'
- }).
- when('/:core/plugins', {
- templateUrl: 'partials/plugins.html',
- controller: 'PluginsController',
- reloadOnSearch: false
- }).
- when('/:core/plugins/:legacytype', {
- templateUrl: 'partials/plugins.html',
- controller: 'PluginsController',
- reloadOnSearch: false
- }).
- when('/:core/query', {
- templateUrl: 'partials/query.html',
- controller: 'QueryController'
- }).
- when('/:core/stream', {
- templateUrl: 'partials/stream.html',
- controller: 'StreamController'
- }).
- when('/:core/replication', {
- templateUrl: 'partials/replication.html',
- controller: 'ReplicationController'
- }).
- when('/:core/dataimport', {
- templateUrl: 'partials/dataimport.html',
- controller: 'DataImportController'
- }).
- when('/:core/dataimport/:handler*', {
- templateUrl: 'partials/dataimport.html',
- controller: 'DataImportController'
- }).
- when('/:core/schema', {
- templateUrl: 'partials/schema.html',
- controller: 'SchemaController'
- }).
- when('/:core/segments', {
- templateUrl: 'partials/segments.html',
- controller: 'SegmentsController'
- }).
- otherwise({
- redirectTo: '/'
- });
-}])
-.constant('Constants', {
- IS_ROOT_PAGE: 1,
- IS_CORE_PAGE: 2,
- IS_COLLECTION_PAGE: 3,
- ROOT_URL: "/"
-})
-.filter('uriencode', function() {
- return window.encodeURIComponent;
-})
-.filter('highlight', function($sce) {
- return function(input, lang) {
- if (lang && input && lang!="txt") return hljs.highlight(lang, input).value;
- return input;
- }
-})
-.filter('unsafe', function($sce) { return $sce.trustAsHtml; })
-.directive('loadingStatusMessage', function() {
- return {
- link: function($scope, $element, attrs) {
- var show = function() {$element.css('display', 'block')};
- var hide = function() {$element.css('display', 'none')};
- $scope.$on('loadingStatusActive', show);
- $scope.$on('loadingStatusInactive', hide);
- }
- };
-})
-.directive('escapePressed', function () {
- return function (scope, element, attrs) {
- element.bind("keydown keypress", function (event) {
- if(event.which === 27) {
- scope.$apply(function (){
- scope.$eval(attrs.escapePressed);
- });
- event.preventDefault();
- }
- });
- };
-})
-.directive('focusWhen', function($timeout) {
- return {
- link: function(scope, element, attrs) {
- scope.$watch(attrs.focusWhen, function(value) {
- if(value === true) {
- $timeout(function() {
- element[0].focus();
- }, 100);
- }
- });
- }
- };
-})
-.directive('scrollableWhenSmall', function($window) {
- return {
- link: function(scope, element, attrs) {
- var w = angular.element($window);
-
- var checkFixedMenu = function() {
- var shouldScroll = w.height() < (element.height() + $('#header').height() + 40);
- element.toggleClass( 'scroll', shouldScroll);
- };
- w.bind('resize', checkFixedMenu);
- w.bind('load', checkFixedMenu);
- }
- }
-})
-.filter('readableSeconds', function() {
- return function(input) {
- seconds = parseInt(input||0, 10);
- var minutes = Math.floor( seconds / 60 );
- var hours = Math.floor( minutes / 60 );
-
- var text = [];
- if( 0 !== hours ) {
- text.push( hours + 'h' );
- seconds -= hours * 60 * 60;
- minutes -= hours * 60;
- }
-
- if( 0 !== minutes ) {
- text.push( minutes + 'm' );
- seconds -= minutes * 60;
- }
-
- if( 0 !== seconds ) {
- text.push( ( '0' + seconds ).substr( -2 ) + 's' );
- }
- return text.join(' ');
- };
-})
-.filter('number', function($locale) {
- return function(input) {
- var sep = {
- 'de_CH' : '\'',
- 'de' : '.',
- 'en' : ',',
- 'es' : '.',
- 'it' : '.',
- 'ja' : ',',
- 'sv' : ' ',
- 'tr' : '.',
- '_' : '' // fallback
- };
-
- var browser = {};
- var match = $locale.id.match( /^(\w{2})([-_](\w{2}))?$/ );
- if (match[1]) {
- browser.language = match[1].toLowerCase();
- }
- if (match[1] && match[3]) {
- browser.locale = match[1] + '_' + match[3];
- }
-
- return ( input || 0 ).toString().replace(/\B(?=(\d{3})+(?!\d))/g,
- sep[ browser.locale ] || sep[ browser.language ] || sep['_']);
- };
-})
-.filter('orderObjectBy', function() {
- return function(items, field, reverse) {
- var filtered = [];
- angular.forEach(items, function(item) {
- filtered.push(item);
- });
- filtered.sort(function (a, b) {
- return (a[field] > b[field] ? 1 : -1);
- });
- if(reverse) filtered.reverse();
- return filtered;
- };
-})
-.directive('jstree', function($parse) {
- return {
- restrict: 'EA',
- scope: {
- data: '=',
- onSelect: '&'
- },
- link: function(scope, element, attrs) {
- scope.$watch("data", function(newValue, oldValue) {
- if (newValue) {
- var treeConfig = {
- "plugins" : [ "themes", "json_data", "ui" ],
- "json_data" : {
- "data" : scope.data,
- "progressive_render" : true
- },
- "core" : {
- "animation" : 0
- }
- };
-
- var tree = $(element).jstree(treeConfig);
- tree.jstree('open_node','li:first');
- if (tree) {
- element.bind("select_node.jstree", function (event, data) {
- scope.$apply(function() {
- scope.onSelect({url: data.args[0].href, data: data});
- });
- });
- }
- }
- }, true);
- }
- };
-})
-.directive('connectionMessage', function() {
- return {
- link: function($scope, $element, attrs) {
- var show = function() {$element.css('display', 'block')};
- var hide = function() {$element.css('display', 'none')};
- $scope.$on('connectionStatusActive', show);
- $scope.$on('connectionStatusInactive', hide);
- }
- };
-})
-.factory('httpInterceptor', function($q, $rootScope, $timeout, $injector) {
- var activeRequests = 0;
-
- var started = function(config) {
- if (activeRequests == 0) {
- $rootScope.$broadcast('loadingStatusActive');
- }
- if ($rootScope.exceptions[config.url]) {
- delete $rootScope.exceptions[config.url];
- }
- activeRequests++;
- config.timeout = 10000;
- return config || $q.when(config);
- };
-
- var ended = function(response) {
- activeRequests--;
- if (activeRequests == 0) {
- $rootScope.$broadcast('loadingStatusInactive');
- }
- if ($rootScope.retryCount>0) {
- $rootScope.connectionRecovered = true;
- $rootScope.retryCount=0;
- $timeout(function() {
- $rootScope.connectionRecovered=false;
- $rootScope.$broadcast('connectionStatusInactive');
- },2000);
- }
- return response || $q.when(response);
- };
-
- var failed = function(rejection) {
- activeRequests--;
- if (activeRequests == 0) {
- $rootScope.$broadcast('loadingStatusInactive');
- }
- if (rejection.config.headers.doNotIntercept) {
- return rejection;
- }
- if (rejection.status === 0) {
- $rootScope.$broadcast('connectionStatusActive');
- if (!$rootScope.retryCount) $rootScope.retryCount=0;
- $rootScope.retryCount ++;
- var $http = $injector.get('$http');
- var result = $http(rejection.config);
- return result;
- } else {
- $rootScope.exceptions[rejection.config.url] = rejection.data.error;
- }
- return $q.reject(rejection);
- }
-
- return {request: started, response: ended, responseError: failed};
-})
-.config(function($httpProvider) {
- $httpProvider.interceptors.push("httpInterceptor");
-})
-.directive('fileModel', function ($parse) {
- return {
- restrict: 'A',
- link: function(scope, element, attrs) {
- var model = $parse(attrs.fileModel);
- var modelSetter = model.assign;
-
- element.bind('change', function(){
- scope.$apply(function(){
- modelSetter(scope, element[0].files[0]);
- });
- });
- }
- };
-});
-
-solrAdminApp.controller('MainController', function($scope, $route, $rootScope, $location, Cores, Collections, System, Ping, Constants) {
-
- $rootScope.exceptions={};
-
- $rootScope.toggleException = function() {
- $scope.showException=!$scope.showException;
- };
-
- $scope.refresh = function() {
- $scope.cores = [];
- $scope.collections = [];
- }
-
- $scope.refresh();
- $scope.resetMenu = function(page, pageType) {
- Cores.list(function(data) {
- $scope.cores = [];
- var currentCoreName = $route.current.params.core;
- delete $scope.currentCore;
- for (key in data.status) {
- var core = data.status[key];
- $scope.cores.push(core);
- if ((!$scope.isSolrCloud || pageType == Constants.IS_CORE_PAGE) && core.name == currentCoreName) {
- $scope.currentCore = core;
- }
- }
- $scope.showInitFailures = Object.keys(data.initFailures).length>0;
- $scope.initFailures = data.initFailures;
- });
-
- System.get(function(data) {
- $scope.isCloudEnabled = data.mode.match( /solrcloud/i );
-
- if ($scope.isCloudEnabled) {
- Collections.list(function (data) {
- $scope.collections = [];
- var currentCollectionName = $route.current.params.core;
- delete $scope.currentCollection;
- for (key in data.collections) {
- var collection = {name: data.collections[key]};
- $scope.collections.push(collection);
- if (pageType == Constants.IS_COLLECTION_PAGE && collection.name == currentCollectionName) {
- $scope.currentCollection = collection;
- }
- }
- })
- }
-
- });
-
- $scope.showingLogging = page.lastIndexOf("logging", 0) === 0;
- $scope.showingCloud = page.lastIndexOf("cloud", 0) === 0;
- $scope.page = page;
- };
-
- $scope.ping = function() {
- Ping.ping({core: $scope.currentCore.name}, function(data) {
- $scope.showPing = true;
- $scope.pingMS = data.responseHeader.QTime;
- });
- // @todo .attr( 'title', '/admin/ping is not configured (' + xhr.status + ': ' + error_thrown + ')' );
- };
-
- $scope.dumpCloud = function() {
- $scope.$broadcast("cloud-dump");
- }
-
- $scope.showCore = function(core) {
- $location.url("/" + core.name);
- }
-
- $scope.showCollection = function(collection) {
- $location.url("/" + collection.name + "/collection-overview")
- }
-
- $scope.$on('$routeChangeStart', function() {
- $rootScope.exceptions = {};
- });
-});
-
-
-(function(window, angular, undefined) {
- 'use strict';
-
- angular.module('ngClipboard', []).
- provider('ngClip', function() {
- var self = this;
- this.path = '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/2.1.6/ZeroClipboard.swf';
- return {
- setPath: function(newPath) {
- self.path = newPath;
- },
- setConfig: function(config) {
- self.config = config;
- },
- $get: function() {
- return {
- path: self.path,
- config: self.config
- };
- }
- };
- }).
- run(['ngClip', function(ngClip) {
- var config = {
- swfPath: ngClip.path,
- trustedDomains: ["*"],
- allowScriptAccess: "always",
- forceHandCursor: true,
- };
- ZeroClipboard.config(angular.extend(config,ngClip.config || {}));
- }]).
- directive('clipCopy', ['ngClip', function (ngClip) {
- return {
- scope: {
- clipCopy: '&',
- clipClick: '&',
- clipClickFallback: '&'
- },
- restrict: 'A',
- link: function (scope, element, attrs) {
- // Bind a fallback function if flash is unavailable
- if (ZeroClipboard.isFlashUnusable()) {
- element.bind('click', function($event) {
- // Execute the expression with local variables `$event` and `copy`
- scope.$apply(scope.clipClickFallback({
- $event: $event,
- copy: scope.$eval(scope.clipCopy)
- }));
- });
-
- return;
- }
-
- // Create the client object
- var client = new ZeroClipboard(element);
- if (attrs.clipCopy === "") {
- scope.clipCopy = function(scope) {
- return element[0].previousElementSibling.innerText;
- };
- }
- client.on( 'ready', function(readyEvent) {
-
- client.on('copy', function (event) {
- var clipboard = event.clipboardData;
- clipboard.setData(attrs.clipCopyMimeType || 'text/plain', scope.$eval(scope.clipCopy));
- });
-
- client.on( 'aftercopy', function(event) {
- if (angular.isDefined(attrs.clipClick)) {
- scope.$apply(scope.clipClick);
- }
- });
-
- scope.$on('$destroy', function() {
- client.destroy();
- });
- });
- }
- };
- }]);
-})(window, window.angular);
-
-
-/* THE BELOW CODE IS TAKEN FROM js/scripts/app.js, AND STILL REQUIRES INTEGRATING
-
-
-// @todo clear timeouts
-
- // activate_core
- this.before
- (
- {},
- function( context )
- {
-
- var menu_wrapper = $( '#menu-wrapper' );
-
- // global dashboard doesn't have params.splat
- if( !this.params.splat )
- {
- this.params.splat = [ '~index' ];
- }
-
- var selector = '~' === this.params.splat[0][0]
- ? '#' + this.params.splat[0].replace( /^~/, '' ) + '.global'
- : '#core-selector #' + this.params.splat[0].replace( /\./g, '__' );
-
- var active_element = $( selector, menu_wrapper );
-
- // @todo "There is no core with this name"
-
- if( active_element.hasClass( 'global' ) )
- {
- active_element
- .addClass( 'active' );
-
- if( this.params.splat[1] )
- {
- $( '.' + this.params.splat[1], active_element )
- .addClass( 'active' );
- }
-
- $( '#core-selector option[selected]' )
- .removeAttr( 'selected' )
- .trigger( 'liszt:updated' );
-
- $( '#core-selector .chzn-container > a' )
- .addClass( 'chzn-default' );
- }
- else
- {
- active_element
- .attr( 'selected', 'selected' )
- .trigger( 'liszt:updated' );
-
-
- $( '#core-menu .' + this.params.splat[1] )
- .addClass( 'active' );
-
- }
- );
- }
-);
-
-var solr_admin = function( app_config )
-{
- this.menu_element = $( '#core-selector select' );
- this.core_menu = $( '#core-menu ul' );
-
- this.config = config;
- this.timeout = null;
-
- this.core_regex_base = '^#\\/([\\w\\d-\\.]+)';
-
- show_global_error = function( error )
- {
- var main = $( '#main' );
-
- $( 'div[id$="-wrapper"]', main )
- .remove();
-
- main
- .addClass( 'error' )
- .append( error );
-
- var pre_tags = $( 'pre', main );
- if( 0 !== pre_tags.size() )
- {
- hljs.highlightBlock( pre_tags.get(0) );
- }
- };
-
- sort_cores_data = function sort_cores_data( cores_status )
- {
- // build array of core-names for sorting
- var core_names = [];
- for( var core_name in cores_status )
- {
- core_names.push( core_name );
- }
- core_names.sort();
-
- var core_count = core_names.length;
- var cores = {};
-
- for( var i = 0; i < core_count; i++ )
- {
- var core_name = core_names[i];
- cores[core_name] = cores_status[core_name];
- }
-
- return cores;
- };
-
- this.set_cores_data = function set_cores_data( cores )
- {
- that.cores_data = sort_cores_data( cores.status );
-
- that.menu_element
- .empty();
-
- var core_list = [];
- core_list.push( '<option></option>' );
-
- var core_count = 0;
- for( var core_name in that.cores_data )
- {
- core_count++;
- var core_path = config.solr_path + '/' + core_name;
- var classes = [];
-
- if( cores.status[core_name]['isDefaultCore'] )
- {
- classes.push( 'default' );
- }
-
- var core_tpl = '<option '
- + ' id="' + core_name.replace( /\./g, '__' ) + '" '
- + ' class="' + classes.join( ' ' ) + '"'
- + ' data-basepath="' + core_path + '"'
- + ' schema="' + cores.status[core_name]['schema'] + '"'
- + ' config="' + cores.status[core_name]['config'] + '"'
- + ' value="#/' + core_name + '"'
- + ' title="' + core_name + '"'
- + '>'
- + core_name
- + '</option>';
-
- core_list.push( core_tpl );
- }
-
- var has_cores = 0 !== core_count;
- if( has_cores )
- {
- that.menu_element
- .append( core_list.join( "\n" ) )
- .trigger( 'liszt:updated' );
- }
-
- var core_selector = $( '#core-selector' );
-
- if( has_cores )
- {
- var cores_element = core_selector.find( '#has-cores' );
- var selector_width = cores_element.width();
-
- cores_element.find( '.chzn-container' )
- .css( 'width', selector_width + 'px' );
-
- cores_element.find( '.chzn-drop' )
- .css( 'width', ( selector_width - 2 ) + 'px' );
- }
- };
-
- this.run = function()
- {
- $.ajax
- (
- {
- // load cores (indexInfo = false
- success : function( response )
- {
-
- var system_url = config.solr_path + '/admin/info/system?wt=json';
- $.ajax
- (
- {
- url : system_url,
- dataType : 'json',
- beforeSend : function( arr, form, options )
- {
- },
- success : function( response )
- {
- that.dashboard_values = response;
-
- var environment_args = null;
- var cloud_args = null;
-
- if( response.jvm && response.jvm.jmx && response.jvm.jmx.commandLineArgs )
- {
- var command_line_args = response.jvm.jmx.commandLineArgs.join( ' | ' );
-
- environment_args = command_line_args.match( /-Dsolr.environment=((dev|test|prod)?[\w\d]*)/i );
- }
-
-// @todo detect $scope.isCloud = response.mode.match( /solrcloud/i );
-
- // environment
-
- var wrapper = $( '#wrapper' );
- var environment_element = $( '#environment' );
- if( environment_args )
- {
- wrapper
- .addClass( 'has-environment' );
-
- if( environment_args[1] )
- {
- environment_element
- .html( environment_args[1] );
- }
-
- if( environment_args[2] )
- {
- environment_element
- .addClass( environment_args[2] );
- }
- }
- else
- {
- wrapper
- .removeClass( 'has-environment' );
- }
-
- // cloud
-
- var cloud_nav_element = $( '#menu #cloud' );
- if( cloud_args )
- {
- cloud_nav_element
- .show();
- }
-
- // sammy
-
- sammy.run( location.hash );
- },
- error : function()
- {
- };
-*/
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+var solrAdminApp = angular.module("solrAdminApp", [
+ "ngResource",
+ "ngRoute",
+ "ngCookies",
+ "ngtimeago",
+ "solrAdminServices",
+ "localytics.directives"
+]);
+
+solrAdminApp.config([
+ '$routeProvider', function($routeProvider) {
+ $routeProvider.
+ when('/', {
+ templateUrl: 'partials/index.html',
+ controller: 'IndexController'
+ }).
+ when('/~logging', {
+ templateUrl: 'partials/logging.html',
+ controller: 'LoggingController'
+ }).
+ when('/~logging/level', {
+ templateUrl: 'partials/logging-levels.html',
+ controller: 'LoggingLevelController'
+ }).
+ when('/~cloud', {
+ templateUrl: 'partials/cloud.html',
+ controller: 'CloudController'
+ }).
+ when('/~cores', {
+ templateUrl: 'partials/cores.html',
+ controller: 'CoreAdminController'
+ }).
+ when('/~cores/:corename', {
+ templateUrl: 'partials/cores.html',
+ controller: 'CoreAdminController'
+ }).
+ when('/~collections', {
+ templateUrl: 'partials/collections.html',
+ controller: 'CollectionsController'
+ }).
+ when('/~collections/:collection', {
+ templateUrl: 'partials/collections.html',
+ controller: 'CollectionsController'
+ }).
+ when('/~threads', {
+ templateUrl: 'partials/threads.html',
+ controller: 'ThreadsController'
+ }).
+ when('/~java-properties', {
+ templateUrl: 'partials/java-properties.html',
+ controller: 'JavaPropertiesController'
+ }).
+ when('/:core', {
+ templateUrl: 'partials/core_overview.html',
+ controller: 'CoreOverviewController'
+ }).
+ when('/:core/collection-overview', {
+ templateUrl: 'partials/collection_overview.html',
+ controller: 'CollectionOverviewController'
+ }).
+ when('/:core/analysis', {
+ templateUrl: 'partials/analysis.html',
+ controller: 'AnalysisController'
+ }).
+ when('/:core/dataimport', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/dataimport/:handler*', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/documents', {
+ templateUrl: 'partials/documents.html',
+ controller: 'DocumentsController'
+ }).
+ when('/:core/files', {
+ templateUrl: 'partials/files.html',
+ controller: 'FilesController'
+ }).
+ when('/:core/plugins', {
+ templateUrl: 'partials/plugins.html',
+ controller: 'PluginsController',
+ reloadOnSearch: false
+ }).
+ when('/:core/plugins/:legacytype', {
+ templateUrl: 'partials/plugins.html',
+ controller: 'PluginsController',
+ reloadOnSearch: false
+ }).
+ when('/:core/query', {
+ templateUrl: 'partials/query.html',
+ controller: 'QueryController'
+ }).
+ when('/:core/stream', {
+ templateUrl: 'partials/stream.html',
+ controller: 'StreamController'
+ }).
+ when('/:core/replication', {
+ templateUrl: 'partials/replication.html',
+ controller: 'ReplicationController'
+ }).
+ when('/:core/dataimport', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/dataimport/:handler*', {
+ templateUrl: 'partials/dataimport.html',
+ controller: 'DataImportController'
+ }).
+ when('/:core/schema', {
+ templateUrl: 'partials/schema.html',
+ controller: 'SchemaController'
+ }).
+ when('/:core/segments', {
+ templateUrl: 'partials/segments.html',
+ controller: 'SegmentsController'
+ }).
+ otherwise({
+ redirectTo: '/'
+ });
+}])
+.constant('Constants', {
+ IS_ROOT_PAGE: 1,
+ IS_CORE_PAGE: 2,
+ IS_COLLECTION_PAGE: 3,
+ ROOT_URL: "/"
+})
+.filter('uriencode', function() {
+ return window.encodeURIComponent;
+})
+.filter('highlight', function($sce) {
+ return function(input, lang) {
+ if (lang && input && lang!="txt") return hljs.highlight(lang, input).value;
+ return input;
+ }
+})
+.filter('unsafe', function($sce) { return $sce.trustAsHtml; })
+.directive('loadingStatusMessage', function() {
+ return {
+ link: function($scope, $element, attrs) {
+ var show = function() {$element.css('display', 'block')};
+ var hide = function() {$element.css('display', 'none')};
+ $scope.$on('loadingStatusActive', show);
+ $scope.$on('loadingStatusInactive', hide);
+ }
+ };
+})
+.directive('escapePressed', function () {
+ return function (scope, element, attrs) {
+ element.bind("keydown keypress", function (event) {
+ if(event.which === 27) {
+ scope.$apply(function (){
+ scope.$eval(attrs.escapePressed);
+ });
+ event.preventDefault();
+ }
+ });
+ };
+})
+.directive('focusWhen', function($timeout) {
+ return {
+ link: function(scope, element, attrs) {
+ scope.$watch(attrs.focusWhen, function(value) {
+ if(value === true) {
+ $timeout(function() {
+ element[0].focus();
+ }, 100);
+ }
+ });
+ }
+ };
+})
+.directive('scrollableWhenSmall', function($window) {
+ return {
+ link: function(scope, element, attrs) {
+ var w = angular.element($window);
+
+ var checkFixedMenu = function() {
+ var shouldScroll = w.height() < (element.height() + $('#header').height() + 40);
+ element.toggleClass( 'scroll', shouldScroll);
+ };
+ w.bind('resize', checkFixedMenu);
+ w.bind('load', checkFixedMenu);
+ }
+ }
+})
+.filter('readableSeconds', function() {
+ return function(input) {
+ seconds = parseInt(input||0, 10);
+ var minutes = Math.floor( seconds / 60 );
+ var hours = Math.floor( minutes / 60 );
+
+ var text = [];
+ if( 0 !== hours ) {
+ text.push( hours + 'h' );
+ seconds -= hours * 60 * 60;
+ minutes -= hours * 60;
+ }
+
+ if( 0 !== minutes ) {
+ text.push( minutes + 'm' );
+ seconds -= minutes * 60;
+ }
+
+ if( 0 !== seconds ) {
+ text.push( ( '0' + seconds ).substr( -2 ) + 's' );
+ }
+ return text.join(' ');
+ };
+})
+.filter('number', function($locale) {
+ return function(input) {
+ var sep = {
+ 'de_CH' : '\'',
+ 'de' : '.',
+ 'en' : ',',
+ 'es' : '.',
+ 'it' : '.',
+ 'ja' : ',',
+ 'sv' : ' ',
+ 'tr' : '.',
+ '_' : '' // fallback
+ };
+
+ var browser = {};
+ var match = $locale.id.match( /^(\w{2})([-_](\w{2}))?$/ );
+ if (match[1]) {
+ browser.language = match[1].toLowerCase();
+ }
+ if (match[1] && match[3]) {
+ browser.locale = match[1] + '_' + match[3];
+ }
+
+ return ( input || 0 ).toString().replace(/\B(?=(\d{3})+(?!\d))/g,
+ sep[ browser.locale ] || sep[ browser.language ] || sep['_']);
+ };
+})
+.filter('orderObjectBy', function() {
+ return function(items, field, reverse) {
+ var filtered = [];
+ angular.forEach(items, function(item) {
+ filtered.push(item);
+ });
+ filtered.sort(function (a, b) {
+ return (a[field] > b[field] ? 1 : -1);
+ });
+ if(reverse) filtered.reverse();
+ return filtered;
+ };
+})
+.directive('jstree', function($parse) {
+ return {
+ restrict: 'EA',
+ scope: {
+ data: '=',
+ onSelect: '&'
+ },
+ link: function(scope, element, attrs) {
+ scope.$watch("data", function(newValue, oldValue) {
+ if (newValue) {
+ var treeConfig = {
+ "plugins" : [ "themes", "json_data", "ui" ],
+ "json_data" : {
+ "data" : scope.data,
+ "progressive_render" : true
+ },
+ "core" : {
+ "animation" : 0
+ }
+ };
+
+ var tree = $(element).jstree(treeConfig);
+ tree.jstree('open_node','li:first');
+ if (tree) {
+ element.bind("select_node.jstree", function (event, data) {
+ scope.$apply(function() {
+ scope.onSelect({url: data.args[0].href, data: data});
+ });
+ });
+ }
+ }
+ }, true);
+ }
+ };
+})
+.directive('connectionMessage', function() {
+ return {
+ link: function($scope, $element, attrs) {
+ var show = function() {$element.css('display', 'block')};
+ var hide = function() {$element.css('display', 'none')};
+ $scope.$on('connectionStatusActive', show);
+ $scope.$on('connectionStatusInactive', hide);
+ }
+ };
+})
+.factory('httpInterceptor', function($q, $rootScope, $timeout, $injector) {
+ var activeRequests = 0;
+
+ var started = function(config) {
+ if (activeRequests == 0) {
+ $rootScope.$broadcast('loadingStatusActive');
+ }
+ if ($rootScope.exceptions[config.url]) {
+ delete $rootScope.exceptions[config.url];
+ }
+ activeRequests++;
+ config.timeout = 10000;
+ return config || $q.when(config);
+ };
+
+ var ended = function(response) {
+ activeRequests--;
+ if (activeRequests == 0) {
+ $rootScope.$broadcast('loadingStatusInactive');
+ }
+ if ($rootScope.retryCount>0) {
+ $rootScope.connectionRecovered = true;
+ $rootScope.retryCount=0;
+ $timeout(function() {
+ $rootScope.connectionRecovered=false;
+ $rootScope.$broadcast('connectionStatusInactive');
+ },2000);
+ }
+ return response || $q.when(response);
+ };
+
+ var failed = function(rejection) {
+ activeRequests--;
+ if (activeRequests == 0) {
+ $rootScope.$broadcast('loadingStatusInactive');
+ }
+ if (rejection.config.headers.doNotIntercept) {
+ return rejection;
+ }
+ if (rejection.status === 0) {
+ $rootScope.$broadcast('connectionStatusActive');
+ if (!$rootScope.retryCount) $rootScope.retryCount=0;
+ $rootScope.retryCount ++;
+ var $http = $injector.get('$http');
+ var result = $http(rejection.config);
+ return result;
+ } else {
+ $rootScope.exceptions[rejection.config.url] = rejection.data.error;
+ }
+ return $q.reject(rejection);
+ }
+
+ return {request: started, response: ended, responseError: failed};
+})
+.config(function($httpProvider) {
+ $httpProvider.interceptors.push("httpInterceptor");
+})
+.directive('fileModel', function ($parse) {
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs) {
+ var model = $parse(attrs.fileModel);
+ var modelSetter = model.assign;
+
+ element.bind('change', function(){
+ scope.$apply(function(){
+ modelSetter(scope, element[0].files[0]);
+ });
+ });
+ }
+ };
+});
+
+solrAdminApp.controller('MainController', function($scope, $route, $rootScope, $location, Cores, Collections, System, Ping, Constants) {
+
+ $rootScope.exceptions={};
+
+ $rootScope.toggleException = function() {
+ $scope.showException=!$scope.showException;
+ };
+
+ $scope.refresh = function() {
+ $scope.cores = [];
+ $scope.collections = [];
+ }
+
+ $scope.refresh();
+ $scope.resetMenu = function(page, pageType) {
+ Cores.list(function(data) {
+ $scope.cores = [];
+ var currentCoreName = $route.current.params.core;
+ delete $scope.currentCore;
+ for (key in data.status) {
+ var core = data.status[key];
+ $scope.cores.push(core);
+ if ((!$scope.isSolrCloud || pageType == Constants.IS_CORE_PAGE) && core.name == currentCoreName) {
+ $scope.currentCore = core;
+ }
+ }
+ $scope.showInitFailures = Object.keys(data.initFailures).length>0;
+ $scope.initFailures = data.initFailures;
+ });
+
+ System.get(function(data) {
+ $scope.isCloudEnabled = data.mode.match( /solrcloud/i );
+
+ if ($scope.isCloudEnabled) {
+ Collections.list(function (data) {
+ $scope.collections = [];
+ var currentCollectionName = $route.current.params.core;
+ delete $scope.currentCollection;
+ for (key in data.collections) {
+ var collection = {name: data.collections[key]};
+ $scope.collections.push(collection);
+ if (pageType == Constants.IS_COLLECTION_PAGE && collection.name == currentCollectionName) {
+ $scope.currentCollection = collection;
+ }
+ }
+ })
+ }
+
+ });
+
+ $scope.showingLogging = page.lastIndexOf("logging", 0) === 0;
+ $scope.showingCloud = page.lastIndexOf("cloud", 0) === 0;
+ $scope.page = page;
+ };
+
+ $scope.ping = function() {
+ Ping.ping({core: $scope.currentCore.name}, function(data) {
+ $scope.showPing = true;
+ $scope.pingMS = data.responseHeader.QTime;
+ });
+ // @todo .attr( 'title', '/admin/ping is not configured (' + xhr.status + ': ' + error_thrown + ')' );
+ };
+
+ $scope.dumpCloud = function() {
+ $scope.$broadcast("cloud-dump");
+ }
+
+ $scope.showCore = function(core) {
+ $location.url("/" + core.name);
+ }
+
+ $scope.showCollection = function(collection) {
+ $location.url("/" + collection.name + "/collection-overview")
+ }
+
+ $scope.$on('$routeChangeStart', function() {
+ $rootScope.exceptions = {};
+ });
+});
+
+
+(function(window, angular, undefined) {
+ 'use strict';
+
+ angular.module('ngClipboard', []).
+ provider('ngClip', function() {
+ var self = this;
+ this.path = '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/2.1.6/ZeroClipboard.swf';
+ return {
+ setPath: function(newPath) {
+ self.path = newPath;
+ },
+ setConfig: function(config) {
+ self.config = config;
+ },
+ $get: function() {
+ return {
+ path: self.path,
+ config: self.config
+ };
+ }
+ };
+ }).
+ run(['ngClip', function(ngClip) {
+ var config = {
+ swfPath: ngClip.path,
+ trustedDomains: ["*"],
+ allowScriptAccess: "always",
+ forceHandCursor: true,
+ };
+ ZeroClipboard.config(angular.extend(config,ngClip.config || {}));
+ }]).
+ directive('clipCopy', ['ngClip', function (ngClip) {
+ return {
+ scope: {
+ clipCopy: '&',
+ clipClick: '&',
+ clipClickFallback: '&'
+ },
+ restrict: 'A',
+ link: function (scope, element, attrs) {
+ // Bind a fallback function if flash is unavailable
+ if (ZeroClipboard.isFlashUnusable()) {
+ element.bind('click', function($event) {
+ // Execute the expression with local variables `$event` and `copy`
+ scope.$apply(scope.clipClickFallback({
+ $event: $event,
+ copy: scope.$eval(scope.clipCopy)
+ }));
+ });
+
+ return;
+ }
+
+ // Create the client object
+ var client = new ZeroClipboard(element);
+ if (attrs.clipCopy === "") {
+ scope.clipCopy = function(scope) {
+ return element[0].previousElementSibling.innerText;
+ };
+ }
+ client.on( 'ready', function(readyEvent) {
+
+ client.on('copy', function (event) {
+ var clipboard = event.clipboardData;
+ clipboard.setData(attrs.clipCopyMimeType || 'text/plain', scope.$eval(scope.clipCopy));
+ });
+
+ client.on( 'aftercopy', function(event) {
+ if (angular.isDefined(attrs.clipClick)) {
+ scope.$apply(scope.clipClick);
+ }
+ });
+
+ scope.$on('$destroy', function() {
+ client.destroy();
+ });
+ });
+ }
+ };
+ }]);
+})(window, window.angular);
+
+
+/* THE BELOW CODE IS TAKEN FROM js/scripts/app.js, AND STILL REQUIRES INTEGRATING
+
+
+// @todo clear timeouts
+
+ // activate_core
+ this.before
+ (
+ {},
+ function( context )
+ {
+
+ var menu_wrapper = $( '#menu-wrapper' );
+
+ // global dashboard doesn't have params.splat
+ if( !this.params.splat )
+ {
+ this.params.splat = [ '~index' ];
+ }
+
+ var selector = '~' === this.params.splat[0][0]
+ ? '#' + this.params.splat[0].replace( /^~/, '' ) + '.global'
+ : '#core-selector #' + this.params.splat[0].replace( /\./g, '__' );
+
+ var active_element = $( selector, menu_wrapper );
+
+ // @todo "There is no core with this name"
+
+ if( active_element.hasClass( 'global' ) )
+ {
+ active_element
+ .addClass( 'active' );
+
+ if( this.params.splat[1] )
+ {
+ $( '.' + this.params.splat[1], active_element )
+ .addClass( 'active' );
+ }
+
+ $( '#core-selector option[selected]' )
+ .removeAttr( 'selected' )
+ .trigger( 'liszt:updated' );
+
+ $( '#core-selector .chzn-container > a' )
+ .addClass( 'chzn-default' );
+ }
+ else
+ {
+ active_element
+ .attr( 'selected', 'selected' )
+ .trigger( 'liszt:updated' );
+
+
+ $( '#core-menu .' + this.params.splat[1] )
+ .addClass( 'active' );
+
+ }
+ );
+ }
+);
+
+var solr_admin = function( app_config )
+{
+ this.menu_element = $( '#core-selector select' );
+ this.core_menu = $( '#core-menu ul' );
+
+ this.config = config;
+ this.timeout = null;
+
+ this.core_regex_base = '^#\\/([\\w\\d-\\.]+)';
+
+ show_global_error = function( error )
+ {
+ var main = $( '#main' );
+
+ $( 'div[id$="-wrapper"]', main )
+ .remove();
+
+ main
+ .addClass( 'error' )
+ .append( error );
+
+ var pre_tags = $( 'pre', main );
+ if( 0 !== pre_tags.size() )
+ {
+ hljs.highlightBlock( pre_tags.get(0) );
+ }
+ };
+
+ sort_cores_data = function sort_cores_data( cores_status )
+ {
+ // build array of core-names for sorting
+ var core_names = [];
+ for( var core_name in cores_status )
+ {
+ core_names.push( core_name );
+ }
+ core_names.sort();
+
+ var core_count = core_names.length;
+ var cores = {};
+
+ for( var i = 0; i < core_count; i++ )
+ {
+ var core_name = core_names[i];
+ cores[core_name] = cores_status[core_name];
+ }
+
+ return cores;
+ };
+
+ this.set_cores_data = function set_cores_data( cores )
+ {
+ that.cores_data = sort_cores_data( cores.status );
+
+ that.menu_element
+ .empty();
+
+ var core_list = [];
+ core_list.push( '<option></option>' );
+
+ var core_count = 0;
+ for( var core_name in that.cores_data )
+ {
+ core_count++;
+ var core_path = config.solr_path + '/' + core_name;
+ var classes = [];
+
+ if( cores.status[core_name]['isDefaultCore'] )
+ {
+ classes.push( 'default' );
+ }
+
+ var core_tpl = '<option '
+ + ' id="' + core_name.replace( /\./g, '__' ) + '" '
+ + ' class="' + classes.join( ' ' ) + '"'
+ + ' data-basepath="' + core_path + '"'
+ + ' schema="' + cores.status[core_name]['schema'] + '"'
+ + ' config="' + cores.status[core_name]['config'] + '"'
+ + ' value="#/' + core_name + '"'
+ + ' title="' + core_name + '"'
+ + '>'
+ + core_name
+ + '</option>';
+
+ core_list.push( core_tpl );
+ }
+
+ var has_cores = 0 !== core_count;
+ if( has_cores )
+ {
+ that.menu_element
+ .append( core_list.join( "\n" ) )
+ .trigger( 'liszt:updated' );
+ }
+
+ var core_selector = $( '#core-selector' );
+
+ if( has_cores )
+ {
+ var cores_element = core_selector.find( '#has-cores' );
+ var selector_width = cores_element.width();
+
+ cores_element.find( '.chzn-container' )
+ .css( 'width', selector_width + 'px' );
+
+ cores_element.find( '.chzn-drop' )
+ .css( 'width', ( selector_width - 2 ) + 'px' );
+ }
+ };
+
+ this.run = function()
+ {
+ $.ajax
+ (
+ {
+ // load cores (indexInfo = false
+ success : function( response )
+ {
+
+ var system_url = config.solr_path + '/admin/info/system?wt=json';
+ $.ajax
+ (
+ {
+ url : system_url,
+ dataType : 'json',
+ beforeSend : function( arr, form, options )
+ {
+ },
+ success : function( response )
+ {
+ that.dashboard_values = response;
+
+ var environment_args = null;
+ var cloud_args = null;
+
+ if( response.jvm && response.jvm.jmx && response.jvm.jmx.commandLineArgs )
+ {
+ var command_line_args = response.jvm.jmx.commandLineArgs.join( ' | ' );
+
+ environment_args = command_line_args.match( /-Dsolr.environment=((dev|test|prod)?[\w\d]*)/i );
+ }
+
+// @todo detect $scope.isCloud = response.mode.match( /solrcloud/i );
+
+ // environment
+
+ var wrapper = $( '#wrapper' );
+ var environment_element = $( '#environment' );
+ if( environment_args )
+ {
+ wrapper
+ .addClass( 'has-environment' );
+
+ if( environment_args[1] )
+ {
+ environment_element
+ .html( environment_args[1] );
+ }
+
+ if( environment_args[2] )
+ {
+ environment_element
+ .addClass( environment_args[2] );
+ }
+ }
+ else
+ {
+ wrapper
+ .removeClass( 'has-environment' );
+ }
+
+ // cloud
+
+ var cloud_nav_element = $( '#menu #cloud' );
+ if( cloud_args )
+ {
+ cloud_nav_element
+ .show();
+ }
+
+ // sammy
+
+ sammy.run( location.hash );
+ },
+ error : function()
+ {
+ };
+*/
Propchange: ofbiz/trunk/plugins/solr/webapp/solr/js/angular/app.js
------------------------------------------------------------------------------
svn:eol-style = native
Modified: ofbiz/trunk/plugins/solr/webapp/solr/js/angular/controllers/analysis.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/plugins/solr/webapp/solr/js/angular/controllers/analysis.js?rev=1781731&r1=1781730&r2=1781731&view=diff
==============================================================================
--- ofbiz/trunk/plugins/solr/webapp/solr/js/angular/controllers/analysis.js (original)
+++ ofbiz/trunk/plugins/solr/webapp/solr/js/angular/controllers/analysis.js Sun Feb 5 11:09:59 2017
@@ -1,203 +1,203 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-solrAdminApp.controller('AnalysisController',
- function($scope, $location, $routeParams, Luke, Analysis, Constants) {
- $scope.resetMenu("analysis", Constants.IS_COLLECTION_PAGE);
-
- $scope.refresh = function() {
- Luke.schema({core: $routeParams.core}, function(data) {
- $scope.fieldsAndTypes = [];
- for (var field in data.schema.fields) {
- $scope.fieldsAndTypes.push({
- group: "Fields",
- value: "fieldname=" + field,
- label: field});
- }
- for (var type in data.schema.types) {
- $scope.fieldsAndTypes.push({
- group: "Types",
- value: "fieldtype=" + type,
- label: type});
- }
- $scope.core = $routeParams.core;
- });
-
- $scope.parseQueryString();
- // @todo - set defaultSearchField either to context["analysis.fieldname"] or context["analysis.fieldtype"]
-
- };
- $scope.verbose = true;
-
- var getShortComponentName = function(longname) {
- var short = -1 !== longname.indexOf( '$' )
- ? longname.split( '$' )[1]
- : longname.split( '.' ).pop();
- return short.match( /[A-Z]/g ).join( '' );
- };
-
- var getCaptionsForComponent = function(data) {
- var captions = [];
- for (var key in data[0]) {
- key = key.replace(/.*#/,'');
- if (key != "match" && key!="positionHistory") {
- captions.push(key.replace(/.*#/,''));
- }
- }
- return captions;
- };
-
- var getTokensForComponent = function(data) {
- var tokens = [];
- var previousPosition = 0;
- var index=0;
- for (var i in data) {
- var tokenhash = data[i];
- var positionDifference = tokenhash.position - previousPosition;
- for (var j=positionDifference; j>1; j--) {
- tokens.push({position: tokenhash.position - j+1, blank:true, index:index++});
- }
-
- var token = {position: tokenhash.position, keys:[], index:index++};
-
- for (key in tokenhash) {
- if (key == "match" || key=="positionHistory") {
- //@ todo do something
- } else {
- token.keys.push({name:key, value:tokenhash[key]});
- }
- }
- tokens.push(token);
- previousPosition = tokenhash.position;
- }
- return tokens;
- };
-
- var extractComponents = function(data, result, name) {
- if (data) {
- result[name] = [];
- for (var i = 0; i < data.length; i += 2) {
- var component = {
- name: data[i],
- short: getShortComponentName(data[i]),
- captions: getCaptionsForComponent(data[i + 1]),
- tokens: getTokensForComponent(data[i + 1])
- };
- result[name].push(component);
- }
- }
- };
-
- var processAnalysisData = function(analysis, fieldOrType) {
- var fieldname;
- for (fieldname in analysis[fieldOrType]) {console.log(fieldname);break;}
- var response = {};
- extractComponents(analysis[fieldOrType][fieldname].index, response, "index");
- extractComponents(analysis[fieldOrType][fieldname].query, response, "query");
- return response;
- };
-
- $scope.updateQueryString = function() {
-
- var parts = $scope.fieldOrType.split("=");
- var fieldOrType = parts[0];
- var name = parts[1];
-
- if ($scope.indexText) {
- $location.search("analysis.fieldvalue", $scope.indexText);
- } else if ($location.search()["analysis.fieldvalue"]) {
- $location.search("analysis.fieldvalue", null);
- }
- if ($scope.queryText) {
- $location.search("analysis.query", $scope.queryText);
- } else if ($location.search()["analysis.query"]) {
- $location.search("analysis.query", null);
- }
-
- if (fieldOrType == "fieldname") {
- $location.search("analysis.fieldname", name);
- $location.search("analysis.fieldtype", null);
- } else {
- $location.search("analysis.fieldtype", name);
- $location.search("analysis.fieldname", null);
- }
- $location.search("verbose_output", $scope.verbose ? "1" : "0");
- };
-
- $scope.parseQueryString = function () {
- var params = {};
- var search = $location.search();
-
- if (Object.keys(search).length == 0) {
- return;
- }
- for (var key in search) {
- params[key]=search[key];
- }
- $scope.indexText = search["analysis.fieldvalue"];
- $scope.queryText = search["analysis.query"];
- if (search["analysis.fieldname"]) {
- $scope.fieldOrType = "fieldname=" + search["analysis.fieldname"];
- $scope.schemaBrowserUrl = "field=" + search["analysis.fieldname"];
- } else {
- $scope.fieldOrType = "fieldtype=" + search["analysis.fieldtype"];
- $scope.schemaBrowserUrl = "type=" + search["analysis.fieldtype"];
- }
- if (search["verbose_output"] == undefined) {
- $scope.verbose = true;
- } else {
- $scope.verbose = search["verbose_output"] == "1";
- }
-
- if ($scope.fieldOrType || $scope.indexText || $scope.queryText) {
- params.core = $routeParams.core;
- var parts = $scope.fieldOrType.split("=");
- var fieldOrType = parts[0] == "fieldname" ? "field_names" : "field_types";
-
- Analysis.field(params, function(data) {
- $scope.result = processAnalysisData(data.analysis, fieldOrType);
- });
- }
- };
-
- $scope.changeFieldOrType = function() {
- var parts = $scope.fieldOrType.split("=");
- if (parts[0]=='fieldname') {
- $scope.schemaBrowserUrl = "field=" + parts[1];
- } else {
- $scope.schemaBrowserUrl = "type=" + parts[1];
- }
- };
-
- $scope.toggleVerbose = function() {
- $scope.verbose = !$scope.verbose;
- $scope.updateQueryString();
- };
-
- $scope.refresh();
- }
-);
-
-/***************
-
-function(error) {
- if (error.status == 404) {
- $scope.isHandlerMissing = true;
- } else {
- $scope.analysisError = error.error.msg;
- }
-****/
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+solrAdminApp.controller('AnalysisController',
+ function($scope, $location, $routeParams, Luke, Analysis, Constants) {
+ $scope.resetMenu("analysis", Constants.IS_COLLECTION_PAGE);
+
+ $scope.refresh = function() {
+ Luke.schema({core: $routeParams.core}, function(data) {
+ $scope.fieldsAndTypes = [];
+ for (var field in data.schema.fields) {
+ $scope.fieldsAndTypes.push({
+ group: "Fields",
+ value: "fieldname=" + field,
+ label: field});
+ }
+ for (var type in data.schema.types) {
+ $scope.fieldsAndTypes.push({
+ group: "Types",
+ value: "fieldtype=" + type,
+ label: type});
+ }
+ $scope.core = $routeParams.core;
+ });
+
+ $scope.parseQueryString();
+ // @todo - set defaultSearchField either to context["analysis.fieldname"] or context["analysis.fieldtype"]
+
+ };
+ $scope.verbose = true;
+
+ var getShortComponentName = function(longname) {
+ var short = -1 !== longname.indexOf( '$' )
+ ? longname.split( '$' )[1]
+ : longname.split( '.' ).pop();
+ return short.match( /[A-Z]/g ).join( '' );
+ };
+
+ var getCaptionsForComponent = function(data) {
+ var captions = [];
+ for (var key in data[0]) {
+ key = key.replace(/.*#/,'');
+ if (key != "match" && key!="positionHistory") {
+ captions.push(key.replace(/.*#/,''));
+ }
+ }
+ return captions;
+ };
+
+ var getTokensForComponent = function(data) {
+ var tokens = [];
+ var previousPosition = 0;
+ var index=0;
+ for (var i in data) {
+ var tokenhash = data[i];
+ var positionDifference = tokenhash.position - previousPosition;
+ for (var j=positionDifference; j>1; j--) {
+ tokens.push({position: tokenhash.position - j+1, blank:true, index:index++});
+ }
+
+ var token = {position: tokenhash.position, keys:[], index:index++};
+
+ for (key in tokenhash) {
+ if (key == "match" || key=="positionHistory") {
+ //@ todo do something
+ } else {
+ token.keys.push({name:key, value:tokenhash[key]});
+ }
+ }
+ tokens.push(token);
+ previousPosition = tokenhash.position;
+ }
+ return tokens;
+ };
+
+ var extractComponents = function(data, result, name) {
+ if (data) {
+ result[name] = [];
+ for (var i = 0; i < data.length; i += 2) {
+ var component = {
+ name: data[i],
+ short: getShortComponentName(data[i]),
+ captions: getCaptionsForComponent(data[i + 1]),
+ tokens: getTokensForComponent(data[i + 1])
+ };
+ result[name].push(component);
+ }
+ }
+ };
+
+ var processAnalysisData = function(analysis, fieldOrType) {
+ var fieldname;
+ for (fieldname in analysis[fieldOrType]) {console.log(fieldname);break;}
+ var response = {};
+ extractComponents(analysis[fieldOrType][fieldname].index, response, "index");
+ extractComponents(analysis[fieldOrType][fieldname].query, response, "query");
+ return response;
+ };
+
+ $scope.updateQueryString = function() {
+
+ var parts = $scope.fieldOrType.split("=");
+ var fieldOrType = parts[0];
+ var name = parts[1];
+
+ if ($scope.indexText) {
+ $location.search("analysis.fieldvalue", $scope.indexText);
+ } else if ($location.search()["analysis.fieldvalue"]) {
+ $location.search("analysis.fieldvalue", null);
+ }
+ if ($scope.queryText) {
+ $location.search("analysis.query", $scope.queryText);
+ } else if ($location.search()["analysis.query"]) {
+ $location.search("analysis.query", null);
+ }
+
+ if (fieldOrType == "fieldname") {
+ $location.search("analysis.fieldname", name);
+ $location.search("analysis.fieldtype", null);
+ } else {
+ $location.search("analysis.fieldtype", name);
+ $location.search("analysis.fieldname", null);
+ }
+ $location.search("verbose_output", $scope.verbose ? "1" : "0");
+ };
+
+ $scope.parseQueryString = function () {
+ var params = {};
+ var search = $location.search();
+
+ if (Object.keys(search).length == 0) {
+ return;
+ }
+ for (var key in search) {
+ params[key]=search[key];
+ }
+ $scope.indexText = search["analysis.fieldvalue"];
+ $scope.queryText = search["analysis.query"];
+ if (search["analysis.fieldname"]) {
+ $scope.fieldOrType = "fieldname=" + search["analysis.fieldname"];
+ $scope.schemaBrowserUrl = "field=" + search["analysis.fieldname"];
+ } else {
+ $scope.fieldOrType = "fieldtype=" + search["analysis.fieldtype"];
+ $scope.schemaBrowserUrl = "type=" + search["analysis.fieldtype"];
+ }
+ if (search["verbose_output"] == undefined) {
+ $scope.verbose = true;
+ } else {
+ $scope.verbose = search["verbose_output"] == "1";
+ }
+
+ if ($scope.fieldOrType || $scope.indexText || $scope.queryText) {
+ params.core = $routeParams.core;
+ var parts = $scope.fieldOrType.split("=");
+ var fieldOrType = parts[0] == "fieldname" ? "field_names" : "field_types";
+
+ Analysis.field(params, function(data) {
+ $scope.result = processAnalysisData(data.analysis, fieldOrType);
+ });
+ }
+ };
+
+ $scope.changeFieldOrType = function() {
+ var parts = $scope.fieldOrType.split("=");
+ if (parts[0]=='fieldname') {
+ $scope.schemaBrowserUrl = "field=" + parts[1];
+ } else {
+ $scope.schemaBrowserUrl = "type=" + parts[1];
+ }
+ };
+
+ $scope.toggleVerbose = function() {
+ $scope.verbose = !$scope.verbose;
+ $scope.updateQueryString();
+ };
+
+ $scope.refresh();
+ }
+);
+
+/***************
+
+function(error) {
+ if (error.status == 404) {
+ $scope.isHandlerMissing = true;
+ } else {
+ $scope.analysisError = error.error.msg;
+ }
+****/
Propchange: ofbiz/trunk/plugins/solr/webapp/solr/js/angular/controllers/analysis.js
------------------------------------------------------------------------------
svn:eol-style = native