diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html
index d1098ba0b2..7c76b66929 100644
--- a/scm-webapp/src/main/webapp/index.html
+++ b/scm-webapp/src/main/webapp/index.html
@@ -109,6 +109,7 @@
+
diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.contentpanel.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.contentpanel.js
new file mode 100644
index 0000000000..0305ff0fe9
--- /dev/null
+++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.contentpanel.js
@@ -0,0 +1,105 @@
+/* *
+ * Copyright (c) 2010, Sebastian Sdorra
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of SCM-Manager; nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+Sonia.repository.ContentPanel = Ext.extend(Ext.Panel, {
+
+ repository: null,
+ revision: null,
+ path: null,
+ contentUrl: null,
+
+ initComponent: function(){
+ var name = this.getName(this.path);
+
+ this.contentUrl = restUrl + 'repositories/' + this.repository.id + '/content?path=' + this.path;
+ if ( this.revision ){
+ this.contentUrl += "&revision=" + this.revision;
+ }
+
+ var bottomBar = [this.path];
+ this.appendRepositoryProperties(bottomBar);
+
+ var config = {
+ title: name,
+ tbar: [{
+ text: 'Default'
+ },{
+ text: 'Raw',
+ handler: this.downlaodFile,
+ scope: this
+ //},{
+ // text: 'Blame'
+ }],
+ bbar: bottomBar,
+ items: [{
+ xtype: 'syntaxHighlighterPanel',
+ syntax: this.getExtension(this.path),
+ contentUrl: this.contentUrl
+ }]
+ }
+
+ Ext.apply(this, Ext.apply(this.initialConfig, config));
+ Sonia.repository.ContentPanel.superclass.initComponent.apply(this, arguments);
+ },
+
+ downlaodFile: function(){
+ window.open(this.contentUrl);
+ },
+
+ appendRepositoryProperties: function(bar){
+ bar.push('->',this.repository.name);
+ if ( this.revision != null ){
+ bar.push(': ', this.revision);
+ }
+ },
+
+ getName: function(path){
+ var name = path;
+ var index = path.lastIndexOf('/');
+ if ( index > 0 ){
+ name = path.substr(index +1);
+ }
+ return name;
+ },
+
+ getExtension: function(path){
+ var ext = null;
+ var index = path.lastIndexOf('.');
+ if ( index > 0 ){
+ ext = path.substr(index + 1, path.length);
+ }
+ return ext;
+ }
+
+});
+
+
+Ext.reg('contentPanel', Sonia.repository.ContentPanel);
\ No newline at end of file
diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js
index b85662e062..d715580d44 100644
--- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js
+++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.repositorybrowser.js
@@ -209,24 +209,6 @@ Sonia.repository.RepositoryBrowser = Ext.extend(Ext.grid.GridPanel, {
}
},
- getName: function(path){
- var name = path;
- var index = path.lastIndexOf('/');
- if ( index > 0 ){
- name = path.substr(index +1);
- }
- return name
- },
-
- getExtension: function(path){
- var ext = null;
- var index = path.lastIndexOf('.');
- if ( index > 0 ){
- ext = path.substr(index + 1, path.length);
- }
- return ext;
- },
-
appendRepositoryProperties: function(bar){
bar.push('->',this.repository.name);
if ( this.revision != null ){
@@ -239,25 +221,14 @@ Sonia.repository.RepositoryBrowser = Ext.extend(Ext.grid.GridPanel, {
console.debug( 'open file: ' + path );
}
- var ext = this.getExtension( path );
-
- var url = restUrl + 'repositories/' + this.repository.id + '/content?path=' + path;
- if ( this.revision ){
- url += "&revision=" + this.revision;
- }
-
- var bar = [path];
- this.appendRepositoryProperties(bar);
-
main.addTab({
id: this.repository.id + "-b-" + path,
- contentUrl: url,
- xtype: 'syntaxHighlighterPanel',
- title: this.getName(path),
+ path: path,
+ revision: this.revision,
+ repository: this.repository,
+ xtype: 'contentPanel',
closable: true,
- autoScroll: true,
- syntax: ext,
- bbar: bar
+ autoScroll: true
});
},