/* | |
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 contentTypeMap = { xml : 'text/xml', html : 'text/html', js : 'text/javascript', json : 'application/json', 'css' : 'text/css' }; | |
var languages = {js: "javascript", xml:"xml", xsl:"xml", vm: "xml", html: "xml", json: "json", css: "css"}; | |
solrAdminApp.controller('FilesController', | |
function($scope, $rootScope, $routeParams, $location, Files, Constants) { | |
$scope.resetMenu("files", Constants.IS_COLLECTION_PAGE); | |
$scope.file = $location.search().file; | |
$scope.content = null; | |
$scope.baseurl = $location.protocol()+ "://" + $location.host() + ":" + $location.port(); | |
$scope.refresh = function () { | |
var process = function (path, tree) { | |
var params = {core: $routeParams.core}; | |
if (path.slice(-1) == '/') { | |
params.file = path.slice(0, -1); | |
} else if (path!='') { | |
params.file = path; | |
} | |
Files.list(params, function (data) { | |
var filenames = Object.keys(data.files); | |
filenames.sort(); | |
for (var i in filenames) { | |
var file = filenames[i]; | |
var filedata = data.files[file]; | |
var state = undefined; | |
var children = undefined; | |
if (filedata.directory) { | |
file = file + "/"; | |
if ($scope.file && $scope.file.indexOf(path + file) == 0) { | |
state = "open"; | |
} else { | |
state = "closed"; | |
} | |
children = []; | |
process(path + file, children); | |
} | |
tree.push({ | |
data: { | |
title: file, | |
attr: { id: path + file} | |
}, | |
children: children, | |
state: state | |
}); | |
} | |
}); | |
} | |
$scope.tree = []; | |
process("", $scope.tree); | |
if ($scope.file && $scope.file != '' && $scope.file.split('').pop()!='/') { | |
var extension; | |
if ($scope.file == "managed-schema") { | |
extension = contentTypeMap['xml']; | |
} else { | |
extension = $scope.file.match( /\.(\w+)$/)[1] || ''; | |
} | |
var contentType = (contentTypeMap[extension] || 'text/plain' ) + ';charset=utf-8'; | |
Files.get({core: $routeParams.core, file: $scope.file, contentType: contentType}, function(data) { | |
$scope.content = data.data; | |
$scope.url = $scope.baseurl + data.config.url + "?" + $.param(data.config.params); | |
if (contentType.indexOf("text/plain") && (data.data.indexOf("<?xml")>=0) || data.data.indexOf("<!--")>=0) { | |
$scope.lang = "xml"; | |
} else { | |
$scope.lang = languages[extension] || "txt"; | |
} | |
}); | |
} | |
}; | |
$scope.showTreeLink = function(data) { | |
var file = data.args[0].id; | |
$location.search({file:file}); | |
}; | |
$scope.refresh(); | |
}); |