Initial prototype commit
113
app.py
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
import sqlite3
|
||||||
|
import base64
|
||||||
|
from flask import Flask, request, send_from_directory
|
||||||
|
from flask_restful import Resource, Api
|
||||||
|
from flask_cors import CORS
|
||||||
|
|
||||||
|
def dict_factory(cursor, row):
|
||||||
|
d = {}
|
||||||
|
for idx, col in enumerate(cursor.description):
|
||||||
|
if isinstance(row[idx], buffer):
|
||||||
|
d[col[0]] = base64.b64encode(row[idx])
|
||||||
|
else:
|
||||||
|
d[col[0]] = row[idx]
|
||||||
|
|
||||||
|
return d
|
||||||
|
|
||||||
|
conn = sqlite3.connect('demo.ncdb')
|
||||||
|
conn.row_factory = dict_factory
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
CORS(app)
|
||||||
|
|
||||||
|
@app.route('/frontend/<path:path>')
|
||||||
|
def send_js(path):
|
||||||
|
return send_from_directory('frontend', path)
|
||||||
|
|
||||||
|
api = Api(app)
|
||||||
|
|
||||||
|
def insert(tablename, rec):
|
||||||
|
keys = ','.join(rec.keys())
|
||||||
|
question_marks = ','.join(list('?'*len(rec)))
|
||||||
|
values = tuple(rec.values())
|
||||||
|
execute('INSERT INTO '+tablename+' ('+keys+') VALUES ('+question_marks+')', values)
|
||||||
|
|
||||||
|
def delete(tablename, note_id):
|
||||||
|
execute("DELETE FROM " + tablename + " WHERE note_id = ?", [note_id])
|
||||||
|
|
||||||
|
def execute(sql, params=[]):
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
|
||||||
|
def getResults(sql, params=[]):
|
||||||
|
cursor = conn.cursor()
|
||||||
|
query = cursor.execute(sql, params)
|
||||||
|
return query.fetchall()
|
||||||
|
|
||||||
|
def getSingleResult(sql, params=()):
|
||||||
|
cursor = conn.cursor()
|
||||||
|
query = cursor.execute(sql, params)
|
||||||
|
return query.fetchone()
|
||||||
|
|
||||||
|
class Query(Resource):
|
||||||
|
def get(self):
|
||||||
|
sql = request.args.get('sql')
|
||||||
|
|
||||||
|
return getResults(sql)
|
||||||
|
|
||||||
|
api.add_resource(Query, '/query')
|
||||||
|
|
||||||
|
class Notes(Resource):
|
||||||
|
def get(self, note_id):
|
||||||
|
return {
|
||||||
|
'detail': getSingleResult("select * from notes where note_id = ?", [note_id]),
|
||||||
|
'formatting': getResults("select * from formatting where note_id = ? order by note_offset", [note_id]),
|
||||||
|
'links': getResults("select * from links where note_id = ? order by note_offset", [note_id]),
|
||||||
|
'images': getResults("select * from images where note_id = ? order by note_offset", [note_id])
|
||||||
|
}
|
||||||
|
|
||||||
|
def put(self, note_id):
|
||||||
|
note = request.get_json(force=True)
|
||||||
|
|
||||||
|
execute("update notes set note_text = ?, note_title = ? where note_id = ?", [note['detail']['note_text'], note['detail']['note_title'], note_id])
|
||||||
|
|
||||||
|
delete("formatting", note_id)
|
||||||
|
|
||||||
|
for fmt in note['formatting']:
|
||||||
|
insert("formatting", fmt)
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
return {}
|
||||||
|
|
||||||
|
api.add_resource(Notes, '/notes/<string:note_id>')
|
||||||
|
|
||||||
|
class Tree(Resource):
|
||||||
|
def get(self):
|
||||||
|
notes = getResults("select notes_tree.*, notes.note_title from notes_tree join notes on notes.note_id = notes_tree.note_id order by note_pid, note_pos")
|
||||||
|
|
||||||
|
rootNotes = []
|
||||||
|
notesMap = {}
|
||||||
|
|
||||||
|
for note in notes:
|
||||||
|
note['children'] = []
|
||||||
|
|
||||||
|
if not note['note_pid']:
|
||||||
|
rootNotes.append(note)
|
||||||
|
|
||||||
|
notesMap[note['note_id']] = note
|
||||||
|
|
||||||
|
for note in notes:
|
||||||
|
if note['note_pid'] != "":
|
||||||
|
parent = notesMap[note['note_pid']]
|
||||||
|
|
||||||
|
parent['children'].append(note)
|
||||||
|
parent['folder'] = True
|
||||||
|
|
||||||
|
return rootNotes
|
||||||
|
|
||||||
|
api.add_resource(Tree, '/tree')
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(host='0.0.0.0')
|
||||||
7
frontend/.babelrc
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
["latest", {
|
||||||
|
"es2015": { "modules": false }
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}
|
||||||
5
frontend/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.DS_Store
|
||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
18
frontend/README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# frontend
|
||||||
|
|
||||||
|
> A Vue.js project
|
||||||
|
|
||||||
|
## Build Setup
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
# install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# serve with hot reload at localhost:8080
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# build for production with minification
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
For detailed explanation on how things work, consult the [docs for vue-loader](http://vuejs.github.io/vue-loader).
|
||||||
286
frontend/index.html
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>frontend</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="top" style="text-align: center;">
|
||||||
|
|
||||||
|
<span id="top-message"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-left: auto; margin-right: auto; width: 1000px">
|
||||||
|
<div id="tree" style="width: 200px; float: left;">
|
||||||
|
<ul id="treeData" style="display: none;">
|
||||||
|
<li id="1">Node 1
|
||||||
|
<li id="2" class="folder">Folder 2
|
||||||
|
<ul>
|
||||||
|
<li id="3">Node 2.1
|
||||||
|
<li id="4">Node 2.2
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="width: 750px; float: left; margin-left: 20px;">
|
||||||
|
<div>
|
||||||
|
<input type="text" value="" id="noteTitle" style="font-size: x-large; border: 0;">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="noteDetail">
|
||||||
|
Nothing here right now!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="js/jquery.js"></script>
|
||||||
|
<script src="js/jqueryui/jquery-ui.js"></script>
|
||||||
|
<!-- Include Fancytree skin and library -->
|
||||||
|
<link href="js/fancytree/skin-win8/ui.fancytree.css" rel="stylesheet">
|
||||||
|
<script src="js/fancytree/jquery.fancytree-all.js"></script>
|
||||||
|
|
||||||
|
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">
|
||||||
|
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script>
|
||||||
|
|
||||||
|
<link href="js/summernote/summernote.css" rel="stylesheet">
|
||||||
|
<script src="js/summernote/summernote.js"></script>
|
||||||
|
|
||||||
|
<script src="js/jquery.hotkeys.js"></script>
|
||||||
|
<script src="js/jquery.fancytree.hotkeys.js"></script>
|
||||||
|
|
||||||
|
<!-- Initialize the tree when page is loaded -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
let tags = {
|
||||||
|
1: "<b>",
|
||||||
|
2: "</b>",
|
||||||
|
3: "<i>",
|
||||||
|
4: "</i>",
|
||||||
|
5: "<u>",
|
||||||
|
6: "</u>",
|
||||||
|
9: "<s>",
|
||||||
|
10: "</s>"
|
||||||
|
};
|
||||||
|
|
||||||
|
function message(str) {
|
||||||
|
$("#top-message").show();
|
||||||
|
$("#top-message").html(str);
|
||||||
|
$("#top-message").fadeOut(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function noteChanged() {
|
||||||
|
message("Change!");
|
||||||
|
|
||||||
|
var note = globalNote;
|
||||||
|
|
||||||
|
let contents = $('#noteDetail').summernote('code');
|
||||||
|
|
||||||
|
let title = $('#noteTitle').val();
|
||||||
|
|
||||||
|
$("#tree").fancytree('getNodeByKey', note.detail.note_id).setTitle(title);
|
||||||
|
|
||||||
|
console.log('orig:' + contents);
|
||||||
|
|
||||||
|
contents = contents.replace(/<br \/>/g, '\n');
|
||||||
|
contents = contents.replace(/<br>/g, '\n');
|
||||||
|
contents = contents.replace(/<\/p>/g, '\n');
|
||||||
|
contents = contents.replace(/<p>/g, '');
|
||||||
|
|
||||||
|
console.log('pre-processed:' + contents);
|
||||||
|
|
||||||
|
var index = 0;
|
||||||
|
|
||||||
|
note.formatting = [];
|
||||||
|
note.links = [];
|
||||||
|
note.images = [];
|
||||||
|
|
||||||
|
while (index < contents.length) {
|
||||||
|
var found = false;
|
||||||
|
|
||||||
|
if (contents[index] == '<') {
|
||||||
|
for (tagId in tags) {
|
||||||
|
let tag = tags[tagId];
|
||||||
|
|
||||||
|
if (contents.substr(index, tag.length) == tag) {
|
||||||
|
found = true;
|
||||||
|
// if (tagMap.get(index) == undefined) {
|
||||||
|
// tagMap.get(index) = [];
|
||||||
|
// }
|
||||||
|
|
||||||
|
// tagMap.get(index).push(key);
|
||||||
|
|
||||||
|
note.formatting.push({
|
||||||
|
note_id: note.detail.note_id,
|
||||||
|
note_offset: index,
|
||||||
|
fmt_tag: tagId,
|
||||||
|
fmt_color: '',
|
||||||
|
fmt_font: '',
|
||||||
|
fmt_value: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
contents = contents.substr(0, index) + contents.substr(index + tag.length);
|
||||||
|
|
||||||
|
console.log(contents);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
note.detail.note_text = contents;
|
||||||
|
note.detail.note_title = title;
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: 'http://localhost:5000/notes/' + note.detail.note_id,
|
||||||
|
type: 'PUT',
|
||||||
|
data: JSON.stringify(note),
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function(result) {
|
||||||
|
message("Saved!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$("#noteTitle").on('input', function() {
|
||||||
|
noteChanged();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#noteDetail').summernote({
|
||||||
|
airMode: true,
|
||||||
|
callbacks: {
|
||||||
|
onChange: noteChanged
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(function(){
|
||||||
|
$.get('http://localhost:5000/tree').then(notes => {
|
||||||
|
function copyTitle(notes) {
|
||||||
|
for (key in notes) {
|
||||||
|
var note = notes[key];
|
||||||
|
|
||||||
|
note.title = note.note_title;
|
||||||
|
note.key = note.note_id;
|
||||||
|
|
||||||
|
if (note.children && note.children.length > 0) {
|
||||||
|
copyTitle(note.children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
copyTitle(notes);
|
||||||
|
|
||||||
|
$("#tree").fancytree({
|
||||||
|
extensions: ["hotkeys"],
|
||||||
|
source: notes,
|
||||||
|
activate: function(event, data){
|
||||||
|
var node = data.node.data;
|
||||||
|
var noteId = node.note_id;
|
||||||
|
|
||||||
|
loadNote(noteId);
|
||||||
|
},
|
||||||
|
hotkeys: {
|
||||||
|
keydown: {
|
||||||
|
"insert": function(node) {
|
||||||
|
node.appendSibling({
|
||||||
|
"title": "New!"
|
||||||
|
}).setActive(true);
|
||||||
|
},
|
||||||
|
"shift+insert": function(node) {
|
||||||
|
node.addChildren({
|
||||||
|
"title": "New!"
|
||||||
|
}).setActive(true);
|
||||||
|
},
|
||||||
|
"del": function(node) {
|
||||||
|
node.remove();
|
||||||
|
},
|
||||||
|
"shift+left": function(node) {
|
||||||
|
if (node.getParent() != null) {
|
||||||
|
node.moveTo(node.getParent(), 'after');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shift+right": function(node) {
|
||||||
|
let prevSibling = node.getPrevSibling();
|
||||||
|
|
||||||
|
if (prevSibling != null) {
|
||||||
|
node.moveTo(prevSibling);
|
||||||
|
|
||||||
|
prevSibling.setExpanded(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var globalNote;
|
||||||
|
|
||||||
|
function loadNote(noteId) {
|
||||||
|
$.get('http://localhost:5000/notes/' + noteId).then(function(note) {
|
||||||
|
globalNote = note;
|
||||||
|
|
||||||
|
var noteText = note.detail.note_text;
|
||||||
|
|
||||||
|
$("#noteTitle").val(note.detail.note_title);
|
||||||
|
|
||||||
|
var formatting = note.formatting;
|
||||||
|
let links = note.links;
|
||||||
|
let images = note.images;
|
||||||
|
|
||||||
|
var offset = 0;
|
||||||
|
var lastTag = null;
|
||||||
|
|
||||||
|
function inject(target, injected, position) {
|
||||||
|
offset += injected.length;
|
||||||
|
|
||||||
|
console.log("injecting " + injected);
|
||||||
|
|
||||||
|
return noteText.substr(0, position) + injected + noteText.substr(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let fmt of formatting) {
|
||||||
|
if (tags[fmt.fmt_tag]) {
|
||||||
|
noteText = inject(noteText, tags[fmt.fmt_tag], fmt.note_offset + offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(noteText);
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = 0;
|
||||||
|
|
||||||
|
for (let link of links) {
|
||||||
|
let linkHtml = '<a href="' + link.target_url + '">' + link.lnk_text + '</a>';
|
||||||
|
|
||||||
|
noteText = noteText.substr(0, link.note_offset + offset) + noteText.substr(link.note_offset + offset + link.lnk_text.length);
|
||||||
|
|
||||||
|
noteText = inject(noteText, linkHtml, link.note_offset + offset);
|
||||||
|
|
||||||
|
offset -= link.lnk_text.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = 0;
|
||||||
|
|
||||||
|
for (let image of images) {
|
||||||
|
let imgHtml = '<img alt="Embedded Image" src="data:image/jpg;base64,' + image.image_data + '" />';
|
||||||
|
|
||||||
|
noteText = inject(noteText, imgHtml, image.note_offset + offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
noteText = noteText.replace(/(?:\r\n|\r|\n)/g, '<br />');;
|
||||||
|
|
||||||
|
$('#noteDetail').summernote('code', noteText);
|
||||||
|
|
||||||
|
//$("#noteDetail").html(noteText);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script src="src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
21
frontend/js/fancytree/LICENSE.txt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
Copyright 2008-2017 Martin Wendt,
|
||||||
|
http://wwWendt.de/
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
9108
frontend/js/fancytree/jquery.fancytree-all.js
Normal file
50
frontend/js/fancytree/jquery.fancytree-all.min.js
vendored
Normal file
5128
frontend/js/fancytree/jquery.fancytree.js
Normal file
14
frontend/js/fancytree/jquery.fancytree.min.js
vendored
Normal file
469
frontend/js/fancytree/skin-awesome/ui.fancytree.css
Normal file
@@ -0,0 +1,469 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "awesome" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8P///6Wlpf/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP4ALAAAAAAQABAAAAgpAP0JFHhvoMGDCBMiLKiwocOBDB9KXDixosGIFidizPhwI8eGHj8KDAgAOw==");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
margin-top: 0px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 1em;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 1em;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 0.5em;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 2em;
|
||||||
|
position: absolute;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 4em;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0.3em 0 0 1em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
53
frontend/js/fancytree/skin-awesome/ui.fancytree.less
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "awesome" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Borders have NO radius and NO gradients are used!
|
||||||
|
|
||||||
|
// both:
|
||||||
|
// unselected background: white
|
||||||
|
// hover bar (unselected, inactive): #E5F3FB (border: #70C0E7) 'very light blue'
|
||||||
|
// active node: #CBE8F6 (border: #26A0DA) 'light blue'
|
||||||
|
// active node with hover: wie active node
|
||||||
|
|
||||||
|
// Tree view:
|
||||||
|
// active node, tree inactive: #F7F7F7 (border: #DEDEDE) 'light gray, selected, but tree not active'
|
||||||
|
|
||||||
|
// List view:
|
||||||
|
// selected bar: --> active bar
|
||||||
|
// focus bar: transparent(white) + border 1px solid #3399FF ()
|
||||||
|
|
||||||
|
// table left/right border: #EDEDED 'light gray'
|
||||||
|
|
||||||
|
// local vars
|
||||||
|
@fancy-my-icon-size: 16px;
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: false; // false: suppress all background images (i.e. icons)
|
||||||
|
@fancy-loading-url: none;
|
||||||
|
|
||||||
|
@fancy-icon-width: 1em;
|
||||||
|
@fancy-icon-height: 1em;
|
||||||
|
@fancy-line-height: 1em;
|
||||||
|
@fancy-icon-spacing: 0.5em;
|
||||||
|
|
||||||
|
ul.fancytree-container ul
|
||||||
|
{
|
||||||
|
padding: 0.3em 0 0 1em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-awesome/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-awesome/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
frontend/js/fancytree/skin-awesome/vline.gif
Normal file
|
After Width: | Height: | Size: 844 B |
577
frontend/js/fancytree/skin-bootstrap-n/ui.fancytree.css
Normal file
@@ -0,0 +1,577 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "bootstrap" skin (highlighting the node span instead of title-only).
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8P///6Wlpf/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP4ALAAAAAAQABAAAAgpAP0JFHhvoMGDCBMiLKiwocOBDB9KXDixosGIFidizPhwI8eGHj8KDAgAOw==");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
margin-top: 0px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 1em;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 1em;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 0.5em;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 2em;
|
||||||
|
position: absolute;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 4em;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
/* Prevent focus frame */
|
||||||
|
.fancytree-container:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.fancytree-container span.fancytree-statusnode-error span.fancytree-expander {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/* Helper to allow spinning loader icon with bootstrap */
|
||||||
|
.glyphicon-spin {
|
||||||
|
-webkit-animation: spin 1000ms infinite linear;
|
||||||
|
animation: spin 1000ms infinite linear;
|
||||||
|
}
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.fancytree-node {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-selected {
|
||||||
|
background-color: #80c780;
|
||||||
|
border-color: #80c780;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #80c780;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active {
|
||||||
|
background-color: #6aa3d5;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-treefocus span.fancytree-node:hover {
|
||||||
|
background-color: #e9f2f9;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused {
|
||||||
|
border-color: #428bca;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active {
|
||||||
|
background-color: #428bca;
|
||||||
|
border-color: #428bca;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody tr td {
|
||||||
|
border: 1px solid #eeeeee;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
background-color: #80c780;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected span.fancytree-node {
|
||||||
|
background-color: #80c780;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #80c780;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active {
|
||||||
|
background-color: #6aa3d5;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active span.fancytree-node {
|
||||||
|
background-color: #6aa3d5;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr:hover {
|
||||||
|
background-color: #e9f2f9;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted #428bca;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected span.fancytree-node {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active {
|
||||||
|
background-color: #428bca;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active span.fancytree-node {
|
||||||
|
background-color: #428bca;
|
||||||
|
}
|
||||||
204
frontend/js/fancytree/skin-bootstrap-n/ui.fancytree.less
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "bootstrap" skin (highlighting the node span instead of title-only).
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
// local vars
|
||||||
|
@fancy-my-icon-size: 16px;
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: false; // false: suppress all background images (i.e. icons)
|
||||||
|
@fancy-loading-url: none;
|
||||||
|
|
||||||
|
@fancy-icon-width: 1em;
|
||||||
|
@fancy-icon-height: 1em;
|
||||||
|
@fancy-line-height: 1em;
|
||||||
|
@fancy-icon-spacing: 0.5em;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
// @fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
/* Prevent focus frame */
|
||||||
|
.fancytree-container:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error status node
|
||||||
|
.fancytree-container span.fancytree-statusnode-error span.fancytree-expander {
|
||||||
|
color: @fancy-font-error-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Helper to allow spinning loader icon with bootstrap */
|
||||||
|
.glyphicon-spin {
|
||||||
|
-webkit-animation: spin 1000ms infinite linear;
|
||||||
|
animation: spin 1000ms infinite linear;
|
||||||
|
}
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/////
|
||||||
|
// Original bootstrap colors (http://getbootstrap.com/css/#responsive-utilities)
|
||||||
|
@gray-darker: lighten(#000, 13.5%); // #222
|
||||||
|
@gray-dark: lighten(#000, 20%); // #333
|
||||||
|
@gray: lighten(#000, 33.5%); // #555
|
||||||
|
@gray-light: lighten(#000, 60%); // #999
|
||||||
|
@gray-lighter: lighten(#000, 93.5%); // #eee
|
||||||
|
|
||||||
|
@brand-primary: #428bca; // blue
|
||||||
|
@brand-success: #5cb85c; // green
|
||||||
|
@brand-info: #5bc0de; // light blue
|
||||||
|
@brand-warning: #f0ad4e; // orange
|
||||||
|
@brand-danger: #d9534f; // red
|
||||||
|
|
||||||
|
@border-radius-base: 4px;
|
||||||
|
@border-radius-large: 6px;
|
||||||
|
@border-radius-small: 3px;
|
||||||
|
/////////////
|
||||||
|
|
||||||
|
span.fancytree-node {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
border-radius: @border-radius-small;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
border-radius: @border-radius-small;
|
||||||
|
}
|
||||||
|
// Inactive tree:
|
||||||
|
span.fancytree-node.fancytree-selected { // selected nodes inside inactive tree
|
||||||
|
background-color: lighten(@brand-success, 10%);
|
||||||
|
border-color: lighten(@brand-success, 10%);
|
||||||
|
span.fancytree-title {
|
||||||
|
background-color: lighten(@brand-success, 10%); // green title, even when active
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active { // active nodes inside inactive tree
|
||||||
|
background-color: lighten(@brand-primary, 10%);
|
||||||
|
}
|
||||||
|
// Active tree:
|
||||||
|
.fancytree-container.fancytree-treefocus {
|
||||||
|
span.fancytree-node:hover {
|
||||||
|
background-color: lighten(@brand-primary, 42%);
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-focused {
|
||||||
|
border-color: @brand-primary;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-selected {
|
||||||
|
background-color: @brand-success;
|
||||||
|
span.fancytree-title {
|
||||||
|
background-color: @brand-success; // green title, even when active
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active {
|
||||||
|
background-color: @brand-primary;
|
||||||
|
border-color: @brand-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody {
|
||||||
|
tr td {
|
||||||
|
border: 1px solid @gray-lighter;
|
||||||
|
}
|
||||||
|
// span.fancytree-node,
|
||||||
|
// span.fancytree-node:hover { // undo standard tree css
|
||||||
|
// border: none;
|
||||||
|
// background: none;
|
||||||
|
// }
|
||||||
|
// // Title get's a white background, when hovered. Undo standard node formatting
|
||||||
|
// span.fancytree-title:hover {
|
||||||
|
// border: none;
|
||||||
|
// background: inherit;
|
||||||
|
// background: transparent;
|
||||||
|
// background: none;
|
||||||
|
// filter: none;
|
||||||
|
// }
|
||||||
|
// dimmed, if inside inactive tree
|
||||||
|
tr.fancytree-selected {
|
||||||
|
background-color: lighten(@brand-success, 10%);
|
||||||
|
span.fancytree-node {
|
||||||
|
background-color: lighten(@brand-success, 10%);
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
background-color: lighten(@brand-success, 10%); // green title, even when active
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tr.fancytree-active { // dimmed, if inside inactive tree
|
||||||
|
background-color: lighten(@brand-primary, 10%);
|
||||||
|
span.fancytree-node {
|
||||||
|
background-color: lighten(@brand-primary, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody {
|
||||||
|
tr:hover {
|
||||||
|
background-color: lighten(@brand-primary, 42%);
|
||||||
|
// outline: 1px solid @brand-primary;
|
||||||
|
}
|
||||||
|
tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted @brand-primary;
|
||||||
|
}
|
||||||
|
tr.fancytree-active:hover,
|
||||||
|
tr.fancytree-selected:hover {
|
||||||
|
// background-color: #CBE8F6;
|
||||||
|
// outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
tr.fancytree-selected {
|
||||||
|
background-color: @brand-success;
|
||||||
|
span.fancytree-node {
|
||||||
|
background-color: @brand-success;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
background-color: @brand-success; // green title, even when active
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tr.fancytree-active {
|
||||||
|
background-color: @brand-primary;
|
||||||
|
span.fancytree-node {
|
||||||
|
background-color: @brand-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-bootstrap-n/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-bootstrap-n/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
frontend/js/fancytree/skin-bootstrap-n/vline.gif
Normal file
|
After Width: | Height: | Size: 844 B |
637
frontend/js/fancytree/skin-bootstrap/ui.fancytree.css
Normal file
@@ -0,0 +1,637 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "bootstrap" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8P///6Wlpf/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP4ALAAAAAAQABAAAAgpAP0JFHhvoMGDCBMiLKiwocOBDB9KXDixosGIFidizPhwI8eGHj8KDAgAOw==");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
margin-top: 2px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 0px;
|
||||||
|
min-height: 1em;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: #333333;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 1em;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 0.5em;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-ms-border-radius: 3px;
|
||||||
|
-o-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: #d9534f;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 2em;
|
||||||
|
position: absolute;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 4em;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0em 0em;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: #333333;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: #333333;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Plain tree
|
||||||
|
* Modifier classes on <ul> container:
|
||||||
|
* table-hover : Enable a light mouse hover effect
|
||||||
|
* fancytree-colorize-selected: Give selected (checked) rows a color
|
||||||
|
*/
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
/* Prevent focus frame */
|
||||||
|
.fancytree-container:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.fancytree-container .fancytree-active span.fancytree-title input,
|
||||||
|
.fancytree-container.fancytree-colorize-selected .fancytree-selected span.fancytree-title input {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
.fancytree-container span.fancytree-statusnode-error span.fancytree-expander {
|
||||||
|
color: #d9534f;
|
||||||
|
}
|
||||||
|
/* Helper to allow spinning loader icon with bootstrap */
|
||||||
|
.glyphicon-spin {
|
||||||
|
-webkit-animation: spin 1000ms infinite linear;
|
||||||
|
animation: spin 1000ms infinite linear;
|
||||||
|
}
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject,
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-title {
|
||||||
|
color: #d9534f;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-drag-source {
|
||||||
|
background-color: #5bc0de !important;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-drop-target.fancytree-drop-reject span.fancytree.title {
|
||||||
|
background-color: #d9534f !important;
|
||||||
|
}
|
||||||
|
span.fancytree-expander {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.fancytree-expanded span.fancytree-expander {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
span.fancytree-node span.fancytree-expander:hover {
|
||||||
|
color: cyan;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected span.fancytree-node.fancytree-selected,
|
||||||
|
.fancytree-plain.fancytree-colorize-selected span.fancytree-node.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #80c780;
|
||||||
|
border-color: #80c780;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected span.fancytree-node.fancytree-selected:hover span.fancytree-title {
|
||||||
|
background-color: #6ec06e;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected span.fancytree-node.fancytree-active.fancytree-selected span.fancytree-title {
|
||||||
|
color: #80c780;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected.fancytree-treefocus span.fancytree-title:hover {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected.fancytree-treefocus span.fancytree-node.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected.fancytree-treefocus span.fancytree-node.fancytree-selected:hover span.fancytree-title {
|
||||||
|
background-color: #4cae4c;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-colorize-selected.fancytree-treefocus span.fancytree-node.fancytree-active.fancytree-selected span.fancytree-title {
|
||||||
|
color: #5cb85c;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container span.fancytree-node {
|
||||||
|
margin-top: 2px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container span.fancytree-title {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 3px;
|
||||||
|
outline-radius: 3px;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container span.fancytree-title:hover {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container span.fancytree-node.fancytree-active span.fancytree-title {
|
||||||
|
background-color: #5094ce;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container span.fancytree-node.fancytree-active:hover span.fancytree-title {
|
||||||
|
background-color: #3c87c8;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-ext-wide span.fancytree-node.fancytree-active {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused span.fancytree-title {
|
||||||
|
border-color: #337ab7;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active span.fancytree-title {
|
||||||
|
background-color: #337ab7;
|
||||||
|
border-color: #337ab7;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active:hover span.fancytree-title {
|
||||||
|
background-color: #2e6da4;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
* Modifier classes on <table>:
|
||||||
|
* table-hover : Enable a light mouse hover effect
|
||||||
|
* fancytree-colorize-selected: Give selected (checked) rows a color
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table > tbody > tr > td span.fancytree-title {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected > tbody > tr.fancytree-selected > td {
|
||||||
|
background-color: #80c780;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected > tbody > tr.fancytree-selected > td,
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected > tbody > tr.fancytree-selected > td span.fancytree-title {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected.fancytree-treefocus > tbody > tr.fancytree-selected > td {
|
||||||
|
background-color: #5cb85c;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected.table-hover > tbody > tr.fancytree-selected:hover > td {
|
||||||
|
background-color: #6ec06e;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected.fancytree-treefocus.table-hover > tbody > tr.fancytree-selected:hover > td {
|
||||||
|
background-color: #4cae4c;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected.fancytree-treefocus.table-hover > tbody > tr.fancytree-selected.fancytree-active:hover > td,
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected.table-hover > tbody > tr.fancytree-selected.fancytree-active:hover > td {
|
||||||
|
background-color: #2e6da4;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-colorize-selected > tbody > tr.fancytree-active.fancytree-selected {
|
||||||
|
outline-width: 2px;
|
||||||
|
outline-offset: -2px;
|
||||||
|
outline-style: solid;
|
||||||
|
outline-color: #80c780;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-container > tbody > tr.fancytree-active > td {
|
||||||
|
background-color: #5094ce;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-container > tbody > tr.fancytree-active > td,
|
||||||
|
table.fancytree-ext-table.fancytree-container > tbody > tr.fancytree-active > td span.fancytree-title {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus.fancytree-container > tbody > tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted #000;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus.fancytree-container > tbody > tr.fancytree-active > td {
|
||||||
|
background-color: #337ab7;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus.fancytree-container.table-hover > tbody > tr.fancytree-active:hover > td {
|
||||||
|
background-color: #2e6da4;
|
||||||
|
}
|
||||||
373
frontend/js/fancytree/skin-bootstrap/ui.fancytree.less
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "bootstrap" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
// local vars
|
||||||
|
// @fancy-my-icon-size: 16px;
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Original bootstrap colors
|
||||||
|
// See http://getbootstrap.com/css/#less-variables-colors and
|
||||||
|
// https://github.com/twbs/bootstrap/blob/master/less/variables.less
|
||||||
|
@gray-base: #000;
|
||||||
|
@gray-darker: lighten(@gray-base, 13.5%); // #222
|
||||||
|
@gray-dark: lighten(@gray-base, 20%); // #333
|
||||||
|
@gray: lighten(@gray-base, 33.5%); // #555
|
||||||
|
@gray-light: lighten(@gray-base, 46.7%); // #777
|
||||||
|
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
|
||||||
|
|
||||||
|
@brand-primary: darken(#428bca, 6.5%); // blue, #337ab7
|
||||||
|
@brand-success: #5cb85c; // green
|
||||||
|
@brand-info: #5bc0de; // light blue
|
||||||
|
@brand-warning: #f0ad4e; // orange
|
||||||
|
@brand-danger: #d9534f; // red
|
||||||
|
|
||||||
|
@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
@font-family-serif: Georgia, "Times New Roman", Times, serif;
|
||||||
|
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
|
||||||
|
@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||||
|
@font-family-base: @font-family-sans-serif;
|
||||||
|
|
||||||
|
@font-size-base: 14px;
|
||||||
|
@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
|
||||||
|
@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
|
||||||
|
|
||||||
|
@border-radius-base: 4px;
|
||||||
|
@border-radius-large: 6px;
|
||||||
|
@border-radius-small: 3px;
|
||||||
|
|
||||||
|
@text-color: @gray-dark;
|
||||||
|
//** Default background color used for all tables.
|
||||||
|
@table-bg: transparent;
|
||||||
|
//** Background color used for `.table-striped`.
|
||||||
|
@table-bg-accent: #f9f9f9;
|
||||||
|
//** Background color used for `.table-hover`.
|
||||||
|
@table-bg-hover: #f5f5f5;
|
||||||
|
@table-bg-active: @table-bg-hover;
|
||||||
|
|
||||||
|
//** Border color for table and cell borders.
|
||||||
|
@table-border-color: #ddd;
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: false; // false: suppress all background images (i.e. icons)
|
||||||
|
@fancy-loading-url: none;
|
||||||
|
|
||||||
|
@fancy-line-height: 1em; // height of a nodes selection bar including borders
|
||||||
|
@fancy-node-v-spacing: 0px; // gap between two node borders
|
||||||
|
@fancy-icon-width: 1em;
|
||||||
|
@fancy-icon-height: 1em;
|
||||||
|
@fancy-icon-spacing: 0.5em; // margin between icon/icon or icon/title
|
||||||
|
@fancy-icon-ofs-top: 2px; // extra vertical offset for expander, checkbox and icon
|
||||||
|
@fancy-title-ofs-top: 0px; // extra vertical offset for title
|
||||||
|
@fancy-node-border-width: 1px;
|
||||||
|
@fancy-node-border-radius: @border-radius-small;
|
||||||
|
@fancy-node-outline-width: 1px;
|
||||||
|
|
||||||
|
@fancy-font-family: @font-family-base;
|
||||||
|
@fancy-font-size: @font-size-base;
|
||||||
|
@fancy-font-color: @text-color;
|
||||||
|
@fancy-font-color-dimm: @gray-dark;
|
||||||
|
@fancy-font-error-color: @brand-danger;
|
||||||
|
|
||||||
|
@fancy-active-text: #fff;
|
||||||
|
@fancy-active-color: @brand-primary;
|
||||||
|
@fancy-select-color: @brand-success;
|
||||||
|
@fancy-hover-color: @table-bg-hover;
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Plain tree
|
||||||
|
* Modifier classes on <ul> container:
|
||||||
|
* table-hover : Enable a light mouse hover effect
|
||||||
|
* fancytree-colorize-selected: Give selected (checked) rows a color
|
||||||
|
*/
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 1.5em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
/* Prevent focus frame */
|
||||||
|
.fancytree-container:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Active and (optionally) selected nodes are white on colored bg. Undo this for input controls:
|
||||||
|
.fancytree-container .fancytree-active span.fancytree-title input,
|
||||||
|
.fancytree-container.fancytree-colorize-selected .fancytree-selected span.fancytree-title input {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error status node
|
||||||
|
.fancytree-container span.fancytree-statusnode-error span.fancytree-expander {
|
||||||
|
color: @fancy-font-error-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Helper to allow spinning loader icon with bootstrap */
|
||||||
|
.glyphicon-spin {
|
||||||
|
-webkit-animation: spin 1000ms infinite linear;
|
||||||
|
animation: spin 1000ms infinite linear;
|
||||||
|
}
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------
|
||||||
|
// * Drag'n'drop support
|
||||||
|
// *----------------------------------------------------------------------------
|
||||||
|
// div.fancytree-drag-helper {
|
||||||
|
// }
|
||||||
|
// div.fancytree-drag-helper a {
|
||||||
|
// border: 1px solid gray;
|
||||||
|
// background-color: white;
|
||||||
|
// padding-left: 5px;
|
||||||
|
// padding-right: 5px;
|
||||||
|
// opacity: 0.8;
|
||||||
|
// }
|
||||||
|
// span.fancytree-drag-helper-img {
|
||||||
|
// // position: relative;
|
||||||
|
// // left: -16px;
|
||||||
|
// }
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject,
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-title
|
||||||
|
{
|
||||||
|
color: @fancy-font-error-color;
|
||||||
|
}
|
||||||
|
// div.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
// .useSprite(2, 7);
|
||||||
|
// }
|
||||||
|
// div.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
// .useSprite(1, 7);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //--- Drop marker icon ---------------------------------------------------------
|
||||||
|
// #fancytree-drop-marker {
|
||||||
|
// width: 2 * @fancy-icon-width; // was 24px, but 32 should be correct
|
||||||
|
// position: absolute;
|
||||||
|
// .useSprite(0, 8);
|
||||||
|
// margin: 0;
|
||||||
|
// &.fancytree-drop-after,
|
||||||
|
// &.fancytree-drop-before {
|
||||||
|
// width: 4 * @fancy-icon-width; // 64px;
|
||||||
|
// .useSprite(0, 9);
|
||||||
|
// }
|
||||||
|
// &.fancytree-drop-copy {
|
||||||
|
// .useSprite(4, 8);
|
||||||
|
// }
|
||||||
|
// &.fancytree-drop-move {
|
||||||
|
// .useSprite(2, 8);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
//--- Source node while dragging -----------------------------------------------
|
||||||
|
|
||||||
|
span.fancytree-node.fancytree-drag-source {
|
||||||
|
background-color: @brand-info !important;
|
||||||
|
span.fancytree.title {
|
||||||
|
// outline: 1px solid @brand-info;
|
||||||
|
// color: @brand-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--- Target node while dragging cursor is over it -----------------------------
|
||||||
|
|
||||||
|
span.fancytree-node.fancytree-drop-target {
|
||||||
|
&.fancytree-drop-accept span.fancytree.title {
|
||||||
|
// background-color: @brand-danger !important;
|
||||||
|
// outline: 1px solid @brand-success;
|
||||||
|
// color: white !important;
|
||||||
|
}
|
||||||
|
&.fancytree-drop-reject span.fancytree.title {
|
||||||
|
background-color: @brand-danger !important;
|
||||||
|
// outline: 1px solid @brand-danger;
|
||||||
|
// color: white !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
span.fancytree-expander {
|
||||||
|
color: #999; // colpased expander is gray
|
||||||
|
}
|
||||||
|
.fancytree-expanded span.fancytree-expander {
|
||||||
|
color: @fancy-font-color;
|
||||||
|
}
|
||||||
|
span.fancytree-node span.fancytree-expander:hover {
|
||||||
|
color: cyan;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inactive tree:
|
||||||
|
.fancytree-plain {
|
||||||
|
&.fancytree-colorize-selected {
|
||||||
|
span.fancytree-node.fancytree-selected,
|
||||||
|
span.fancytree-node.fancytree-selected span.fancytree-title { // selected nodes inside inactive tree
|
||||||
|
background-color: lighten(@fancy-select-color, 10%);
|
||||||
|
border-color: lighten(@fancy-select-color, 10%);
|
||||||
|
color: @fancy-active-text;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-selected:hover span.fancytree-title {
|
||||||
|
background-color: lighten(@fancy-select-color, 5%);
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active.fancytree-selected span.fancytree-title { // active nodes inside inactive tree
|
||||||
|
color: lighten(@fancy-select-color, 10%);
|
||||||
|
}
|
||||||
|
&.fancytree-treefocus {
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
background-color: @fancy-hover-color;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: @fancy-select-color;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-selected:hover span.fancytree-title {
|
||||||
|
background-color: darken(@fancy-select-color, 5%);
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active.fancytree-selected span.fancytree-title {
|
||||||
|
color: @fancy-select-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.fancytree-container { // adding this class to increase specificity, so we can override .fancytree-colorize-selected
|
||||||
|
span.fancytree-node {
|
||||||
|
margin-top: 2px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
border-radius: @border-radius-small;
|
||||||
|
outline-radius: @border-radius-small;
|
||||||
|
}
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
background-color: @fancy-hover-color;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active span.fancytree-title { // active nodes inside inactive tree
|
||||||
|
background-color: lighten(@fancy-active-color, 10%);
|
||||||
|
color: @fancy-active-text;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active:hover span.fancytree-title {
|
||||||
|
background-color: lighten(@fancy-active-color, 5%);
|
||||||
|
}
|
||||||
|
&.fancytree-ext-wide span.fancytree-node.fancytree-active { // in wide mode, icons of active nodes must be white-on-color
|
||||||
|
color: @fancy-active-text;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Active tree:
|
||||||
|
&.fancytree-treefocus {
|
||||||
|
span.fancytree-node.fancytree-focused span.fancytree-title {
|
||||||
|
border-color: @brand-primary;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active span.fancytree-title {
|
||||||
|
background-color: @fancy-active-color;
|
||||||
|
border-color: @fancy-active-color;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active:hover span.fancytree-title {
|
||||||
|
background-color: darken(@fancy-active-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
* Modifier classes on <table>:
|
||||||
|
* table-hover : Enable a light mouse hover effect
|
||||||
|
* fancytree-colorize-selected: Give selected (checked) rows a color
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
>tbody >tr >td span.fancytree-title {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Give a separate color for selected (checked) rows
|
||||||
|
// Define *before* the .fancytree-active rules, because active color should
|
||||||
|
// override selected color.
|
||||||
|
&.fancytree-colorize-selected {
|
||||||
|
>tbody >tr.fancytree-selected >td {
|
||||||
|
// dimmed, if inside inactive tree
|
||||||
|
background-color: lighten(@fancy-select-color, 10%);
|
||||||
|
// white text for selected nodes
|
||||||
|
&,
|
||||||
|
span.fancytree-title {
|
||||||
|
color: @fancy-active-text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.fancytree-treefocus >tbody >tr.fancytree-selected >td {
|
||||||
|
background-color: @fancy-select-color;
|
||||||
|
}
|
||||||
|
&.table-hover >tbody >tr.fancytree-selected:hover >td {
|
||||||
|
// dimmed, if inside inactive tree
|
||||||
|
background-color: lighten(@fancy-select-color, 5%);
|
||||||
|
}
|
||||||
|
&.fancytree-treefocus.table-hover >tbody >tr.fancytree-selected:hover >td {
|
||||||
|
background-color: darken(@fancy-select-color, 5%);
|
||||||
|
}
|
||||||
|
&.fancytree-treefocus.table-hover >tbody >tr.fancytree-selected.fancytree-active:hover >td,
|
||||||
|
&.table-hover >tbody >tr.fancytree-selected.fancytree-active:hover >td {
|
||||||
|
background-color: darken(@fancy-active-color, 5%);
|
||||||
|
}
|
||||||
|
>tbody >tr.fancytree-active.fancytree-selected {
|
||||||
|
outline-width: 2px;
|
||||||
|
outline-offset: -2px;
|
||||||
|
outline-style: solid;
|
||||||
|
outline-color: lighten(@fancy-select-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// General tree (slightly dimmed, since we also define colors for inactive
|
||||||
|
// mode here).
|
||||||
|
|
||||||
|
&.fancytree-container >tbody >tr.fancytree-active >td {
|
||||||
|
background-color: lighten(@fancy-active-color, 10%);
|
||||||
|
// white text for selected nodes
|
||||||
|
&,
|
||||||
|
span.fancytree-title {
|
||||||
|
color: @fancy-active-text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset to standard colors if tree has keyboard focus.
|
||||||
|
// We add .fancytree-container to increase specificity, so we can override
|
||||||
|
// .fancytree-colorize-selected defined above
|
||||||
|
|
||||||
|
&.fancytree-treefocus.fancytree-container {
|
||||||
|
>tbody >tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted #000;
|
||||||
|
}
|
||||||
|
>tbody >tr.fancytree-active >td {
|
||||||
|
background-color: @fancy-active-color;
|
||||||
|
}
|
||||||
|
&.table-hover >tbody >tr.fancytree-active:hover >td {
|
||||||
|
background-color: darken(@fancy-active-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-bootstrap/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-bootstrap/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
frontend/js/fancytree/skin-bootstrap/vline.gif
Normal file
|
After Width: | Height: | Size: 844 B |
821
frontend/js/fancytree/skin-common.less
Normal file
@@ -0,0 +1,821 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Variables (defaults, may be overwritten by the including .less files)
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
// @fancy-hide-connectors: true; // false: show vertical connector lines
|
||||||
|
|
||||||
|
@fancy-level-indent: 16px;
|
||||||
|
@fancy-line-height: 16px; // height of a nodes selection bar including borders
|
||||||
|
@fancy-node-v-spacing: 1px; // gap between two node borders
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title
|
||||||
|
@fancy-icon-ofs-top: 0px; // extra vertical offset for expander, checkbox and icon
|
||||||
|
@fancy-title-ofs-top: 0px; // extra vertical offset for title
|
||||||
|
@fancy-node-border-width: 1px;
|
||||||
|
@fancy-node-border-radius: 0px;
|
||||||
|
@fancy-node-outline-width: 1px;
|
||||||
|
|
||||||
|
// @fancy-line-ofs-top: (@fancy-line-height - @fancy-icon-height) / 2;
|
||||||
|
|
||||||
|
@fancy-image-dir: ".";
|
||||||
|
|
||||||
|
// Use 'url(...)' to link to the throbber image, or
|
||||||
|
// use data-uri(...)' to inline the data in css instead:
|
||||||
|
@fancy-loading-url: url("@{fancy-image-dir}/loading.gif");
|
||||||
|
// @fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
|
||||||
|
// Set to `true` to use `data-uri(...)` instead of a `url(...)` link:
|
||||||
|
@fancy-inline-sprites: false;
|
||||||
|
|
||||||
|
@fancy-font-size: 10pt;
|
||||||
|
@fancy-font-family: tahoma, arial, helvetica;
|
||||||
|
@fancy-font-color: black;
|
||||||
|
@fancy-font-color-dimm: silver;
|
||||||
|
@fancy-font-error-color: red;
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Mixins
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
.setBgPos(@x, @y, @cond:true) when (@cond){
|
||||||
|
background-position: (@x * -@fancy-icon-width) (@y * -@fancy-icon-height);
|
||||||
|
}
|
||||||
|
.clearBgImage(@cond:true) when (@cond){
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.setBgImageUrl(@url) when (@fancy-use-sprites) and not (@fancy-inline-sprites) {
|
||||||
|
background-image: url("@{fancy-image-dir}/@{url}");
|
||||||
|
}
|
||||||
|
.setBgImageUrl(@url) when (@fancy-use-sprites) and (@fancy-inline-sprites) {
|
||||||
|
background-image: data-uri("@{fancy-image-dir}/@{url}");
|
||||||
|
}
|
||||||
|
.useSprite(@x, @y) when (@fancy-use-sprites){
|
||||||
|
.setBgPos(@x, @y);
|
||||||
|
}
|
||||||
|
.rounded-corners(@radius) {
|
||||||
|
-webkit-border-radius: @radius;
|
||||||
|
-moz-border-radius: @radius;
|
||||||
|
-ms-border-radius: @radius;
|
||||||
|
-o-border-radius: @radius;
|
||||||
|
border-radius: @radius;
|
||||||
|
}
|
||||||
|
.spanStyleMixin(@color, @bgcolor, @bordercolor){
|
||||||
|
border-color: @bordercolor;
|
||||||
|
background: @bgcolor;
|
||||||
|
color: @color;
|
||||||
|
}
|
||||||
|
.spanStyleMixin(@color, @bgcolor, @bordercolor, @startColor, @stopColor){
|
||||||
|
.spanStyleMixin(@color, @bgcolor, @bordercolor);
|
||||||
|
// @c-start: argb(@startColor);
|
||||||
|
// @c-end: argb(@stopColor);
|
||||||
|
background: -moz-linear-gradient(top, @startColor 0%, @stopColor 100%); // FF3.6+
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@startColor), color-stop(100%,@stopColor)); // Chrome,Safari4+
|
||||||
|
background: -webkit-linear-gradient(top, @startColor 0%,@stopColor 100%); // Chrome10+,Safari5.1+
|
||||||
|
background: -o-linear-gradient(top, @startColor 0%,@stopColor 100%); // Opera 11.10+
|
||||||
|
background: -ms-linear-gradient(top, @startColor 0%,@stopColor 100%); // IE10+
|
||||||
|
background: linear-gradient(to bottom, @startColor 0%,@stopColor 100%); // W3C
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@{startColor}', endColorstr='@{stopColor}',GradientType=0 ); // IE6-9
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
// Redefine, in case jQuery-UI is not included
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: @fancy-font-family;
|
||||||
|
font-size: @fancy-font-size;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0; // DT issue 201
|
||||||
|
background-color: white;
|
||||||
|
border: 1px dotted gray;
|
||||||
|
// overflow: auto; // ext-dnd5: otherwise this is always the scroll parent
|
||||||
|
// height: 100%; // DT issue 263, 470
|
||||||
|
min-height: 0%; // #192
|
||||||
|
position: relative; // #235
|
||||||
|
ul {
|
||||||
|
padding: 0 0 0 @fancy-level-indent;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul>li:before { // #538
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
.setBgPos(0, 0);
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none; // no v-lines
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
// padding: 1px 0 0 0; // issue #246
|
||||||
|
}
|
||||||
|
// Suppress lines for last child node
|
||||||
|
li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Style, when control is disabled
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
// filter: alpha(opacity=50); // Yields a css warning
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.fancytree-connectors.fancytree-container {
|
||||||
|
li {
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
background-image: data-uri("@{fancy-image-dir}/vline.gif");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Suppress lines for last child node
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
// Suppress lines if level is fixed expanded (option minExpandLevel)
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix jQuery UI 'blind' animation for jQuery UI (#717)
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: @fancy-icon-width;
|
||||||
|
height: @fancy-icon-height;
|
||||||
|
// display: -moz-inline-box; // @ FF 1+2 removed for issue 221
|
||||||
|
// -moz-box-align: start; /* issue 221 */
|
||||||
|
display: inline-block; // Required to make a span sizeable
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
.setBgImageUrl("icons.gif");
|
||||||
|
.setBgPos(0, 0);
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: @fancy-icon-ofs-top;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: @fancy-icon-width;
|
||||||
|
height: @fancy-icon-height;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: @fancy-icon-spacing;
|
||||||
|
.setBgPos(0, 0);
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: @fancy-icon-width;
|
||||||
|
height: @fancy-icon-height;
|
||||||
|
margin-left: @fancy-icon-spacing;
|
||||||
|
margin-top: @fancy-icon-ofs-top;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
span.fancytree-expander {
|
||||||
|
// .useSprite(0, 5);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
// span.fancytree-expander:hover {
|
||||||
|
// // .useSprite(1, 5);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// --- End nodes (use connectors instead of expanders)
|
||||||
|
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
// .clearBgImage( @fancy-hide-connectors );
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors {
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
.setBgImageUrl("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander, // End-node, not last sibling
|
||||||
|
.fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
.useSprite(0, 4);
|
||||||
|
}
|
||||||
|
.fancytree-exp-nl span.fancytree-expander, // End-node, last sibling
|
||||||
|
.fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
.useSprite(1, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Collapsed
|
||||||
|
|
||||||
|
.fancytree-exp-c span.fancytree-expander { // Collapsed, not delayed, not last sibling
|
||||||
|
.useSprite(0, 5);
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
.useSprite(1, 5);
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander { // Collapsed, not delayed, last sibling
|
||||||
|
.useSprite(0, 6);
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
.useSprite(1, 6);
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander { // Collapsed, delayed, not last sibling
|
||||||
|
.useSprite(4, 5);
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
.useSprite(5, 5);
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander { // Collapsed, delayed, last sibling
|
||||||
|
.useSprite(4, 6);
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
.useSprite(5, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Expanded
|
||||||
|
|
||||||
|
.fancytree-exp-e span.fancytree-expander, // Expanded, not delayed, not last sibling
|
||||||
|
.fancytree-exp-ed span.fancytree-expander { // Expanded, delayed, not last sibling
|
||||||
|
.useSprite(2, 5);
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
.useSprite(3, 5);
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander, // Expanded, not delayed, last sibling
|
||||||
|
.fancytree-exp-edl span.fancytree-expander { // Expanded, delayed, last sibling
|
||||||
|
.useSprite(2, 6);
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
.useSprite(3, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander {
|
||||||
|
span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
&:hover span.fancytree-expander,
|
||||||
|
&.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-treefocus span.fancytree-expander,
|
||||||
|
[class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: @fancy-icon-spacing;
|
||||||
|
.useSprite(0, 2);
|
||||||
|
&:hover { .useSprite(1, 2); }
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
.useSprite(4, 2);
|
||||||
|
&:hover { .useSprite(5, 2); }
|
||||||
|
}
|
||||||
|
// selected after partsel, so it takes precedence:
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
.useSprite(2, 2);
|
||||||
|
&:hover { .useSprite(3, 2); }
|
||||||
|
}
|
||||||
|
// Unselectable is dimmed, without hover effects
|
||||||
|
.fancytree-unselectable {
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
.useSprite(0, 2);
|
||||||
|
}
|
||||||
|
&.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
.useSprite(4, 2);
|
||||||
|
}
|
||||||
|
&.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
.useSprite(2, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
.fancytree-radio {
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
.useSprite(0, 3);
|
||||||
|
&:hover { .useSprite(1, 3); }
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
.useSprite(4, 3);
|
||||||
|
&:hover { .useSprite(5, 3); }
|
||||||
|
}
|
||||||
|
// Selected after partsel, so it takes precedence:
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
.useSprite(2, 3);
|
||||||
|
&:hover { .useSprite(3, 3); }
|
||||||
|
}
|
||||||
|
// Unselectable is dimmed, without hover effects
|
||||||
|
.fancytree-unselectable {
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
.useSprite(0, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
span.fancytree-icon { // Default icon
|
||||||
|
margin-left: @fancy-icon-spacing;
|
||||||
|
.useSprite(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon { // Collapsed folder (empty)
|
||||||
|
// .useSprite(0, 0);
|
||||||
|
}
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
.useSprite(1, 0);
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon { // Collapsed folder (not empty)
|
||||||
|
.useSprite(2, 0);
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
.useSprite(3, 0);
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon { // Expanded folder
|
||||||
|
.useSprite(4, 0);
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
.useSprite(5, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon { // Collapsed folder (empty)
|
||||||
|
.useSprite(0, 1);
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
.useSprite(1, 1);
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { // Collapsed folder (not empty)
|
||||||
|
.useSprite(2, 1);
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
.useSprite(3, 1);
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon { // Expanded folder
|
||||||
|
.useSprite(4, 1);
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
.useSprite(5, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'Loading' status overrides all others
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: @fancy-loading-url;
|
||||||
|
.useSprite(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status node icons */
|
||||||
|
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
.useSprite(0, 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit; // #117, resolves to 'display: list-item;' for standard trees
|
||||||
|
width: 100%;
|
||||||
|
margin-top: @fancy-node-v-spacing;
|
||||||
|
min-height: @fancy-line-height;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: @fancy-font-color; // inherit doesn't work on IE
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block; // Better alignment, when title contains <br>
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: @fancy-line-height;
|
||||||
|
padding: 0 3px 0 3px; // Otherwise italic font will be outside right bounds
|
||||||
|
margin: @fancy-title-ofs-top 0 0 @fancy-icon-spacing;
|
||||||
|
// margin: 0px;
|
||||||
|
// margin-top: @fancy-line-ofs-top;
|
||||||
|
// margin-left: @fancy-icon-spacing;
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
.rounded-corners(@fancy-node-border-radius);
|
||||||
|
// outline: 0; // @ Firefox, prevent dotted border after click
|
||||||
|
// Set transparent border to prevent jumping when active node gets a border
|
||||||
|
// (we can do this, because this theme doesn't use vertical lines)
|
||||||
|
// border: 1px solid white; // Note: 'transparent' would not work in IE6
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: @fancy-font-error-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper {
|
||||||
|
span.fancytree-childcounter,
|
||||||
|
span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7; // bootstrap blue
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
// min-height: 16px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
// left: 16px;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c; // bootstrap green
|
||||||
|
border: none;
|
||||||
|
// min-height: 16px;
|
||||||
|
// font-size: 12px;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
&.fancytree-drop-accept {
|
||||||
|
span.fancytree-drag-helper-img {
|
||||||
|
.useSprite(2, 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.fancytree-drop-reject {
|
||||||
|
span.fancytree-drag-helper-img {
|
||||||
|
.useSprite(1, 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 2 * @fancy-icon-width; // was 24px, but 32 should be correct
|
||||||
|
position: absolute;
|
||||||
|
.useSprite(0, 8);
|
||||||
|
margin: 0;
|
||||||
|
&.fancytree-drop-after,
|
||||||
|
&.fancytree-drop-before {
|
||||||
|
width: 4 * @fancy-icon-width; // 64px;
|
||||||
|
.useSprite(0, 9);
|
||||||
|
}
|
||||||
|
&.fancytree-drop-copy {
|
||||||
|
.useSprite(4, 8);
|
||||||
|
}
|
||||||
|
&.fancytree-drop-move {
|
||||||
|
.useSprite(2, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
|
||||||
|
span.fancytree-drag-source {
|
||||||
|
&.fancytree-drag-remove {
|
||||||
|
// text-decoration: line-through;
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
|
||||||
|
span.fancytree-drop-target {
|
||||||
|
&.fancytree-drop-accept {
|
||||||
|
// outline: 1px dotted #5cb85c; // bootstrap sucess
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.fancytree-drop-reject {
|
||||||
|
// outline: 1px dotted #d9534f; // boostrap warning
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
.fancytree-container.fancytree-rtl {
|
||||||
|
.fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/ /* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
span.fancytree-connector,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
&.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
&.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl {
|
||||||
|
ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
&.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("@{fancy-image-dir}/vline-rtl.gif");
|
||||||
|
}
|
||||||
|
// Suppress lines for last child node
|
||||||
|
li.fancytree-lastsib,
|
||||||
|
// Suppress lines if level is fixed expanded (option minExpandLevel)
|
||||||
|
&.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
span.fancytree-node {
|
||||||
|
display: inline-block; // #117
|
||||||
|
box-sizing: border-box; // #562
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
table.fancytree-ext-columnview {
|
||||||
|
// border-collapse: collapse;
|
||||||
|
// width: 100%;
|
||||||
|
tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
>ul {
|
||||||
|
padding: 0;
|
||||||
|
li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip:border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
.setBgPos(0, 0);
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none; /* no v-lines */
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
// padding: 1px 0 0 0; // issue #246
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.fancytree-node {
|
||||||
|
position: relative; /* allow positioning of embedded spans */
|
||||||
|
display: inline-block; // #117
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
// table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
|
||||||
|
// background-color: royalblue;
|
||||||
|
// }
|
||||||
|
.fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
.useSprite(0, 5);
|
||||||
|
&:hover {
|
||||||
|
.useSprite(1, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
.fancytree-ext-filter-dimm {
|
||||||
|
span.fancytree-node span.fancytree-title {
|
||||||
|
color: @fancy-font-color-dimm;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
tr.fancytree-submatch span.fancytree-title,
|
||||||
|
span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
tr.fancytree-match span.fancytree-title,
|
||||||
|
span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide {
|
||||||
|
tr.fancytree-hide,
|
||||||
|
span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
tr.fancytree-submatch span.fancytree-title,
|
||||||
|
span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: @fancy-font-color-dimm;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
tr.fancytree-match span.fancytree-title,
|
||||||
|
span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders {
|
||||||
|
tr.fancytree-match span.fancytree-expander,
|
||||||
|
span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fancytree-ext-childcounter,
|
||||||
|
.fancytree-ext-filter {
|
||||||
|
// span.fancytree-title mark {
|
||||||
|
// font-style: normal;
|
||||||
|
// background-color: #ead61c; // yellow
|
||||||
|
// border-radius: 3px;
|
||||||
|
// }
|
||||||
|
span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777; // #337ab7; // bootstrap blue
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
span.fancytree-node >span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute; // Allow left: 0. Note: prevents smooth dropdown animation
|
||||||
|
z-index: 1; // Behind expander and checkbox
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
.fancytree-ext-fixed-wrapper {
|
||||||
|
.fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
14
frontend/js/fancytree/skin-custom-1/README.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
### Creating Custom Skins
|
||||||
|
|
||||||
|
1. Create a folder like this (recommended name: 'src/skin-custom-...')
|
||||||
|
2. For a start copy files from one of the existing skin folders (src/skin-...)
|
||||||
|
to the custom folder:
|
||||||
|
- ui.fancytree.less (required)
|
||||||
|
- icons.gif (if needed)
|
||||||
|
- loading.gif (if needed)
|
||||||
|
3. cd to your fancytree folder and run `grunt dev` from the connsole.<br>
|
||||||
|
Note: NPM and Grunt are required.
|
||||||
|
Read [how to install the toolset](https://github.com/mar10/fancytree/wiki/HowtoContribute#install-the-source-code-and-tools-for-debugging-and-contributing).
|
||||||
|
4. Edit and save your ui.fancytree.less file.<br>
|
||||||
|
The `ui.fancytree.css` will be generated and updated automatically from
|
||||||
|
the LESS file.
|
||||||
BIN
frontend/js/fancytree/skin-lion/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
frontend/js/fancytree/skin-lion/icons.gif
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
frontend/js/fancytree/skin-lion/loading.gif
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
674
frontend/js/fancytree/skin-lion/ui.fancytree.css
Normal file
@@ -0,0 +1,674 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Lion" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
Lion colors:
|
||||||
|
gray highlight bar: #D4D4D4
|
||||||
|
blue highlight-bar and -border #3875D7
|
||||||
|
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAANPT0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAgxAP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MiQ40OKEkEO9JhQZEWTDRcGBAA7");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 0px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,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");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 16px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 16px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-title {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
}
|
||||||
|
span.fancytree-selected span.fancytree-title,
|
||||||
|
span.fancytree-active span.fancytree-title {
|
||||||
|
background-color: #D4D4D4;
|
||||||
|
}
|
||||||
|
span.fancytree-selected span.fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.fancytree-treefocus span.fancytree-selected span.fancytree-title,
|
||||||
|
.fancytree-treefocus span.fancytree-active span.fancytree-title {
|
||||||
|
color: white;
|
||||||
|
background-color: #3875D7;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-focused {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'columnview' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
border: 1px solid gray;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
94
frontend/js/fancytree/skin-lion/ui.fancytree.less
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Lion" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Lion colors:
|
||||||
|
gray highlight bar: #D4D4D4
|
||||||
|
blue highlight-bar and -border #3875D7
|
||||||
|
|
||||||
|
*/
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-line-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-title {
|
||||||
|
border: 1px solid transparent; // reserve some space for status borders
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
}
|
||||||
|
span.fancytree-selected span.fancytree-title,
|
||||||
|
span.fancytree-active span.fancytree-title {
|
||||||
|
background-color: #D4D4D4; // gray
|
||||||
|
}
|
||||||
|
span.fancytree-selected span.fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.fancytree-treefocus span.fancytree-selected span.fancytree-title,
|
||||||
|
.fancytree-treefocus span.fancytree-active span.fancytree-title {
|
||||||
|
color: white;
|
||||||
|
background-color: #3875D7; // blue
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
tbody {
|
||||||
|
tr.fancytree-focused {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
tr.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
tr.fancytree-selected {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'columnview' extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
border: 1px solid gray;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-lion/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-lion/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-lion/vline.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-themeroller/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-themeroller/icons.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-themeroller/loading.gif
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
633
frontend/js/fancytree/skin-themeroller/ui.fancytree.css
Normal file
@@ -0,0 +1,633 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "ThemeRoller" skin.
|
||||||
|
* This file should be included after a jQuery Themeroller style sheet.
|
||||||
|
* It is meant to be used together with the ext-themeroller extension.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAANPT0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAgxAP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MiQ40OKEkEO9JhQZEWTDRcGBAA7");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 2px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,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");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 0px;
|
||||||
|
min-height: 20px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 20px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
.fancytree-plain span.fancytree-node {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody tr td {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
60
frontend/js/fancytree/skin-themeroller/ui.fancytree.less
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "ThemeRoller" skin.
|
||||||
|
* This file should be included after a jQuery Themeroller style sheet.
|
||||||
|
* It is meant to be used together with the ext-themeroller extension.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-line-height: 20px; // height of a nodes selection bar including borders
|
||||||
|
@fancy-node-v-spacing: 0px; // gap between two node borders
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title
|
||||||
|
@fancy-icon-ofs-top: 2px; // extra vertical offset for expander, checkbox and icon
|
||||||
|
@fancy-title-ofs-top: 0px; // extra vertical offset for title
|
||||||
|
@fancy-node-border-width: 1px;
|
||||||
|
@fancy-node-border-radius: 0px;
|
||||||
|
@fancy-node-outline-width: 1px;
|
||||||
|
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
.fancytree-plain {
|
||||||
|
span.fancytree-node {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody {
|
||||||
|
tr td {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
8
frontend/js/fancytree/skin-themeroller/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-themeroller/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-themeroller/vline.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-vista/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-vista/icons.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-vista/loading.gif
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
680
frontend/js/fancytree/skin-vista/ui.fancytree.css
Normal file
@@ -0,0 +1,680 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Vista" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
both:
|
||||||
|
unselected background: #FCFCFC 'nearly white'
|
||||||
|
hover bar (unselected, inactive): #F8FCFE..#EFF9FE (border: #D8F0FA) 'very light blue'
|
||||||
|
active node: #F6FBFD..#D5EFFC (border: #99DEFD) 'light blue'
|
||||||
|
active node with hover: #F2F9FD..#C4E8FA (border: #B6E6FB)
|
||||||
|
|
||||||
|
Tree view:
|
||||||
|
active node, tree inactive: #FAFAFB..#E5E5E5 (border: #D9D9D9) 'light gray, selected, but tree not active'
|
||||||
|
|
||||||
|
List view:
|
||||||
|
selected bar: --> active bar
|
||||||
|
focus bar: active + border 1px dotted #090402 (inside the blue border)
|
||||||
|
|
||||||
|
table left/right border: #EDEDED 'light gray'
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAANPT0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAgxAP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MiQ40OKEkEO9JhQZEWTDRcGBAA7");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 0px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,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");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 16px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 16px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-title {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
background-color: #F2F7FD;
|
||||||
|
border-color: #B8D6FB;
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
background-color: #EFEBDE;
|
||||||
|
outline: 1px dotted gray;
|
||||||
|
}
|
||||||
|
span.fancytree-selected span.fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
span.fancytree-active span.fancytree-title {
|
||||||
|
border: 1px solid #99DEFD;
|
||||||
|
background-color: #D8F0FA;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-focused {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
background-color: #99FDDE;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'columnview' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
111
frontend/js/fancytree/skin-vista/ui.fancytree.less
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Vista" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
both:
|
||||||
|
unselected background: #FCFCFC 'nearly white'
|
||||||
|
hover bar (unselected, inactive): #F8FCFE..#EFF9FE (border: #D8F0FA) 'very light blue'
|
||||||
|
active node: #F6FBFD..#D5EFFC (border: #99DEFD) 'light blue'
|
||||||
|
active node with hover: #F2F9FD..#C4E8FA (border: #B6E6FB)
|
||||||
|
|
||||||
|
Tree view:
|
||||||
|
active node, tree inactive: #FAFAFB..#E5E5E5 (border: #D9D9D9) 'light gray, selected, but tree not active'
|
||||||
|
|
||||||
|
List view:
|
||||||
|
selected bar: --> active bar
|
||||||
|
focus bar: active + border 1px dotted #090402 (inside the blue border)
|
||||||
|
|
||||||
|
table left/right border: #EDEDED 'light gray'
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-line-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-title {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
}
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
background-color: #F2F7FD; // light blue
|
||||||
|
border-color: #B8D6FB; // darker light blue
|
||||||
|
}
|
||||||
|
.fancytree-folder span.fancytree-title {
|
||||||
|
// font-weight: bold;
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
background-color: #EFEBDE; // gray
|
||||||
|
outline: 1px dotted gray;
|
||||||
|
}
|
||||||
|
span.fancytree-has-children span.fancytree-title {
|
||||||
|
// font-style: oblique;
|
||||||
|
}
|
||||||
|
span.fancytree-expanded span.fancytree-title {
|
||||||
|
}
|
||||||
|
span.fancytree-selected span.fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
span.fancytree-active span.fancytree-title {
|
||||||
|
border: 1px solid #99DEFD;
|
||||||
|
background-color: #D8F0FA;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
tbody tr.fancytree-focused {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
tbody tr.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
tbody tr.fancytree-selected {
|
||||||
|
background-color: #99FDDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'columnview' extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
table.fancytree-ext-columnview {
|
||||||
|
span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-vista/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-vista/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-vista/vline.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-win7/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-win7/icons.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-win7/loading.gif
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
739
frontend/js/fancytree/skin-win7/ui.fancytree.css
Normal file
@@ -0,0 +1,739 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Win7" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAANPT0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAgxAP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MiQ40OKEkEO9JhQZEWTDRcGBAA7");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 2px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,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");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 20px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 20px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-ms-border-radius: 3px;
|
||||||
|
-o-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-active .fancytree-title,
|
||||||
|
span.fancytree-selected .fancytree-title {
|
||||||
|
border-color: #d9d9d9;
|
||||||
|
background: #e5e5e5;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #fafafb 0%, #e5e5e5 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafb), color-stop(100%, #e5e5e5));
|
||||||
|
background: -webkit-linear-gradient(top, #fafafb 0%, #e5e5e5 100%);
|
||||||
|
background: -o-linear-gradient(top, #fafafb 0%, #e5e5e5 100%);
|
||||||
|
background: -ms-linear-gradient(top, #fafafb 0%, #e5e5e5 100%);
|
||||||
|
background: linear-gradient(to bottom, #fafafb 0%, #e5e5e5 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafb', endColorstr='#e5e5e5', GradientType=0);
|
||||||
|
}
|
||||||
|
span.fancytree-selected .fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.fancytree-treefocus span.fancytree-active .fancytree-title,
|
||||||
|
.fancytree-treefocus span.fancytree-selected .fancytree-title {
|
||||||
|
border-color: #99defd;
|
||||||
|
background: #f6fbfd;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f6fbfd), color-stop(100%, #d5effc));
|
||||||
|
background: -webkit-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: -o-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: -ms-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: linear-gradient(to bottom, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6fbfd', endColorstr='#d5effc', GradientType=0);
|
||||||
|
}
|
||||||
|
.fancytree-treefocus span.fancytree-focused span.fancytree-title {
|
||||||
|
border: 1px solid #719acb;
|
||||||
|
}
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
border-color: #d8f0fa;
|
||||||
|
background: #f8fcfe;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8fcfe), color-stop(100%, #eff9fe));
|
||||||
|
background: -webkit-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: -o-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: -ms-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: linear-gradient(to bottom, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fcfe', endColorstr='#eff9fe', GradientType=0);
|
||||||
|
}
|
||||||
|
span.fancytree-active .fancytree-title:hover,
|
||||||
|
span.fancytree-selected .fancytree-title:hover {
|
||||||
|
border-color: #719acb;
|
||||||
|
background: #f2f9fd;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f9fd), color-stop(100%, #c4e8fa));
|
||||||
|
background: -webkit-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: -o-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: -ms-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: linear-gradient(to bottom, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f9fd', endColorstr='#c4e8fa', GradientType=0);
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody tr td {
|
||||||
|
border: 1px solid #ededed;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr:hover {
|
||||||
|
border-color: inherit;
|
||||||
|
background: #f8fcfe;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8fcfe), color-stop(100%, #eff9fe));
|
||||||
|
background: -webkit-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: -o-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: -ms-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
background: linear-gradient(to bottom, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fcfe', endColorstr='#eff9fe', GradientType=0);
|
||||||
|
outline: 1px solid #d8f0fa;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-focused {
|
||||||
|
outline: 1px dotted #090402;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody span.fancytree-focused span.fancytree-title {
|
||||||
|
outline: solid dotted black;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody span.fancytree-title:hover {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background: inherit;
|
||||||
|
background: transparent;
|
||||||
|
background: none;
|
||||||
|
filter: none;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active:hover,
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected:hover {
|
||||||
|
border-color: inherit;
|
||||||
|
background: #f2f9fd;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f9fd), color-stop(100%, #c4e8fa));
|
||||||
|
background: -webkit-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: -o-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: -ms-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
background: linear-gradient(to bottom, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f9fd', endColorstr='#c4e8fa', GradientType=0);
|
||||||
|
outline: 1px solid #B6E6FB;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active,
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
border-color: inherit;
|
||||||
|
background: #f6fbfd;
|
||||||
|
color: inherit;
|
||||||
|
background: -moz-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f6fbfd), color-stop(100%, #d5effc));
|
||||||
|
background: -webkit-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: -o-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: -ms-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
background: linear-gradient(to bottom, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6fbfd', endColorstr='#d5effc', GradientType=0);
|
||||||
|
outline: 1px solid #99DEFD;
|
||||||
|
}
|
||||||
151
frontend/js/fancytree/skin-win7/ui.fancytree.less
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Win7" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Fancytree Win7 styles
|
||||||
|
|
||||||
|
// both:
|
||||||
|
// unselected background: #FCFCFC 'nearly white', no border
|
||||||
|
//
|
||||||
|
// hover bar (unselected, inactive): #fcfdfe..#EFF9FE (border: #b8d6fb) 'very light blue'
|
||||||
|
// background: #f8fcfe; //
|
||||||
|
// background: -moz-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%);
|
||||||
|
|
||||||
|
// active node: #F6FBFD..#D5EFFC (border: #719acb) 'light blue'
|
||||||
|
// background: #f6fbfd;
|
||||||
|
// background: -moz-linear-gradient(top, #f6fbfd 0%, #d5effc 100%);
|
||||||
|
|
||||||
|
// active node with hover: #F2F9FD..#C4E8FA (border: #B6E6FB)
|
||||||
|
// background: #f2f9fd;
|
||||||
|
// background: -moz-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%);
|
||||||
|
|
||||||
|
// Tree view:
|
||||||
|
// active node, tree inactive: #FAFAFB..#E5E5E5 (border: #D9D9D9) 'light gray, selected, but tree not active'
|
||||||
|
// background: #fafafb;
|
||||||
|
// background: -moz-linear-gradient(top, #fafafb 0%, #e5e5e5 100%);
|
||||||
|
|
||||||
|
// List view:
|
||||||
|
// selected bar: --> active bar
|
||||||
|
// focus bar: active + border 1px dotted #090402 (inside the blue border)
|
||||||
|
|
||||||
|
// table left/right border: #EDEDED 'light gray'
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-line-height: 20px; // height of a nodes selection bar including borders
|
||||||
|
@fancy-node-v-spacing: 1px; // gap between two node borders
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title
|
||||||
|
@fancy-icon-ofs-top: 2px; // extra vertical offset for expander, checkbox and icon
|
||||||
|
@fancy-title-ofs-top: 0px; // extra vertical offset for title
|
||||||
|
@fancy-node-border-width: 1px;
|
||||||
|
@fancy-node-border-radius: 3px;
|
||||||
|
@fancy-node-outline-width: 1px;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
|
||||||
|
ul.fancytree-container {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-title {
|
||||||
|
}
|
||||||
|
// active nodes inside an UN-focused tree are gray instead of blue
|
||||||
|
span.fancytree-active .fancytree-title,
|
||||||
|
span.fancytree-selected .fancytree-title {
|
||||||
|
.spanStyleMixin(inherit, #e5e5e5, #d9d9d9, #fafafb, #e5e5e5);
|
||||||
|
}
|
||||||
|
span.fancytree-selected .fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
// Markers inside an active tree
|
||||||
|
.fancytree-treefocus {
|
||||||
|
span.fancytree-active .fancytree-title,
|
||||||
|
span.fancytree-selected .fancytree-title {
|
||||||
|
.spanStyleMixin(inherit, #f6fbfd, #99defd, #f6fbfd, #d5effc);
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
border: @fancy-node-border-width solid #719acb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Hover is always colored (even if tree is inactive)
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
.spanStyleMixin(inherit, #f8fcfe, #d8f0fa, #f8fcfe, #eff9fe);
|
||||||
|
}
|
||||||
|
span.fancytree-active .fancytree-title:hover,
|
||||||
|
span.fancytree-selected .fancytree-title:hover {
|
||||||
|
.spanStyleMixin(inherit, #f2f9fd, #719acb, #f2f9fd, #c4e8fa);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
table.fancytree-ext-table tbody {
|
||||||
|
tr td {
|
||||||
|
border: 1px solid #ededed;
|
||||||
|
}
|
||||||
|
tr:hover {
|
||||||
|
.spanStyleMixin(inherit, #f8fcfe, inherit, #f8fcfe, #eff9fe);
|
||||||
|
outline: 1px solid #d8f0fa;
|
||||||
|
}
|
||||||
|
// tr:hover td {
|
||||||
|
// outline: 1px solid #D8F0FA;
|
||||||
|
// }
|
||||||
|
tr.fancytree-focused {
|
||||||
|
// background-color: #99DEFD;
|
||||||
|
outline: 1px dotted #090402;
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
outline: solid dotted black;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Title gets a white background, when hovered. Undo standard node formatting
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background: inherit;
|
||||||
|
background: transparent;
|
||||||
|
background: none;
|
||||||
|
filter: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.fancytree-active:hover,
|
||||||
|
tr.fancytree-selected:hover {
|
||||||
|
.spanStyleMixin(inherit, #f2f9fd, inherit, #f2f9fd, #c4e8fa);
|
||||||
|
outline: 1px solid #B6E6FB;
|
||||||
|
}
|
||||||
|
tr.fancytree-active,
|
||||||
|
tr.fancytree-selected {
|
||||||
|
.spanStyleMixin(inherit, #f6fbfd, inherit, #f6fbfd, #d5effc);
|
||||||
|
outline: 1px solid #99DEFD;
|
||||||
|
}
|
||||||
|
// tr.fancytree-selected .fancytree-title {
|
||||||
|
// font-style: italic;
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-win7/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-win7/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-win7/vline.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-win8-n/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-win8-n/icons.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-win8-n/loading.gif
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
684
frontend/js/fancytree/skin-win8-n/ui.fancytree.css
Normal file
@@ -0,0 +1,684 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "win8" skin (highlighting the node span instead of title-only).
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAANPT0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAgxAP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MiQ40OKEkEO9JhQZEWTDRcGBAA7");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 0px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,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");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 16px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 16px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
.fancytree-plain span.fancytree-node {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
.fancytree-plain span.fancytree-node:hover {
|
||||||
|
background-color: #E5F3FB;
|
||||||
|
border-color: #70C0E7;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused {
|
||||||
|
border-color: #3399FF;
|
||||||
|
}
|
||||||
|
.fancytree-plain span.fancytree-node.fancytree-active,
|
||||||
|
.fancytree-plain span.fancytree-node.fancytree-selected {
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
border-color: #DEDEDE;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active,
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected,
|
||||||
|
.fancytree-plain span.fancytree-node.fancytree-active:hover,
|
||||||
|
.fancytree-plain span.fancytree-node.fancytree-selected:hover {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
border-color: #26A0DA;
|
||||||
|
}
|
||||||
|
.fancytree-plain .fancytree-node.fancytree-selected {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody tr td {
|
||||||
|
border: 1px solid #EDEDED;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody span.fancytree-node,
|
||||||
|
table.fancytree-ext-table tbody span.fancytree-node:hover {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr:hover {
|
||||||
|
background-color: #E5F3FB;
|
||||||
|
outline: 1px solid #70C0E7;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active:hover,
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected:hover {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active {
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
outline: 1px solid #DEDEDE;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
142
frontend/js/fancytree/skin-win8-n/ui.fancytree.less
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "win8" skin (highlighting the node span instead of title-only).
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Borders have NO radius and NO gradients are used!
|
||||||
|
|
||||||
|
// both:
|
||||||
|
// unselected background: white
|
||||||
|
// hover bar (unselected, inactive): #E5F3FB (border: #70C0E7) 'very light blue'
|
||||||
|
// active node: #CBE8F6 (border: #26A0DA) 'light blue'
|
||||||
|
// active node with hover: wie active node
|
||||||
|
|
||||||
|
// Tree view:
|
||||||
|
// active node, tree inactive: #F7F7F7 (border: #DEDEDE) 'light gray, selected, but tree not active'
|
||||||
|
|
||||||
|
// List view:
|
||||||
|
// selected bar: --> active bar
|
||||||
|
// focus bar: transparent(white) + border 1px solid #3399FF ()
|
||||||
|
|
||||||
|
// table left/right border: #EDEDED 'light gray'
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
// Set to `true` to inline icon sprite into CSS:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-line-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
.fancytree-plain {
|
||||||
|
span.fancytree-node {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
}
|
||||||
|
span.fancytree-node:hover {
|
||||||
|
background-color: #E5F3FB;
|
||||||
|
border-color: #70C0E7;
|
||||||
|
}
|
||||||
|
&.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused {
|
||||||
|
border-color: #3399FF;
|
||||||
|
// outline: 1px solid #3399FF;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-active,
|
||||||
|
span.fancytree-node.fancytree-selected { // active/selcted nodes inside inactive tree
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
border-color: #DEDEDE;
|
||||||
|
}
|
||||||
|
&.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active,
|
||||||
|
&.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected,
|
||||||
|
span.fancytree-node.fancytree-active:hover,
|
||||||
|
span.fancytree-node.fancytree-selected:hover {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
border-color: #26A0DA;
|
||||||
|
}
|
||||||
|
.fancytree-node.fancytree-selected {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody {
|
||||||
|
tr td {
|
||||||
|
border: 1px solid #EDEDED;
|
||||||
|
}
|
||||||
|
span.fancytree-node,
|
||||||
|
span.fancytree-node:hover { // undo standard tree css
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
// Title gets a white background, when hovered. Undo standard node formatting
|
||||||
|
// span.fancytree-title:hover {
|
||||||
|
// border: none; //1px solid transparent;
|
||||||
|
// background: inherit;
|
||||||
|
// background: transparent;
|
||||||
|
// background: none;
|
||||||
|
// filter: none;
|
||||||
|
// }
|
||||||
|
tr:hover {
|
||||||
|
background-color: #E5F3FB;
|
||||||
|
outline: 1px solid #70C0E7;
|
||||||
|
}
|
||||||
|
// tr:hover td {
|
||||||
|
// outline: 1px solid #D8F0FA;
|
||||||
|
// }
|
||||||
|
// tr.fancytree-focused {
|
||||||
|
// border-color: #3399FF;
|
||||||
|
// outline: 1px dotted black;
|
||||||
|
// }
|
||||||
|
tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.fancytree-active:hover,
|
||||||
|
tr.fancytree-selected:hover {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
tr.fancytree-active { // dimmed, if inside inactive tree
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
outline: 1px solid #DEDEDE;
|
||||||
|
}
|
||||||
|
tr.fancytree-selected { // dimmed, if inside inactive tree
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody {
|
||||||
|
tr.fancytree-active {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
tr.fancytree-selected {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-win8-n/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-win8-n/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-win8-n/vline.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-win8-xxl/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
frontend/js/fancytree/skin-win8-xxl/icons.gif
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
frontend/js/fancytree/skin-win8-xxl/loading.gif
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
692
frontend/js/fancytree/skin-win8-xxl/ui.fancytree.css
Normal file
36
frontend/js/fancytree/skin-win8-xxl/ui.fancytree.less
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Win8" 32x32 skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
// Import standard win8
|
||||||
|
@import "../skin-win8/ui.fancytree.less";
|
||||||
|
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-level-indent: 32px;
|
||||||
|
@fancy-line-height: 32px; // height of a nodes selection bar including borders
|
||||||
|
@fancy-node-v-spacing: 1px; // gap between two node borders
|
||||||
|
@fancy-icon-width: 32px;
|
||||||
|
@fancy-icon-height: 32px;
|
||||||
|
@fancy-icon-spacing: 6px; // margin between icon/icon or icon/title
|
||||||
|
@fancy-icon-ofs-top: 0px; // extra vertical offset for expander, checkbox and icon
|
||||||
|
@fancy-title-ofs-top: 0px; // extra vertical offset for title
|
||||||
|
@fancy-node-border-width: 1px;
|
||||||
|
@fancy-node-border-radius: 0px;
|
||||||
|
@fancy-node-outline-width: 1px;
|
||||||
|
|
||||||
|
ul.fancytree-container {
|
||||||
|
// font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 20pt;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
11
frontend/js/fancytree/skin-win8-xxl/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-win8-xxl/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 905 B |
BIN
frontend/js/fancytree/skin-win8-xxl/vline.gif
Normal file
|
After Width: | Height: | Size: 905 B |
BIN
frontend/js/fancytree/skin-win8/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-win8/icons.gif
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
frontend/js/fancytree/skin-win8/loading.gif
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
682
frontend/js/fancytree/skin-win8/ui.fancytree.css
Normal file
@@ -0,0 +1,682 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Win8" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAANPT0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAgxAP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MiQ40OKEkEO9JhQZEWTDRcGBAA7");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 2px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,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");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 0px;
|
||||||
|
min-height: 20px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 20px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
.fancytree-plain span.fancytree-title {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title {
|
||||||
|
border-color: #3399ff;
|
||||||
|
}
|
||||||
|
.fancytree-plain span.fancytree-active span.fancytree-title,
|
||||||
|
.fancytree-plain span.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-color: #dedede;
|
||||||
|
}
|
||||||
|
.fancytree-plain span.fancytree-node span.fancytree-selected span.fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.fancytree-plain span.fancytree-node:hover span.fancytree-title {
|
||||||
|
background-color: #eff9fe;
|
||||||
|
border-color: #70c0e7;
|
||||||
|
}
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title,
|
||||||
|
.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #cbe8f6;
|
||||||
|
border-color: #26a0da;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody tr td {
|
||||||
|
border: 1px solid #EDEDED;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody span.fancytree-node,
|
||||||
|
table.fancytree-ext-table tbody span.fancytree-node:hover {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr:hover {
|
||||||
|
background-color: #E5F3FB;
|
||||||
|
outline: 1px solid #70C0E7;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active:hover,
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected:hover {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active {
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
outline: 1px solid #DEDEDE;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
151
frontend/js/fancytree/skin-win8/ui.fancytree.less
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "Win8" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Borders have NO radius and NO gradients are used!
|
||||||
|
|
||||||
|
// both:
|
||||||
|
// unselected background: white
|
||||||
|
// hover bar (unselected, inactive): #E5F3FB (border: #70C0E7) 'very light blue'
|
||||||
|
// active node: #CBE8F6 (border: #26A0DA) 'light blue'
|
||||||
|
// active node with hover: wie active node
|
||||||
|
|
||||||
|
// Tree view:
|
||||||
|
// active node, tree inactive: #F7F7F7 (border: #DEDEDE) 'light gray, selected, but tree not active'
|
||||||
|
|
||||||
|
// List view:
|
||||||
|
// selected bar: --> active bar
|
||||||
|
// focus bar: transparent(white) + border 1px solid #3399FF ()
|
||||||
|
|
||||||
|
// table left/right border: #EDEDED 'light gray'
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-line-height: 20px; // height of a nodes selection bar including borders
|
||||||
|
@fancy-node-v-spacing: 0px; // gap between two node borders
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title
|
||||||
|
@fancy-icon-ofs-top: 2px; // extra vertical offset for expander, checkbox and icon
|
||||||
|
@fancy-title-ofs-top: 0px; // extra vertical offset for title
|
||||||
|
@fancy-node-border-width: 1px;
|
||||||
|
@fancy-node-border-radius: 0px;
|
||||||
|
@fancy-node-outline-width: 1px;
|
||||||
|
|
||||||
|
|
||||||
|
// @fancy-icon-width: 16px;
|
||||||
|
// @fancy-icon-height: 16px;
|
||||||
|
// @fancy-line-height: 16px;
|
||||||
|
// @fancy-icon-spacing: 3px;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
.fancytree-plain {
|
||||||
|
span.fancytree-title {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
}
|
||||||
|
&.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title {
|
||||||
|
border-color: #3399ff;
|
||||||
|
}
|
||||||
|
span.fancytree-active span.fancytree-title,
|
||||||
|
span.fancytree-selected span.fancytree-title { // active/selcted nodes inside inactive tree
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-color: #dedede;
|
||||||
|
}
|
||||||
|
span.fancytree-node span.fancytree-selected span.fancytree-title {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
span.fancytree-node:hover span.fancytree-title {
|
||||||
|
background-color: #eff9fe; // hover is always colored, even if tree is unfocused
|
||||||
|
border-color: #70c0e7;
|
||||||
|
}
|
||||||
|
&.fancytree-container.fancytree-treefocus {
|
||||||
|
span.fancytree-active span.fancytree-title,
|
||||||
|
span.fancytree-selected span.fancytree-title {
|
||||||
|
background-color: #cbe8f6;
|
||||||
|
border-color: #26a0da;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table tbody {
|
||||||
|
tr td {
|
||||||
|
border: 1px solid #EDEDED;
|
||||||
|
}
|
||||||
|
span.fancytree-node,
|
||||||
|
span.fancytree-node:hover { // undo standard tree css
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
// Title gets a white background, when hovered. Undo standard node formatting
|
||||||
|
// span.fancytree-title:hover {
|
||||||
|
// border: none; //1px solid transparent;
|
||||||
|
// background: inherit;
|
||||||
|
// background: transparent;
|
||||||
|
// background: none;
|
||||||
|
// filter: none;
|
||||||
|
// }
|
||||||
|
tr:hover {
|
||||||
|
background-color: #E5F3FB;
|
||||||
|
outline: 1px solid #70C0E7;
|
||||||
|
}
|
||||||
|
// tr:hover td {
|
||||||
|
// outline: 1px solid #D8F0FA;
|
||||||
|
// }
|
||||||
|
// tr.fancytree-focused {
|
||||||
|
// border-color: #3399FF;
|
||||||
|
// outline: 1px dotted black;
|
||||||
|
// }
|
||||||
|
tr.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.fancytree-active:hover,
|
||||||
|
tr.fancytree-selected:hover {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
tr.fancytree-active { // dimmed, if inside inactive tree
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
outline: 1px solid #DEDEDE;
|
||||||
|
}
|
||||||
|
tr.fancytree-selected { // dimmed, if inside inactive tree
|
||||||
|
background-color: #F7F7F7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table.fancytree-ext-table.fancytree-treefocus tbody {
|
||||||
|
tr.fancytree-active {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
outline: 1px solid #26A0DA;
|
||||||
|
}
|
||||||
|
tr.fancytree-selected {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
}
|
||||||
6
frontend/js/fancytree/skin-win8/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-win8/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-win8/vline.gif
Normal file
|
After Width: | Height: | Size: 852 B |
BIN
frontend/js/fancytree/skin-xp/icons-rtl.gif
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
frontend/js/fancytree/skin-xp/icons.gif
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
frontend/js/fancytree/skin-xp/loading.gif
Normal file
|
After Width: | Height: | Size: 570 B |
696
frontend/js/fancytree/skin-xp/ui.fancytree.css
Normal file
@@ -0,0 +1,696 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "XP" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Common Styles for Fancytree Skins.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `skin-common.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Helpers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Container and UL / LI
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
font-family: tahoma, arial, helvetica;
|
||||||
|
font-size: 10pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: white;
|
||||||
|
/*border: 1px dotted gray;*/
|
||||||
|
min-height: 0%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul {
|
||||||
|
padding: 0 0 0 16px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container ul > li:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-fancytree-disabled ul.fancytree-container {
|
||||||
|
opacity: 0.5;
|
||||||
|
background-color: silver;
|
||||||
|
}
|
||||||
|
ul.fancytree-connectors.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8P///6Wlpf/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP4ALAAAAAAQABAAAAgpAP0JFHhvoMGDCBMiLKiwocOBDB9KXDixosGIFidizPhwI8eGHj8KDAgAOw==");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib,
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
li.fancytree-animating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Common icon definitions
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-empty,
|
||||||
|
span.fancytree-vline,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-drag-helper-img,
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: left;
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-icon,
|
||||||
|
span.fancytree-checkbox,
|
||||||
|
span.fancytree-expander,
|
||||||
|
span.fancytree-radio,
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
/* Used by icon option: */
|
||||||
|
span.fancytree-custom-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Used by 'icon' node option: */
|
||||||
|
img.fancytree-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 3px;
|
||||||
|
margin-top: 0px;
|
||||||
|
vertical-align: top;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Expander icon
|
||||||
|
*
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-exp-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed, 'n': no children
|
||||||
|
* 2nd character (optional): 'd': lazy (Delayed)
|
||||||
|
* 3rd character (optional): 'l': Last sibling
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander {
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-c span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander {
|
||||||
|
background-position: 0px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander {
|
||||||
|
background-position: -64px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cd span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander {
|
||||||
|
background-position: -64px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-cdl span.fancytree-expander:hover {
|
||||||
|
background-position: -80px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander {
|
||||||
|
background-position: -32px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-e span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-ed span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -80px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander {
|
||||||
|
background-position: -32px -96px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-el span.fancytree-expander:hover,
|
||||||
|
.fancytree-exp-edl span.fancytree-expander:hover {
|
||||||
|
background-position: -48px -96px;
|
||||||
|
}
|
||||||
|
/* Fade out expanders, when container is not hovered or active */
|
||||||
|
.fancytree-fade-expander span.fancytree-expander {
|
||||||
|
transition: opacity 1.5s;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.fancytree-fade-expander:hover span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
|
||||||
|
.fancytree-fade-expander [class*='fancytree-statusnode-'] span.fancytree-expander {
|
||||||
|
transition: opacity 0.6s;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Checkbox icon
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-checkbox {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox {
|
||||||
|
opacity: 0.4;
|
||||||
|
filter: alpha(opacity=40);
|
||||||
|
}
|
||||||
|
.fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -64px -32px;
|
||||||
|
}
|
||||||
|
.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -32px -32px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Radiobutton icon
|
||||||
|
* This is a customization, that may be activated by overriding the 'checkbox'
|
||||||
|
* class name as 'fancytree-radio' in the tree options.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-radio span.fancytree-checkbox {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio span.fancytree-checkbox:hover {
|
||||||
|
background-position: -16px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox {
|
||||||
|
background-position: -64px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover {
|
||||||
|
background-position: -80px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox {
|
||||||
|
background-position: -32px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-selected span.fancytree-checkbox:hover {
|
||||||
|
background-position: -48px -48px;
|
||||||
|
}
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox,
|
||||||
|
.fancytree-radio .fancytree-unselectable span.fancytree-checkbox:hover {
|
||||||
|
background-position: 0px -48px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node type icon
|
||||||
|
* Note: IE6 doesn't correctly evaluate multiples class names,
|
||||||
|
* so we create combined class names that can be used in the CSS.
|
||||||
|
*
|
||||||
|
* Prefix: fancytree-ico-
|
||||||
|
* 1st character: 'e': expanded, 'c': collapsed
|
||||||
|
* 2nd character (optional): 'f': folder
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Documents */
|
||||||
|
.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -16px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
|
||||||
|
background-position: -32px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
|
||||||
|
background-position: -48px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon {
|
||||||
|
background-position: -64px 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-e span.fancytree-icon:hover {
|
||||||
|
background-position: -80px 0px;
|
||||||
|
}
|
||||||
|
/* Folders */
|
||||||
|
.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: 0px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -16px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
|
||||||
|
background-position: -32px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
|
||||||
|
background-position: -48px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon {
|
||||||
|
background-position: -64px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-ico-ef span.fancytree-icon:hover {
|
||||||
|
background-position: -80px -16px;
|
||||||
|
}
|
||||||
|
.fancytree-loading span.fancytree-expander,
|
||||||
|
.fancytree-loading span.fancytree-expander:hover,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-loading span.fancytree-icon:hover {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAKIFAAAAAAAApUJC/4SE/8bGxgAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAFACwAAAAAEAAQAAADKli63K4hPBZLJWTWhZ0QU7d8YTadxTCgosqa6CM6c1Eztw3rJZ83v1gjAQAh+QQFCgAFACwBAAIACwAHAAADFFgqUhEOrqZiGaNqhbf/BUGA4QgmACH5BAUKAAUALAIAAQAMAAUAAAMTWKoi+2OUVkKAcllFyHtW92lBAgAh+QQFCgAFACwEAAEACwAIAAADFlg6o16EFFaEcPHZx1UInfOFZDeSXwIAIfkEBQoABQAsBwABAAcACwAAAxRIVMxaYzQWZxPCYstZ4F83BWFDJgAh+QQFCgAFACwKAAIABQAMAAADFEhUrPxjQPlqEeJhy0J4XhF2H5MAACH5BAUKAAUALAcABAAIAAsAAAMUWKpEu+3JOQa1cwqh+QrBF4LilAAAIfkEBQoABQAsBAAHAAsABwAAAxRYukvE0MFJyxjV4hCYEAtXiN+SAAAh+QQFCgAFACwCAAoADAAFAAADEhhR3ExEOQeZbGM4KUTJE9NNCQAh+QQFCgAFACwBAAcACwAIAAADFhhR3K0uSglnqbYI4QhpWzEMhSeNTQIAIfkEBQoABQAsAgAEAAcACwAAAxMYUczaMC4ZKxMiYjtG7AVBRGICACH5BAUKAAUALAEAAgAFAAwAAAMTWBqhxa8t6ZQQ7tY9husbQThiAgA7");
|
||||||
|
background-position: 0px 0px;
|
||||||
|
}
|
||||||
|
/* Status node icons */
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon,
|
||||||
|
.fancytree-statusnode-error span.fancytree-icon:hover {
|
||||||
|
background-position: 0px -112px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Node titles and highlighting
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
span.fancytree-node {
|
||||||
|
/* See #117 */
|
||||||
|
display: inherit;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 1px;
|
||||||
|
min-height: 16px;
|
||||||
|
}
|
||||||
|
span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
min-height: 16px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
margin: 0px 0 0 3px;
|
||||||
|
border: 0 solid transparent;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-ms-border-radius: 0px;
|
||||||
|
-o-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
span.fancytree-node.fancytree-error span.fancytree-title {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Drag'n'drop support
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter,
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
background: #337ab7;
|
||||||
|
border: 1px solid gray;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-childcounter {
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper span.fancytree-dnd-modifier {
|
||||||
|
background: #5cb85c;
|
||||||
|
border: none;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
|
||||||
|
background-position: -32px -112px;
|
||||||
|
}
|
||||||
|
div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
|
||||||
|
background-position: -16px -112px;
|
||||||
|
}
|
||||||
|
/*** Drop marker icon *********************************************************/
|
||||||
|
#fancytree-drop-marker {
|
||||||
|
width: 32px;
|
||||||
|
position: absolute;
|
||||||
|
background-position: 0px -128px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-after,
|
||||||
|
#fancytree-drop-marker.fancytree-drop-before {
|
||||||
|
width: 64px;
|
||||||
|
background-position: 0px -144px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-copy {
|
||||||
|
background-position: -64px -128px;
|
||||||
|
}
|
||||||
|
#fancytree-drop-marker.fancytree-drop-move {
|
||||||
|
background-position: -32px -128px;
|
||||||
|
}
|
||||||
|
/*** Source node while dragging ***********************************************/
|
||||||
|
span.fancytree-drag-source.fancytree-drag-remove {
|
||||||
|
opacity: 0.15;
|
||||||
|
}
|
||||||
|
/*** Target node while dragging cursor is over it *****************************/
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'rtl' option
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-title {
|
||||||
|
/*unicode-bidi: bidi-override;*/
|
||||||
|
/* optional: reverse title letters */
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-connector,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-icon,
|
||||||
|
.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,
|
||||||
|
.fancytree-container.fancytree-rtl #fancytree-drop-marker {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl ul {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
|
||||||
|
ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'table' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table span.fancytree-node {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'columnview' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
table.fancytree-ext-columnview tbody tr td {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid gray;
|
||||||
|
vertical-align: top;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview tbody tr td > ul li {
|
||||||
|
list-style-image: none;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-type: none;
|
||||||
|
-moz-background-clip: border;
|
||||||
|
-moz-background-inline-policy: continuous;
|
||||||
|
-moz-background-origin: padding;
|
||||||
|
background-attachment: scroll;
|
||||||
|
background-color: transparent;
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
background-image: none;
|
||||||
|
/* no v-lines */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node {
|
||||||
|
position: relative;
|
||||||
|
/* allow positioning of embedded spans */
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
|
||||||
|
background-color: #CBE8F6;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
background-position: 0px -80px;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
|
||||||
|
background-position: -16px -80px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'filter' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-hide,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
|
||||||
|
color: silver;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
|
||||||
|
.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
|
||||||
|
color: black;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
/* Hide expanders if all child nodes are hidden by filter */
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
|
||||||
|
.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-icon,
|
||||||
|
.fancytree-ext-filter span.fancytree-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.fancytree-ext-childcounter span.fancytree-childcounter,
|
||||||
|
.fancytree-ext-filter span.fancytree-childcounter {
|
||||||
|
color: #fff;
|
||||||
|
background: #777;
|
||||||
|
border: 1px solid gray;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
|
right: -6px;
|
||||||
|
min-width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
line-height: 1;
|
||||||
|
vertical-align: baseline;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'wide' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
ul.fancytree-ext-wide {
|
||||||
|
position: relative;
|
||||||
|
min-width: 100%;
|
||||||
|
z-index: 2;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node > span {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: 0px;
|
||||||
|
min-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* 'fixed' extension
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
.fancytree-ext-fixed-wrapper .fancytree-fixed-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderBottom {
|
||||||
|
border-bottom: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.scrollBorderRight {
|
||||||
|
border-right: 3px solid rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 3;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-tr {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-bl {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 2;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.fancytree-ext-fixed-wrapper div.fancytree-fixed-wrapper-br {
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Tree container
|
||||||
|
*/
|
||||||
|
ul.fancytree-container li {
|
||||||
|
background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8P///6Wlpf/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP4ALAAAAAAQABAAAAgpAP0JFHhvoMGDCBMiLKiwocOBDB9KXDixosGIFidizPhwI8eGHj8KDAgAOw==");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
ul.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
ul.fancytree-container li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons.gif");
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
background-position: 0px -64px;
|
||||||
|
}
|
||||||
|
.fancytree-exp-nl span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
background-position: -16px -64px;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
span.fancytree-title {
|
||||||
|
border: 0 solid transparent;
|
||||||
|
}
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
background-color: #F2F7FD;
|
||||||
|
border-color: #B8D6FB;
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
background-color: #EFEBDE;
|
||||||
|
}
|
||||||
|
.fancytree-folder span.fancytree-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-title {
|
||||||
|
color: green;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.fancytree-active span.fancytree-title {
|
||||||
|
background-color: #3169C6 !important;
|
||||||
|
color: white !important;
|
||||||
|
}
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-focused {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
table.fancytree-ext-table tbody tr.fancytree-selected {
|
||||||
|
background-color: #99FDDE;
|
||||||
|
}
|
||||||
126
frontend/js/fancytree/skin-xp/ui.fancytree.less
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
/*!
|
||||||
|
* Fancytree "XP" skin.
|
||||||
|
*
|
||||||
|
* DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
|
||||||
|
* the LESS templates.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import common styles
|
||||||
|
@import "../skin-common.less";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Styles specific to this skin.
|
||||||
|
*
|
||||||
|
* This section is automatically generated from the `ui-fancytree.less` template.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Override the variable after the import.
|
||||||
|
// NOTE: Variables are always resolved as the last definition, even if it is
|
||||||
|
// after where it is used.
|
||||||
|
@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
|
||||||
|
|
||||||
|
@fancy-icon-width: 16px;
|
||||||
|
@fancy-icon-height: 16px;
|
||||||
|
@fancy-icon-spacing: 3px;
|
||||||
|
@fancy-node-border-width: 0;
|
||||||
|
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
@fancy-loading-url: data-uri("@{fancy-image-dir}/loading.gif");
|
||||||
|
// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
|
||||||
|
// instead of linking to that file:
|
||||||
|
// @fancy-inline-sprites: true;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Tree container
|
||||||
|
*/
|
||||||
|
ul.fancytree-container {
|
||||||
|
li {
|
||||||
|
// background-image: url("vline.gif");
|
||||||
|
// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
|
||||||
|
background-image: data-uri("@{fancy-image-dir}/vline.gif");
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
&.fancytree-rtl {
|
||||||
|
li {
|
||||||
|
background-position: right 0;
|
||||||
|
background-image: url("vline-rtl.gif");
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
.useSprite(0, 4);
|
||||||
|
}
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
background-image: url("icons-rtl.gif");
|
||||||
|
.useSprite(1, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Suppress lines for last child node
|
||||||
|
li.fancytree-lastsib {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Suppress lines if level is fixed expanded (option minExpandLevel)
|
||||||
|
ul.fancytree-no-connector > li {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XP theme always displays connectors (not only when .fancytree-connectors is set)
|
||||||
|
.fancytree-exp-n span.fancytree-expander,
|
||||||
|
.fancytree-exp-nl span.fancytree-expander {
|
||||||
|
.setBgImageUrl("icons.gif");
|
||||||
|
// margin-top: 0;
|
||||||
|
}
|
||||||
|
.fancytree-exp-n span.fancytree-expander, // End-node, not last sibling
|
||||||
|
.fancytree-exp-n span.fancytree-expander:hover {
|
||||||
|
.useSprite(0, 4);
|
||||||
|
}
|
||||||
|
.fancytree-exp-nl span.fancytree-expander, // End-node, last sibling
|
||||||
|
.fancytree-exp-nl span.fancytree-expander:hover {
|
||||||
|
.useSprite(1, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node titles
|
||||||
|
*/
|
||||||
|
|
||||||
|
span.fancytree-title {
|
||||||
|
border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
|
||||||
|
}
|
||||||
|
span.fancytree-title:hover {
|
||||||
|
background-color: #F2F7FD; // light blue
|
||||||
|
border-color: #B8D6FB; // darker light blue
|
||||||
|
}
|
||||||
|
span.fancytree-focused span.fancytree-title {
|
||||||
|
outline: 1px dotted black;
|
||||||
|
background-color: #EFEBDE; // gray
|
||||||
|
}
|
||||||
|
.fancytree-folder span.fancytree-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.fancytree-selected span.fancytree-title {
|
||||||
|
color: green;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.fancytree-active span.fancytree-title {
|
||||||
|
background-color: #3169C6 !important;
|
||||||
|
color: white !important; // @ IE6
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 'table' extension
|
||||||
|
*/
|
||||||
|
table.fancytree-ext-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
tbody tr.fancytree-focused {
|
||||||
|
background-color: #99DEFD;
|
||||||
|
}
|
||||||
|
tbody tr.fancytree-active {
|
||||||
|
background-color: royalblue;
|
||||||
|
}
|
||||||
|
tbody tr.fancytree-selected {
|
||||||
|
background-color: #99FDDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
6
frontend/js/fancytree/skin-xp/ui.fancytree.min.css
vendored
Normal file
BIN
frontend/js/fancytree/skin-xp/vline-rtl.gif
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
frontend/js/fancytree/skin-xp/vline.gif
Normal file
|
After Width: | Height: | Size: 844 B |
585
frontend/js/fancytree/src/jquery.fancytree.ariagrid.js
Normal file
@@ -0,0 +1,585 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.ariagrid.js
|
||||||
|
*
|
||||||
|
* Support ARIA compliant markup and keyboard navigation for tree grids with
|
||||||
|
* embedded input controls.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* @requires ext-table
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;( function( $, window, document, undefined ) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/*
|
||||||
|
- References:
|
||||||
|
- https://github.com/w3c/aria-practices/issues/132
|
||||||
|
- https://rawgit.com/w3c/aria-practices/treegrid/examples/treegrid/treegrid-1.html
|
||||||
|
- https://github.com/mar10/fancytree/issues/709
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
|
||||||
|
- In strict mode, how can a user leave an embedded text input, if it is
|
||||||
|
the only control in a row?
|
||||||
|
|
||||||
|
- If rows are hidden I suggest aria-hidden="true" on them (may be optional)
|
||||||
|
=> aria-hidden currently not set (instead: style="display: none") needs to
|
||||||
|
be added to ext-table
|
||||||
|
|
||||||
|
- enable treeOpts.aria by default
|
||||||
|
=> requires some benchmarks, confirm it does not affect performance too much
|
||||||
|
|
||||||
|
- make ext-ariagrid part of ext-table (enable behavior with treeOpts.aria option)
|
||||||
|
=> Requires stable specification
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Allow these navigation keys even when input controls are focused
|
||||||
|
|
||||||
|
var FT = $.ui.fancytree,
|
||||||
|
// TODO: define attribute- and class-names for better compression:
|
||||||
|
clsFancytreeActiveCell = "fancytree-active-cell",
|
||||||
|
clsFancytreeCellMode = "fancytree-cell-mode",
|
||||||
|
clsFancytreeCellNavMode = "fancytree-cell-nav-mode",
|
||||||
|
// Define which keys are handled by embedded control, and should *not* be
|
||||||
|
// passed to tree navigation handler:
|
||||||
|
INPUT_KEYS = {
|
||||||
|
"text": [ "left", "right", "home", "end", "backspace" ],
|
||||||
|
"number": [ "up", "down", "left", "right", "home", "end", "backspace" ],
|
||||||
|
"checkbox": [],
|
||||||
|
"link": [],
|
||||||
|
"radiobutton": [ "up", "down" ],
|
||||||
|
"select-one": [ "up", "down" ],
|
||||||
|
"select-multiple": [ "up", "down" ]
|
||||||
|
},
|
||||||
|
NAV_KEYS = [ "up", "down", "left", "right", "home", "end" ];
|
||||||
|
|
||||||
|
|
||||||
|
/* Calculate TD column index (considering colspans).*/
|
||||||
|
function setActiveDescendant( tree, $target ) {
|
||||||
|
var id = $target ? $target.uniqueId().attr( "id" ) : "";
|
||||||
|
|
||||||
|
tree.$container.attr( "aria-activedescendant", id );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Calculate TD column index (considering colspans).*/
|
||||||
|
function getColIdx( $tr, $td ) {
|
||||||
|
var colspan,
|
||||||
|
td = $td.get( 0 ),
|
||||||
|
idx = 0;
|
||||||
|
|
||||||
|
$tr.children().each( function() {
|
||||||
|
if ( this === td ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
colspan = $( this ).prop( "colspan" );
|
||||||
|
idx += colspan ? colspan : 1;
|
||||||
|
});
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Find TD at given column index (considering colspans).*/
|
||||||
|
function findTdAtColIdx( $tr, colIdx ) {
|
||||||
|
var colspan,
|
||||||
|
res = null,
|
||||||
|
idx = 0;
|
||||||
|
|
||||||
|
$tr.children().each( function() {
|
||||||
|
if ( idx >= colIdx ) {
|
||||||
|
res = $( this );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
colspan = $( this ).prop( "colspan" );
|
||||||
|
idx += colspan ? colspan : 1;
|
||||||
|
});
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Find adjacent cell for a given direction. Skip empty cells and consider merged cells */
|
||||||
|
function findNeighbourTd( tree, $target, keyCode ) {
|
||||||
|
var $td = $target.closest( "td" ),
|
||||||
|
$tr = $td.parent(),
|
||||||
|
treeOpts = tree.options,
|
||||||
|
colIdx = getColIdx( $tr, $td ),
|
||||||
|
$tdNext = null;
|
||||||
|
|
||||||
|
switch ( keyCode ) {
|
||||||
|
case "left":
|
||||||
|
$tdNext = treeOpts.rtl ? $td.next() : $td.prev();
|
||||||
|
break;
|
||||||
|
case "right":
|
||||||
|
$tdNext = treeOpts.rtl ? $td.prev() : $td.next();
|
||||||
|
break;
|
||||||
|
case "up":
|
||||||
|
case "down":
|
||||||
|
while ( true ) {
|
||||||
|
$tr = keyCode === "up" ? $tr.prev() : $tr.next();
|
||||||
|
if ( !$tr.length ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Skip hidden rows
|
||||||
|
if ( $tr.is( ":hidden" ) ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Find adjacent cell in the same column
|
||||||
|
$tdNext = findTdAtColIdx( $tr, colIdx );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "ctrl+home":
|
||||||
|
$tdNext = findTdAtColIdx( $tr.siblings().first(), colIdx );
|
||||||
|
if ( $tdNext.is( ":hidden" ) ) {
|
||||||
|
$tdNext = findNeighbourTd( tree, $tdNext.parent(), "down" );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "ctrl+end":
|
||||||
|
$tdNext = findTdAtColIdx( $tr.siblings().last(), colIdx );
|
||||||
|
if ( $tdNext.is( ":hidden" ) ) {
|
||||||
|
$tdNext = findNeighbourTd( tree, $tdNext.parent(), "up" );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "home":
|
||||||
|
$tdNext = treeOpts.rtl ? $tr.children( "td" ).last() : $tr.children( "td" ).first();
|
||||||
|
break;
|
||||||
|
case "end":
|
||||||
|
$tdNext = treeOpts.rtl ? $tr.children( "td" ).first() : $tr.children( "td" ).last();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ( $tdNext && $tdNext.length ) ? $tdNext : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-ariagrid] Set active cell and activate cell-mode if needed.
|
||||||
|
* Pass $td=null to enter row-mode.
|
||||||
|
*
|
||||||
|
* See also FancytreeNode#setActive(flag, {cell: idx})
|
||||||
|
*
|
||||||
|
* @param {jQuery | Element | integer} [$td]
|
||||||
|
* @alias Fancytree#activateCell
|
||||||
|
* @requires jquery.fancytree.ariagrid.js
|
||||||
|
* @since 2.23
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.activateCell = function( $td ) {
|
||||||
|
var $input, $tr,
|
||||||
|
treeOpts = this.options,
|
||||||
|
opts = treeOpts.ariagrid,
|
||||||
|
$prevTd = this.$activeTd || null,
|
||||||
|
$prevTr = $prevTd ? $prevTd.closest( "tr" ) : null;
|
||||||
|
|
||||||
|
// this.debug( "activateCell: " + ( $prevTd ? $prevTd.text() : "null" ) +
|
||||||
|
// " -> " + ( $td ? $td.text() : "OFF" ) );
|
||||||
|
|
||||||
|
// TODO: make available as event
|
||||||
|
// if( this._triggerNodeEvent("cellActivate", node, event, {activeTd: tree.$activeTd, colIdx: colIdx}) === false ) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
|
if ( $td ) {
|
||||||
|
FT.assert( $td.length, "Invalid active cell" );
|
||||||
|
this.$container.addClass( clsFancytreeCellMode );
|
||||||
|
$tr = $td.closest( "tr" );
|
||||||
|
if ( $prevTd ) {
|
||||||
|
// cell-mode => cell-mode
|
||||||
|
if ( $prevTd.is( $td ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$prevTd
|
||||||
|
.removeAttr( "tabindex" )
|
||||||
|
.removeClass( clsFancytreeActiveCell );
|
||||||
|
|
||||||
|
if ( !$prevTr.is( $tr ) ) {
|
||||||
|
// We are moving to a different row: only the inputs in the
|
||||||
|
// active row should be tabbable
|
||||||
|
$prevTr.find( ">td :input,a" ).attr( "tabindex", "-1" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$tr.find( ">td :input:enabled,a" ).attr( "tabindex", "0" );
|
||||||
|
FT.getNode( $td ).setActive();
|
||||||
|
$td.addClass( clsFancytreeActiveCell );
|
||||||
|
this.$activeTd = $td;
|
||||||
|
|
||||||
|
$input = $td.find( ":input:enabled,a" );
|
||||||
|
this.debug( "Focus input", $input );
|
||||||
|
if ( opts.autoFocusInput && $input.length ) {
|
||||||
|
$input.focus();
|
||||||
|
setActiveDescendant( this, $input );
|
||||||
|
} else {
|
||||||
|
$td.attr( "tabindex", "-1" ).focus();
|
||||||
|
setActiveDescendant( this, $td );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// $td == null: switch back to row-mode
|
||||||
|
this.$container.removeClass( clsFancytreeCellMode + " " + clsFancytreeCellNavMode );
|
||||||
|
// console.log("activateCell: set row-mode for " + this.activeNode, $prevTd);
|
||||||
|
if ( $prevTd ) {
|
||||||
|
// cell-mode => row-mode
|
||||||
|
$prevTd
|
||||||
|
.removeAttr( "tabindex" )
|
||||||
|
.removeClass( clsFancytreeActiveCell );
|
||||||
|
// In row-mode, only embedded inputs of the active row are tabbable
|
||||||
|
$prevTr.find( "td" )
|
||||||
|
.blur() // we need to blur first, because otherwise the focus frame is not reliably removed(?)
|
||||||
|
.removeAttr( "tabindex" );
|
||||||
|
$prevTr.find( ">td :input,a" ).attr( "tabindex", "-1" );
|
||||||
|
this.$activeTd = null;
|
||||||
|
// The cell lost focus, but the tree still needs to capture keys:
|
||||||
|
this.activeNode.setFocus();
|
||||||
|
setActiveDescendant( this, $tr );
|
||||||
|
} else {
|
||||||
|
// row-mode => row-mode (nothing to do)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Extension code
|
||||||
|
*/
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "ariagrid",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
// Internal behavior flags, currently controlled via `extendedMode`
|
||||||
|
autoFocusInput: true, // true: user must hit Enter to focus control
|
||||||
|
activateCellOnDoubelclick: true,
|
||||||
|
enterToCellMode: false,
|
||||||
|
// End of internal flags
|
||||||
|
extendedMode: false,
|
||||||
|
cellFocus: "allow",
|
||||||
|
// TODO: document `defaultCellAction` event
|
||||||
|
// TODO: use a global tree option `name` or `title` instead?:
|
||||||
|
label: "Tree Grid" // Added as `aria-label` attribute
|
||||||
|
},
|
||||||
|
|
||||||
|
treeInit: function( ctx ) {
|
||||||
|
var tree = ctx.tree,
|
||||||
|
treeOpts = ctx.options,
|
||||||
|
opts = treeOpts.ariagrid;
|
||||||
|
|
||||||
|
// ariagrid requires the table extension to be loaded before itself
|
||||||
|
this._requireExtension( "table", true, true );
|
||||||
|
if ( !treeOpts.aria ) {
|
||||||
|
$.error( "ext-ariagrid requires `aria: true`" );
|
||||||
|
}
|
||||||
|
|
||||||
|
this._superApply( arguments );
|
||||||
|
|
||||||
|
this.$activeTd = null;
|
||||||
|
this.forceNavMode = false;
|
||||||
|
if ( opts.extendedMode ) {
|
||||||
|
opts.autoFocusInput = true; // false;
|
||||||
|
opts.enterToCellMode = true;
|
||||||
|
opts.activateCellOnDoubelclick = true;
|
||||||
|
this.forceNavMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$container
|
||||||
|
.addClass( "fancytree-ext-ariagrid" )
|
||||||
|
.toggleClass( clsFancytreeCellNavMode, !!this.forceNavMode )
|
||||||
|
.attr( "aria-label", "" + opts.label );
|
||||||
|
this.$container.find( "thead > tr > th" )
|
||||||
|
.attr( "role", "columnheader" );
|
||||||
|
|
||||||
|
this.nodeColumnIdx = treeOpts.table.nodeColumnIdx;
|
||||||
|
this.checkboxColumnIdx = treeOpts.table.checkboxColumnIdx;
|
||||||
|
if ( this.checkboxColumnIdx == null ) {
|
||||||
|
this.checkboxColumnIdx = this.nodeColumnIdx;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$container.on( "focusin", function( event ) {
|
||||||
|
// Activate node if embedded input gets focus (due to a click)
|
||||||
|
var node = FT.getNode( event.target ),
|
||||||
|
$td = $( event.target ).closest( "td" );
|
||||||
|
|
||||||
|
// tree.debug( "focusin: " + ( node ? node.title : "null" ) +
|
||||||
|
// ", target: " + ( $td ? $td.text() : null ) +
|
||||||
|
// ", node was active: " + ( node && node.isActive() ) +
|
||||||
|
// ", last cell: " + ( tree.$activeTd ? tree.$activeTd.text() : null ) );
|
||||||
|
// tree.debug( "focusin: target", event.target );
|
||||||
|
|
||||||
|
if ( node && !$td.is( tree.$activeTd ) && $( event.target ).is( ":input" ) ) {
|
||||||
|
node.debug( "Activate cell on INPUT focus event" );
|
||||||
|
tree.activateCell( $td );
|
||||||
|
}
|
||||||
|
|
||||||
|
}).on( "fancytreeinit", function( event, data ) {
|
||||||
|
if ( opts.cellFocus === "start" ) {
|
||||||
|
tree.debug( "Enforce cell-mode on init" );
|
||||||
|
tree.debug( "init", ( tree.getActiveNode() || tree.getFirstChild() ) );
|
||||||
|
( tree.getActiveNode() || tree.getFirstChild() )
|
||||||
|
.setActive( true, { cell: tree.nodeColumnIdx });
|
||||||
|
tree.debug( "init2", ( tree.getActiveNode() || tree.getFirstChild() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}).on( "fancytreefocustree", function( event, data ) {
|
||||||
|
// Enforce cell-mode when container gets focus
|
||||||
|
if ( ( opts.cellFocus === "force" ) && !tree.activeTd ) {
|
||||||
|
var node = tree.getActiveNode() || tree.getFirstChild();
|
||||||
|
tree.debug( "Enforce cell-mode on focusTree event" );
|
||||||
|
node.setActive( true, { cell: 0 });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
nodeClick: function( ctx ) {
|
||||||
|
var targetType = ctx.targetType,
|
||||||
|
tree = ctx.tree,
|
||||||
|
node = ctx.node,
|
||||||
|
event = ctx.originalEvent,
|
||||||
|
$td = $( event.target ).closest( "td" );
|
||||||
|
|
||||||
|
tree.debug( "nodeClick: node: " + ( node ? node.title : "null" ) +
|
||||||
|
", targetType: " + targetType +
|
||||||
|
", target: " + ( $td.length ? $td.text() : null ) +
|
||||||
|
", node was active: " + ( node && node.isActive() ) +
|
||||||
|
", last cell: " + ( tree.$activeTd ? tree.$activeTd.text() : null ) );
|
||||||
|
|
||||||
|
if ( tree.$activeTd ) {
|
||||||
|
// If already in cell-mode, activate new cell
|
||||||
|
tree.activateCell( $td );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return this._superApply( arguments );
|
||||||
|
},
|
||||||
|
nodeDblclick: function( ctx ) {
|
||||||
|
var tree = ctx.tree,
|
||||||
|
treeOpts = ctx.options,
|
||||||
|
opts = treeOpts.ariagrid,
|
||||||
|
event = ctx.originalEvent,
|
||||||
|
$td = $( event.target ).closest( "td" );
|
||||||
|
|
||||||
|
// console.log("nodeDblclick", tree.$activeTd, ctx.options.ariagrid.cellFocus)
|
||||||
|
if ( opts.activateCellOnDoubelclick && !tree.$activeTd && opts.cellFocus === "allow" ) {
|
||||||
|
// If in row-mode, activate new cell
|
||||||
|
tree.activateCell( $td );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return this._superApply( arguments );
|
||||||
|
},
|
||||||
|
nodeRenderStatus: function( ctx ) {
|
||||||
|
// Set classes for current status
|
||||||
|
var res,
|
||||||
|
node = ctx.node,
|
||||||
|
$tr = $( node.tr );
|
||||||
|
|
||||||
|
res = this._super( ctx );
|
||||||
|
|
||||||
|
if ( node.parent ) {
|
||||||
|
$tr
|
||||||
|
.attr( "aria-level", node.getLevel() )
|
||||||
|
.attr( "aria-setsize", node.parent.children.length )
|
||||||
|
.attr( "aria-posinset", node.getIndex() + 1 );
|
||||||
|
|
||||||
|
if ( $tr.is( ":hidden" ) ) {
|
||||||
|
$tr.attr( "aria-hidden", true );
|
||||||
|
} else {
|
||||||
|
$tr.removeAttr( "aria-hidden" );
|
||||||
|
}
|
||||||
|
// this.debug("nodeRenderStatus: " + this.$activeTd + ", " + $tr.attr("aria-expanded"));
|
||||||
|
// In cell-mode, move aria-expanded attribute from TR to first child TD
|
||||||
|
if ( this.$activeTd && $tr.attr( "aria-expanded" ) != null ) {
|
||||||
|
$tr.remove( "aria-expanded" );
|
||||||
|
$tr.find( "td" ).eq( this.nodeColumnIdx )
|
||||||
|
.attr( "aria-expanded", node.isExpanded() );
|
||||||
|
} else {
|
||||||
|
$tr.find( "td" ).eq( this.nodeColumnIdx ).removeAttr( "aria-expanded" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
nodeSetActive: function( ctx, flag, callOpts ) {
|
||||||
|
var $td,
|
||||||
|
node = ctx.node,
|
||||||
|
tree = ctx.tree,
|
||||||
|
// treeOpts = ctx.options,
|
||||||
|
// opts = treeOpts.ariagrid,
|
||||||
|
$tr = $( node.tr );
|
||||||
|
|
||||||
|
flag = ( flag !== false );
|
||||||
|
// node.debug( "nodeSetActive(" + flag + ")" );
|
||||||
|
// Support custom `cell` option
|
||||||
|
if ( flag && callOpts && callOpts.cell != null ) {
|
||||||
|
// `cell` may be a col-index, <td>, or `$(td)`
|
||||||
|
if ( typeof callOpts.cell === "number" ) {
|
||||||
|
$td = findTdAtColIdx( $tr, callOpts.cell );
|
||||||
|
} else {
|
||||||
|
$td = $( callOpts.cell );
|
||||||
|
}
|
||||||
|
tree.activateCell( $td );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// tree.debug( "nodeSetActive: activeNode " + this.activeNode );
|
||||||
|
return this._superApply( arguments );
|
||||||
|
},
|
||||||
|
nodeKeydown: function( ctx ) {
|
||||||
|
var handleKeys, inputType, $td,
|
||||||
|
tree = ctx.tree,
|
||||||
|
node = ctx.node,
|
||||||
|
treeOpts = ctx.options,
|
||||||
|
opts = treeOpts.ariagrid,
|
||||||
|
event = ctx.originalEvent,
|
||||||
|
eventString = FT.eventToString( event ),
|
||||||
|
$target = $( event.target ),
|
||||||
|
$activeTd = this.$activeTd,
|
||||||
|
$activeTr = $activeTd ? $activeTd.closest( "tr" ) : null,
|
||||||
|
colIdx = $activeTd ? getColIdx( $activeTr, $activeTd ) : -1,
|
||||||
|
forceNav = $activeTd && opts.extendedMode &&
|
||||||
|
tree.forceNavMode && $.inArray( eventString, NAV_KEYS ) >= 0;
|
||||||
|
|
||||||
|
if ( $target.is( ":input:enabled" ) ) {
|
||||||
|
inputType = $target.prop( "type" );
|
||||||
|
} else if ( $target.is( "a" ) ) {
|
||||||
|
inputType = "link";
|
||||||
|
}
|
||||||
|
ctx.tree.debug( "nodeKeydown(" + eventString + "), activeTd: '" +
|
||||||
|
( $activeTd && $activeTd.text() ) + "', inputType: " + inputType );
|
||||||
|
|
||||||
|
if ( inputType && eventString !== "esc" && !forceNav ) {
|
||||||
|
handleKeys = INPUT_KEYS[ inputType ];
|
||||||
|
if ( handleKeys && $.inArray( eventString, handleKeys ) >= 0 ) {
|
||||||
|
return; // Let input control handle the key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ( eventString ) {
|
||||||
|
case "right":
|
||||||
|
if ( $activeTd ) {
|
||||||
|
// Cell mode: move to neighbour (stop on right border)
|
||||||
|
$td = findNeighbourTd( tree, $activeTd, eventString );
|
||||||
|
if ( $td ) {
|
||||||
|
tree.activateCell( $td );
|
||||||
|
}
|
||||||
|
} else if ( node && !node.isExpanded() && node.hasChildren() !== false ) {
|
||||||
|
// Row mode and current node can be expanded:
|
||||||
|
// default handling will expand.
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
// Row mode: switch to cell-mode
|
||||||
|
$td = $( node.tr ).find( ">td:first" );
|
||||||
|
tree.activateCell( $td );
|
||||||
|
}
|
||||||
|
return false; // no default handling
|
||||||
|
|
||||||
|
case "left":
|
||||||
|
case "home":
|
||||||
|
case "end":
|
||||||
|
case "ctrl+home":
|
||||||
|
case "ctrl+end":
|
||||||
|
case "up":
|
||||||
|
case "down":
|
||||||
|
if ( $activeTd ) {
|
||||||
|
// Cell mode: move to neighbour
|
||||||
|
$td = findNeighbourTd( tree, $activeTd, eventString );
|
||||||
|
// Note: $td may be null if we move outside bounds. In this case
|
||||||
|
// we switch back to row-mode
|
||||||
|
if ( $td || opts.cellFocus !== "force" ) {
|
||||||
|
tree.activateCell( $td );
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "esc":
|
||||||
|
if ( opts.extendedMode && $activeTd && !tree.forceNavMode ) {
|
||||||
|
// Extended mode: switch from cell-edit-mode to cell-nav-mode
|
||||||
|
// $target.closest( "td" ).focus();
|
||||||
|
tree.forceNavMode = true;
|
||||||
|
tree.$container.addClass( clsFancytreeCellNavMode );
|
||||||
|
tree.debug( "Enter cell-edit-mode" );
|
||||||
|
return false;
|
||||||
|
} else if ( opts.extendedMode && $activeTd && opts.cellFocus !== "force" ) {
|
||||||
|
// Extended mode: switch back from cell-mode to row-mode
|
||||||
|
tree.activateCell( null );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "return":
|
||||||
|
// Let caller override the default action:
|
||||||
|
if ( tree._triggerNodeEvent( "defaultCellAction", node, event,
|
||||||
|
{ activeTd: tree.$activeTd, colIdx: colIdx }) === false ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ( $activeTd ) {
|
||||||
|
// Apply 'default action' for embedded cell control
|
||||||
|
if ( colIdx === this.nodeColumnIdx ) {
|
||||||
|
node.toggleExpanded();
|
||||||
|
return false;
|
||||||
|
} else if ( colIdx === this.checkboxColumnIdx ) {
|
||||||
|
node.toggleSelected();
|
||||||
|
return false;
|
||||||
|
} else if ( $activeTd.find( ":checkbox:enabled" ).length ) {
|
||||||
|
// Embedded checkboxes are always toggled (ignoring `autoFocusInput`)
|
||||||
|
$activeTd.find( ":checkbox:enabled" ).click();
|
||||||
|
return false;
|
||||||
|
} else if ( opts.extendedMode && tree.forceNavMode && $target.is( ":input" ) ) {
|
||||||
|
tree.forceNavMode = false;
|
||||||
|
tree.$container.removeClass( clsFancytreeCellNavMode );
|
||||||
|
tree.debug( "enable cell-edit-mode" );
|
||||||
|
// Switch from input-mode back to cell-mode
|
||||||
|
// setTimeout( function() {
|
||||||
|
// $activeTd.focus();
|
||||||
|
// }, 0 );
|
||||||
|
// } else if ( !opts.autoFocusInput && !inputType &&
|
||||||
|
// $activeTd.find( ":input:enabled" ).length ) {
|
||||||
|
// // autoFocusInput is off:
|
||||||
|
// // If we don't focus embedded inputs on navigation by default,
|
||||||
|
// // we do it as ENTER default action
|
||||||
|
// $target.find( ":input:enabled" ).focus();
|
||||||
|
// return false;
|
||||||
|
} else if ( $activeTd.find( "a" ).length ) {
|
||||||
|
$activeTd.find( "a" )[ 0 ].click();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
// ENTER in row-mode
|
||||||
|
if ( opts.enterToCellMode ) {
|
||||||
|
// Switch from row-mode to cell-mode
|
||||||
|
$td = $( node.tr ).find( ">td:nth(" + this.nodeColumnIdx + ")" );
|
||||||
|
tree.activateCell( $td );
|
||||||
|
return false; // no default handling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "space":
|
||||||
|
if ( $activeTd ) {
|
||||||
|
if ( colIdx === this.checkboxColumnIdx ) {
|
||||||
|
node.toggleSelected();
|
||||||
|
} else if ( $activeTd.find( ":checkbox:enabled" ).length ) {
|
||||||
|
$activeTd.find( ":checkbox:enabled" ).click();
|
||||||
|
}
|
||||||
|
return false; // no default handling
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Allow to focus input by typing alphanum keys:
|
||||||
|
// TODO: not so easy to simulate keytrokes on inputs!
|
||||||
|
// http://stackoverflow.com/questions/6124692/jquery-simulating-keypress-event-on-an-input-field
|
||||||
|
// if ( opts.extendedMode && $activeTd &&
|
||||||
|
// eventString.length === 1 &&
|
||||||
|
// !$target.is(":input") && $activeTd.find(":input:enabled").length ) {
|
||||||
|
// alert("in");
|
||||||
|
// return false; // no default handling
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
return this._superApply( arguments );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})( jQuery, window, document );
|
||||||
210
frontend/js/fancytree/src/jquery.fancytree.childcounter.js
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
// Extending Fancytree
|
||||||
|
// ===================
|
||||||
|
//
|
||||||
|
// See also the [live demo](http://wwwendt.de/tech/fancytree/demo/sample-ext-childcounter.html) of this code.
|
||||||
|
//
|
||||||
|
// Every extension should have a comment header containing some information
|
||||||
|
// about the author, copyright and licensing. Also a pointer to the latest
|
||||||
|
// source code.
|
||||||
|
// Prefix with `/*!` so the comment is not removed by the minifier.
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* jquery.fancytree.childcounter.js
|
||||||
|
*
|
||||||
|
* Add a child counter bubble to tree nodes.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
// To keep the global namespace clean, we wrap everything in a closure
|
||||||
|
|
||||||
|
;(function($, undefined) {
|
||||||
|
|
||||||
|
// Consider to use [strict mode](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/)
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// The [coding guidelines](http://contribute.jquery.org/style-guide/js/)
|
||||||
|
// require jshint compliance.
|
||||||
|
// But for this sample, we want to allow unused variables for demonstration purpose.
|
||||||
|
|
||||||
|
/*jshint unused:false */
|
||||||
|
|
||||||
|
|
||||||
|
// Adding methods
|
||||||
|
// --------------
|
||||||
|
|
||||||
|
// New member functions can be added to the `Fancytree` class.
|
||||||
|
// This function will be available for every tree instance:
|
||||||
|
//
|
||||||
|
// var tree = $("#tree").fancytree("getTree");
|
||||||
|
// tree.countSelected(false);
|
||||||
|
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.countSelected = function(topOnly){
|
||||||
|
var tree = this,
|
||||||
|
treeOptions = tree.options;
|
||||||
|
|
||||||
|
return tree.getSelectedNodes(topOnly).length;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// The `FancytreeNode` class can also be easily extended. This would be called
|
||||||
|
// like
|
||||||
|
// node.updateCounters();
|
||||||
|
//
|
||||||
|
// It is also good practice to add a docstring comment.
|
||||||
|
/**
|
||||||
|
* [ext-childcounter] Update counter badges for `node` and its parents.
|
||||||
|
* May be called in the `loadChildren` event, to update parents of lazy loaded
|
||||||
|
* nodes.
|
||||||
|
* @alias FancytreeNode#updateCounters
|
||||||
|
* @requires jquery.fancytree.childcounters.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.updateCounters = function(){
|
||||||
|
var node = this,
|
||||||
|
$badge = $("span.fancytree-childcounter", node.span),
|
||||||
|
extOpts = node.tree.options.childcounter,
|
||||||
|
count = node.countChildren(extOpts.deep);
|
||||||
|
|
||||||
|
node.data.childCounter = count;
|
||||||
|
if( (count || !extOpts.hideZeros) && (!node.isExpanded() || !extOpts.hideExpanded) ) {
|
||||||
|
if( !$badge.length ) {
|
||||||
|
$badge = $("<span class='fancytree-childcounter'/>").appendTo($("span.fancytree-icon", node.span));
|
||||||
|
}
|
||||||
|
$badge.text(count);
|
||||||
|
} else {
|
||||||
|
$badge.remove();
|
||||||
|
}
|
||||||
|
if( extOpts.deep && !node.isTopLevel() && !node.isRoot() ) {
|
||||||
|
node.parent.updateCounters();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Finally, we can extend the widget API and create functions that are called
|
||||||
|
// like so:
|
||||||
|
//
|
||||||
|
// $("#tree").fancytree("widgetMethod1", "abc");
|
||||||
|
|
||||||
|
$.ui.fancytree.prototype.widgetMethod1 = function(arg1){
|
||||||
|
var tree = this.tree;
|
||||||
|
return arg1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Register a Fancytree extension
|
||||||
|
// ------------------------------
|
||||||
|
// A full blown extension, extension is available for all trees and can be
|
||||||
|
// enabled like so (see also the [live demo](http://wwwendt.de/tech/fancytree/demo/sample-ext-childcounter.html)):
|
||||||
|
//
|
||||||
|
// <script src="../src/jquery.fancytree.js"></script>
|
||||||
|
// <script src="../src/jquery.fancytree.childcounter.js"></script>
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
// $("#tree").fancytree({
|
||||||
|
// extensions: ["childcounter"],
|
||||||
|
// childcounter: {
|
||||||
|
// hideExpanded: true
|
||||||
|
// },
|
||||||
|
// ...
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/* 'childcounter' extension */
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
// Every extension must be registered by a unique name.
|
||||||
|
name: "childcounter",
|
||||||
|
// Version information should be compliant with [semver](http://semver.org)
|
||||||
|
version: "2.22.5",
|
||||||
|
|
||||||
|
// Extension specific options and their defaults.
|
||||||
|
// This options will be available as `tree.options.childcounter.hideExpanded`
|
||||||
|
|
||||||
|
options: {
|
||||||
|
deep: true,
|
||||||
|
hideZeros: true,
|
||||||
|
hideExpanded: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// Attributes other than `options` (or functions) can be defined here, and
|
||||||
|
// will be added to the tree.ext.EXTNAME namespace, in this case `tree.ext.childcounter.foo`.
|
||||||
|
// They can also be accessed as `this._local.foo` from within the extension
|
||||||
|
// methods.
|
||||||
|
foo: 42,
|
||||||
|
|
||||||
|
// Local functions are prefixed with an underscore '_'.
|
||||||
|
// Callable as `this._local._appendCounter()`.
|
||||||
|
|
||||||
|
_appendCounter: function(bar){
|
||||||
|
var tree = this;
|
||||||
|
},
|
||||||
|
|
||||||
|
// **Override virtual methods for this extension.**
|
||||||
|
//
|
||||||
|
// Fancytree implements a number of 'hook methods', prefixed by 'node...' or 'tree...'.
|
||||||
|
// with a `ctx` argument (see [EventData](http://www.wwwendt.de/tech/fancytree/doc/jsdoc/global.html#EventData)
|
||||||
|
// for details) and an extended calling context:<br>
|
||||||
|
// `this` : the Fancytree instance<br>
|
||||||
|
// `this._local`: the namespace that contains extension attributes and private methods (same as this.ext.EXTNAME)<br>
|
||||||
|
// `this._super`: the virtual function that was overridden (member of previous extension or Fancytree)
|
||||||
|
//
|
||||||
|
// See also the [complete list of available hook functions](http://www.wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree_Hooks.html).
|
||||||
|
|
||||||
|
/* Init */
|
||||||
|
// `treeInit` is triggered when a tree is initalized. We can set up classes or
|
||||||
|
// bind event handlers here...
|
||||||
|
treeInit: function(ctx){
|
||||||
|
var tree = this, // same as ctx.tree,
|
||||||
|
opts = ctx.options,
|
||||||
|
extOpts = ctx.options.childcounter;
|
||||||
|
// Optionally check for dependencies with other extensions
|
||||||
|
/* this._requireExtension("glyph", false, false); */
|
||||||
|
// Call the base implementation
|
||||||
|
this._superApply(arguments);
|
||||||
|
// Add a class to the tree container
|
||||||
|
this.$container.addClass("fancytree-ext-childcounter");
|
||||||
|
},
|
||||||
|
|
||||||
|
// Destroy this tree instance (we only call the default implementation, so
|
||||||
|
// this method could as well be omitted).
|
||||||
|
|
||||||
|
treeDestroy: function(ctx){
|
||||||
|
this._superApply(arguments);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Overload the `renderTitle` hook, to append a counter badge
|
||||||
|
nodeRenderTitle: function(ctx, title) {
|
||||||
|
var node = ctx.node,
|
||||||
|
extOpts = ctx.options.childcounter,
|
||||||
|
count = (node.data.childCounter == null) ? node.countChildren(extOpts.deep) : +node.data.childCounter;
|
||||||
|
// Let the base implementation render the title
|
||||||
|
// We use `_super()` instead of `_superApply()` here, since it is a little bit
|
||||||
|
// more performant when called often
|
||||||
|
this._super(ctx, title);
|
||||||
|
// Append a counter badge
|
||||||
|
if( (count || ! extOpts.hideZeros) && (!node.isExpanded() || !extOpts.hideExpanded) ){
|
||||||
|
$("span.fancytree-icon", node.span).append($("<span class='fancytree-childcounter'/>").text(count));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Overload the `setExpanded` hook, so the counters are updated
|
||||||
|
nodeSetExpanded: function(ctx, flag, callOpts) {
|
||||||
|
var tree = ctx.tree,
|
||||||
|
node = ctx.node;
|
||||||
|
// Let the base implementation expand/collapse the node, then redraw the title
|
||||||
|
// after the animation has finished
|
||||||
|
return this._superApply(arguments).always(function(){
|
||||||
|
tree.nodeRenderTitle(ctx);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of extension definition
|
||||||
|
});
|
||||||
|
// End of namespace closure
|
||||||
|
}(jQuery));
|
||||||
465
frontend/js/fancytree/src/jquery.fancytree.clones.js
Normal file
@@ -0,0 +1,465 @@
|
|||||||
|
/*!
|
||||||
|
*
|
||||||
|
* jquery.fancytree.clones.js
|
||||||
|
* Support faster lookup of nodes by key and shared ref-ids.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
function _assert(cond, msg){
|
||||||
|
// TODO: see qunit.js extractStacktrace()
|
||||||
|
if(!cond){
|
||||||
|
msg = msg ? ": " + msg : "";
|
||||||
|
$.error("Assertion failed" + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return first occurrence of member from array. */
|
||||||
|
function _removeArrayMember(arr, elem) {
|
||||||
|
// TODO: use Array.indexOf for IE >= 9
|
||||||
|
var i;
|
||||||
|
for (i = arr.length - 1; i >= 0; i--) {
|
||||||
|
if (arr[i] === elem) {
|
||||||
|
arr.splice(i, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Calculate a 32 bit FNV-1a hash
|
||||||
|
// * Found here: https://gist.github.com/vaiorabbit/5657561
|
||||||
|
// * Ref.: http://isthe.com/chongo/tech/comp/fnv/
|
||||||
|
// *
|
||||||
|
// * @param {string} str the input value
|
||||||
|
// * @param {boolean} [asString=false] set to true to return the hash value as
|
||||||
|
// * 8-digit hex string instead of an integer
|
||||||
|
// * @param {integer} [seed] optionally pass the hash of the previous chunk
|
||||||
|
// * @returns {integer | string}
|
||||||
|
// */
|
||||||
|
// function hashFnv32a(str, asString, seed) {
|
||||||
|
// /*jshint bitwise:false */
|
||||||
|
// var i, l,
|
||||||
|
// hval = (seed === undefined) ? 0x811c9dc5 : seed;
|
||||||
|
|
||||||
|
// for (i = 0, l = str.length; i < l; i++) {
|
||||||
|
// hval ^= str.charCodeAt(i);
|
||||||
|
// hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);
|
||||||
|
// }
|
||||||
|
// if( asString ){
|
||||||
|
// // Convert to 8 digit hex string
|
||||||
|
// return ("0000000" + (hval >>> 0).toString(16)).substr(-8);
|
||||||
|
// }
|
||||||
|
// return hval >>> 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
|
||||||
|
* @see http://github.com/garycourt/murmurhash-js
|
||||||
|
* @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
|
||||||
|
* @see http://sites.google.com/site/murmurhash/
|
||||||
|
*
|
||||||
|
* @param {string} key ASCII only
|
||||||
|
* @param {boolean} [asString=false]
|
||||||
|
* @param {number} seed Positive integer only
|
||||||
|
* @return {number} 32-bit positive integer hash
|
||||||
|
*/
|
||||||
|
function hashMurmur3(key, asString, seed) {
|
||||||
|
/*jshint bitwise:false */
|
||||||
|
var h1b, k1,
|
||||||
|
remainder = key.length & 3,
|
||||||
|
bytes = key.length - remainder,
|
||||||
|
h1 = seed,
|
||||||
|
c1 = 0xcc9e2d51,
|
||||||
|
c2 = 0x1b873593,
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
while (i < bytes) {
|
||||||
|
k1 =
|
||||||
|
((key.charCodeAt(i) & 0xff)) |
|
||||||
|
((key.charCodeAt(++i) & 0xff) << 8) |
|
||||||
|
((key.charCodeAt(++i) & 0xff) << 16) |
|
||||||
|
((key.charCodeAt(++i) & 0xff) << 24);
|
||||||
|
++i;
|
||||||
|
|
||||||
|
k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
|
||||||
|
k1 = (k1 << 15) | (k1 >>> 17);
|
||||||
|
k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
|
||||||
|
|
||||||
|
h1 ^= k1;
|
||||||
|
h1 = (h1 << 13) | (h1 >>> 19);
|
||||||
|
h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
|
||||||
|
h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
k1 = 0;
|
||||||
|
|
||||||
|
switch (remainder) {
|
||||||
|
/*jshint -W086:true */
|
||||||
|
case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
|
||||||
|
case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
|
||||||
|
case 1: k1 ^= (key.charCodeAt(i) & 0xff);
|
||||||
|
|
||||||
|
k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
|
||||||
|
k1 = (k1 << 15) | (k1 >>> 17);
|
||||||
|
k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
|
||||||
|
h1 ^= k1;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 ^= key.length;
|
||||||
|
|
||||||
|
h1 ^= h1 >>> 16;
|
||||||
|
h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
|
||||||
|
h1 ^= h1 >>> 13;
|
||||||
|
h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
|
||||||
|
h1 ^= h1 >>> 16;
|
||||||
|
|
||||||
|
if( asString ){
|
||||||
|
// Convert to 8 digit hex string
|
||||||
|
return ("0000000" + (h1 >>> 0).toString(16)).substr(-8);
|
||||||
|
}
|
||||||
|
return h1 >>> 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.info(hashMurmur3("costarring"));
|
||||||
|
// console.info(hashMurmur3("costarring", true));
|
||||||
|
// console.info(hashMurmur3("liquid"));
|
||||||
|
// console.info(hashMurmur3("liquid", true));
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return a unique key for node by calculationg the hash of the parents refKey-list
|
||||||
|
*/
|
||||||
|
function calcUniqueKey(node) {
|
||||||
|
var key,
|
||||||
|
path = $.map(node.getParentList(false, true), function(e){ return e.refKey || e.key; });
|
||||||
|
path = path.join("/");
|
||||||
|
key = "id_" + hashMurmur3(path, true);
|
||||||
|
// node.debug(path + " -> " + key);
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-clones] Return a list of clone-nodes or null.
|
||||||
|
* @param {boolean} [includeSelf=false]
|
||||||
|
* @returns {FancytreeNode[] | null}
|
||||||
|
*
|
||||||
|
* @alias FancytreeNode#getCloneList
|
||||||
|
* @requires jquery.fancytree.clones.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.getCloneList = function(includeSelf){
|
||||||
|
var key,
|
||||||
|
tree = this.tree,
|
||||||
|
refList = tree.refMap[this.refKey] || null,
|
||||||
|
keyMap = tree.keyMap;
|
||||||
|
|
||||||
|
if( refList ) {
|
||||||
|
key = this.key;
|
||||||
|
// Convert key list to node list
|
||||||
|
if( includeSelf ) {
|
||||||
|
refList = $.map(refList, function(val){ return keyMap[val]; });
|
||||||
|
} else {
|
||||||
|
refList = $.map(refList, function(val){ return val === key ? null : keyMap[val]; });
|
||||||
|
if( refList.length < 1 ) {
|
||||||
|
refList = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return refList;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-clones] Return true if this node has at least another clone with same refKey.
|
||||||
|
* @returns {boolean}
|
||||||
|
*
|
||||||
|
* @alias FancytreeNode#isClone
|
||||||
|
* @requires jquery.fancytree.clones.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.isClone = function(){
|
||||||
|
var refKey = this.refKey || null,
|
||||||
|
refList = refKey && this.tree.refMap[refKey] || null;
|
||||||
|
return !!(refList && refList.length > 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-clones] Update key and/or refKey for an existing node.
|
||||||
|
* @param {string} key
|
||||||
|
* @param {string} refKey
|
||||||
|
* @returns {boolean}
|
||||||
|
*
|
||||||
|
* @alias FancytreeNode#reRegister
|
||||||
|
* @requires jquery.fancytree.clones.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.reRegister = function(key, refKey){
|
||||||
|
key = (key == null) ? null : "" + key;
|
||||||
|
refKey = (refKey == null) ? null : "" + refKey;
|
||||||
|
// this.debug("reRegister", key, refKey);
|
||||||
|
|
||||||
|
var tree = this.tree,
|
||||||
|
prevKey = this.key,
|
||||||
|
prevRefKey = this.refKey,
|
||||||
|
keyMap = tree.keyMap,
|
||||||
|
refMap = tree.refMap,
|
||||||
|
refList = refMap[prevRefKey] || null,
|
||||||
|
// curCloneKeys = refList ? node.getCloneList(true),
|
||||||
|
modified = false;
|
||||||
|
|
||||||
|
// Key has changed: update all references
|
||||||
|
if( key != null && key !== this.key ) {
|
||||||
|
if( keyMap[key] ) {
|
||||||
|
$.error("[ext-clones] reRegister(" + key + "): already exists: " + this);
|
||||||
|
}
|
||||||
|
// Update keyMap
|
||||||
|
delete keyMap[prevKey];
|
||||||
|
keyMap[key] = this;
|
||||||
|
// Update refMap
|
||||||
|
if( refList ) {
|
||||||
|
refMap[prevRefKey] = $.map(refList, function(e){
|
||||||
|
return e === prevKey ? key : e;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.key = key;
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// refKey has changed
|
||||||
|
if( refKey != null && refKey !== this.refKey ) {
|
||||||
|
// Remove previous refKeys
|
||||||
|
if( refList ){
|
||||||
|
if( refList.length === 1 ){
|
||||||
|
delete refMap[prevRefKey];
|
||||||
|
}else{
|
||||||
|
refMap[prevRefKey] = $.map(refList, function(e){
|
||||||
|
return e === prevKey ? null : e;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Add refKey
|
||||||
|
if( refMap[refKey] ) {
|
||||||
|
refMap[refKey].append(key);
|
||||||
|
}else{
|
||||||
|
refMap[refKey] = [ this.key ];
|
||||||
|
}
|
||||||
|
this.refKey = refKey;
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
return modified;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-clones] Define a refKey for an existing node.
|
||||||
|
* @param {string} refKey
|
||||||
|
* @returns {boolean}
|
||||||
|
*
|
||||||
|
* @alias FancytreeNode#setRefKey
|
||||||
|
* @requires jquery.fancytree.clones.js
|
||||||
|
* @since 2.16
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.setRefKey = function(refKey){
|
||||||
|
return this.reRegister(null, refKey);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-clones] Return all nodes with a given refKey (null if not found).
|
||||||
|
* @param {string} refKey
|
||||||
|
* @param {FancytreeNode} [rootNode] optionally restrict results to descendants of this node
|
||||||
|
* @returns {FancytreeNode[] | null}
|
||||||
|
* @alias Fancytree#getNodesByRef
|
||||||
|
* @requires jquery.fancytree.clones.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.getNodesByRef = function(refKey, rootNode){
|
||||||
|
var keyMap = this.keyMap,
|
||||||
|
refList = this.refMap[refKey] || null;
|
||||||
|
|
||||||
|
if( refList ) {
|
||||||
|
// Convert key list to node list
|
||||||
|
if( rootNode ) {
|
||||||
|
refList = $.map(refList, function(val){
|
||||||
|
var node = keyMap[val];
|
||||||
|
return node.isDescendantOf(rootNode) ? node : null;
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
refList = $.map(refList, function(val){ return keyMap[val]; });
|
||||||
|
}
|
||||||
|
if( refList.length < 1 ) {
|
||||||
|
refList = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return refList;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-clones] Replace a refKey with a new one.
|
||||||
|
* @param {string} oldRefKey
|
||||||
|
* @param {string} newRefKey
|
||||||
|
* @alias Fancytree#changeRefKey
|
||||||
|
* @requires jquery.fancytree.clones.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.changeRefKey = function(oldRefKey, newRefKey) {
|
||||||
|
var i, node,
|
||||||
|
keyMap = this.keyMap,
|
||||||
|
refList = this.refMap[oldRefKey] || null;
|
||||||
|
|
||||||
|
if (refList) {
|
||||||
|
for (i = 0; i < refList.length; i++) {
|
||||||
|
node = keyMap[refList[i]];
|
||||||
|
node.refKey = newRefKey;
|
||||||
|
}
|
||||||
|
delete this.refMap[oldRefKey];
|
||||||
|
this.refMap[newRefKey] = refList;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Extension code
|
||||||
|
*/
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "clones",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
highlightActiveClones: true, // set 'fancytree-active-clone' on active clones and all peers
|
||||||
|
highlightClones: false // set 'fancytree-clone' class on any node that has at least one clone
|
||||||
|
},
|
||||||
|
|
||||||
|
treeCreate: function(ctx){
|
||||||
|
this._superApply(arguments);
|
||||||
|
ctx.tree.refMap = {};
|
||||||
|
ctx.tree.keyMap = {};
|
||||||
|
},
|
||||||
|
treeInit: function(ctx){
|
||||||
|
this.$container.addClass("fancytree-ext-clones");
|
||||||
|
_assert(ctx.options.defaultKey == null);
|
||||||
|
// Generate unique / reproducible default keys
|
||||||
|
ctx.options.defaultKey = function(node){
|
||||||
|
return calcUniqueKey(node);
|
||||||
|
};
|
||||||
|
// The default implementation loads initial data
|
||||||
|
this._superApply(arguments);
|
||||||
|
},
|
||||||
|
treeClear: function(ctx){
|
||||||
|
ctx.tree.refMap = {};
|
||||||
|
ctx.tree.keyMap = {};
|
||||||
|
return this._superApply(arguments);
|
||||||
|
},
|
||||||
|
treeRegisterNode: function(ctx, add, node) {
|
||||||
|
var refList, len,
|
||||||
|
tree = ctx.tree,
|
||||||
|
keyMap = tree.keyMap,
|
||||||
|
refMap = tree.refMap,
|
||||||
|
key = node.key,
|
||||||
|
refKey = (node && node.refKey != null) ? "" + node.refKey : null;
|
||||||
|
|
||||||
|
// ctx.tree.debug("clones.treeRegisterNode", add, node);
|
||||||
|
|
||||||
|
if( node.isStatusNode() ){
|
||||||
|
return this._super(ctx, add, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( add ) {
|
||||||
|
if( keyMap[node.key] != null ) {
|
||||||
|
$.error("clones.treeRegisterNode: node.key already exists: " + node);
|
||||||
|
}
|
||||||
|
keyMap[key] = node;
|
||||||
|
if( refKey ) {
|
||||||
|
refList = refMap[refKey];
|
||||||
|
if( refList ) {
|
||||||
|
refList.push(key);
|
||||||
|
if( refList.length === 2 && ctx.options.clones.highlightClones ) {
|
||||||
|
// Mark peer node, if it just became a clone (no need to
|
||||||
|
// mark current node, since it will be rendered later anyway)
|
||||||
|
keyMap[refList[0]].renderStatus();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
refMap[refKey] = [key];
|
||||||
|
}
|
||||||
|
// node.debug("clones.treeRegisterNode: add clone =>", refMap[refKey]);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
if( keyMap[key] == null ) {
|
||||||
|
$.error("clones.treeRegisterNode: node.key not registered: " + node.key);
|
||||||
|
}
|
||||||
|
delete keyMap[key];
|
||||||
|
if( refKey ) {
|
||||||
|
refList = refMap[refKey];
|
||||||
|
// node.debug("clones.treeRegisterNode: remove clone BEFORE =>", refMap[refKey]);
|
||||||
|
if( refList ) {
|
||||||
|
len = refList.length;
|
||||||
|
if( len <= 1 ){
|
||||||
|
_assert(len === 1);
|
||||||
|
_assert(refList[0] === key);
|
||||||
|
delete refMap[refKey];
|
||||||
|
}else{
|
||||||
|
_removeArrayMember(refList, key);
|
||||||
|
// Unmark peer node, if this was the only clone
|
||||||
|
if( len === 2 && ctx.options.clones.highlightClones ) {
|
||||||
|
// node.debug("clones.treeRegisterNode: last =>", node.getCloneList());
|
||||||
|
keyMap[refList[0]].renderStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// node.debug("clones.treeRegisterNode: remove clone =>", refMap[refKey]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this._super(ctx, add, node);
|
||||||
|
},
|
||||||
|
nodeRenderStatus: function(ctx) {
|
||||||
|
var $span, res,
|
||||||
|
node = ctx.node;
|
||||||
|
|
||||||
|
res = this._super(ctx);
|
||||||
|
|
||||||
|
if( ctx.options.clones.highlightClones ) {
|
||||||
|
$span = $(node[ctx.tree.statusClassPropName]);
|
||||||
|
// Only if span already exists
|
||||||
|
if( $span.length && node.isClone() ){
|
||||||
|
// node.debug("clones.nodeRenderStatus: ", ctx.options.clones.highlightClones);
|
||||||
|
$span.addClass("fancytree-clone");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
nodeSetActive: function(ctx, flag, callOpts) {
|
||||||
|
var res,
|
||||||
|
scpn = ctx.tree.statusClassPropName,
|
||||||
|
node = ctx.node;
|
||||||
|
|
||||||
|
res = this._superApply(arguments);
|
||||||
|
|
||||||
|
if( ctx.options.clones.highlightActiveClones && node.isClone() ) {
|
||||||
|
$.each(node.getCloneList(true), function(idx, n){
|
||||||
|
// n.debug("clones.nodeSetActive: ", flag !== false);
|
||||||
|
$(n[scpn]).toggleClass("fancytree-active-clone", flag !== false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||
150
frontend/js/fancytree/src/jquery.fancytree.columnview.js
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.columnview.js
|
||||||
|
*
|
||||||
|
* Render tree like a Mac Finder's column view.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// prevent duplicate loading
|
||||||
|
// if ( $.ui.fancytree && $.ui.fancytree.version ) {
|
||||||
|
// $.ui.fancytree.warn("Fancytree: duplicate include");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
function _assert(cond, msg){
|
||||||
|
msg = msg || "";
|
||||||
|
if(!cond){
|
||||||
|
$.error("Assertion failed " + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "columnview",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
},
|
||||||
|
// Overide virtual methods for this extension.
|
||||||
|
// `this` : is this extension object
|
||||||
|
// `this._base` : the Fancytree instance
|
||||||
|
// `this._super`: the virtual function that was overriden (member of prev. extension or Fancytree)
|
||||||
|
treeInit: function(ctx){
|
||||||
|
var $tdFirst, $ul,
|
||||||
|
tree = ctx.tree,
|
||||||
|
$table = tree.widget.element;
|
||||||
|
|
||||||
|
tree.tr = $("tbody tr", $table)[0];
|
||||||
|
tree.columnCount = $(">td", tree.tr).length;
|
||||||
|
// Perform default behavior
|
||||||
|
this._superApply(arguments);
|
||||||
|
// Standard Fancytree created a root <ul>. Now move this into first table cell
|
||||||
|
$ul = $(tree.rootNode.ul);
|
||||||
|
$tdFirst = $(">td", tree.tr).eq(0);
|
||||||
|
|
||||||
|
$ul.removeClass("fancytree-container");
|
||||||
|
$ul.removeAttr("tabindex");
|
||||||
|
tree.$container = $table;
|
||||||
|
$table.addClass("fancytree-container fancytree-ext-columnview");
|
||||||
|
$table.attr("tabindex", "0");
|
||||||
|
|
||||||
|
$tdFirst.empty();
|
||||||
|
$ul.detach().appendTo($tdFirst);
|
||||||
|
|
||||||
|
// Force some required options
|
||||||
|
tree.widget.options.autoCollapse = true;
|
||||||
|
// tree.widget.options.autoActivate = true;
|
||||||
|
tree.widget.options.toggleEffect = false;
|
||||||
|
tree.widget.options.clickFolderMode = 1;
|
||||||
|
|
||||||
|
// Make sure that only active path is expanded when a node is activated:
|
||||||
|
$table.bind("fancytreeactivate", function(event, data){
|
||||||
|
var i, tdList,
|
||||||
|
node = data.node,
|
||||||
|
tree = data.tree,
|
||||||
|
level = node.getLevel();
|
||||||
|
|
||||||
|
tree._callHook("nodeCollapseSiblings", node);
|
||||||
|
// Clear right neighbours
|
||||||
|
if(level <= tree.columnCount){
|
||||||
|
tdList = $(">td", tree.tr);
|
||||||
|
for(i=level; i<tree.columnCount; i++){
|
||||||
|
tdList.eq(i).empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Expand nodes on activate, so we populate the right neighbor cell
|
||||||
|
if(!node.expanded && (node.children || node.lazy)) {
|
||||||
|
node.setExpanded();
|
||||||
|
}
|
||||||
|
// Adjust keyboard behaviour:
|
||||||
|
}).bind("fancytreekeydown", function(event, data){
|
||||||
|
var next = null,
|
||||||
|
node = data.node || data.tree.getFirstChild();
|
||||||
|
switch(event.which){
|
||||||
|
case $.ui.keyCode.DOWN:
|
||||||
|
next = node.getNextSibling();
|
||||||
|
if( next ){
|
||||||
|
next.setFocus();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case $.ui.keyCode.LEFT:
|
||||||
|
next = node.getParent();
|
||||||
|
if( next ){
|
||||||
|
next.setFocus();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case $.ui.keyCode.UP:
|
||||||
|
next = node.getPrevSibling();
|
||||||
|
if( next ){
|
||||||
|
next.setFocus();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
nodeRender: function(ctx, force, deep, collapsed, _recursive) {
|
||||||
|
// Render standard nested <ul> - <li> hierarchy
|
||||||
|
this._super(ctx, force, deep, collapsed, _recursive);
|
||||||
|
// Remove expander and add a trailing triangle instead
|
||||||
|
var level, $tdChild, $ul,
|
||||||
|
tree = ctx.tree,
|
||||||
|
node = ctx.node,
|
||||||
|
$span = $(node.span);
|
||||||
|
|
||||||
|
$span.find("span.fancytree-expander").remove();
|
||||||
|
if(node.hasChildren() !== false && !$span.find("span.fancytree-cv-right").length){
|
||||||
|
$span.append($("<span class='fancytree-icon fancytree-cv-right'>"));
|
||||||
|
}
|
||||||
|
// Move <ul> with children into the appropriate <td>
|
||||||
|
if(node.ul){
|
||||||
|
node.ul.style.display = ""; // might be hidden if RIGHT was pressed
|
||||||
|
level = node.getLevel();
|
||||||
|
if(level < tree.columnCount){
|
||||||
|
$tdChild = $(">td", tree.tr).eq(level);
|
||||||
|
$ul = $(node.ul).detach();
|
||||||
|
$tdChild.empty().append($ul);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||
142
frontend/js/fancytree/src/jquery.fancytree.debug.js
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.debug.js
|
||||||
|
*
|
||||||
|
* Miscellaneous debug extensions.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// prevent duplicate loading
|
||||||
|
// if ( $.ui.fancytree && $.ui.fancytree.version ) {
|
||||||
|
// $.ui.fancytree.warn("Fancytree: duplicate include");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
var i,
|
||||||
|
HOOK_NAMES = "nodeClick nodeCollapseSiblings".split(" "),
|
||||||
|
EVENT_NAMES = "activate beforeActivate".split(" "),
|
||||||
|
HOOK_NAME_MAP = {},
|
||||||
|
EVENT_NAME_MAP = {};
|
||||||
|
|
||||||
|
for(i=0; i<HOOK_NAMES.length; i++){ HOOK_NAME_MAP[HOOK_NAMES[i]] = true; }
|
||||||
|
for(i=0; i<EVENT_NAMES.length; i++){ EVENT_NAME_MAP[EVENT_NAMES[i]] = true; }
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
* Extension code
|
||||||
|
*/
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "tracecalls",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
logTarget: null, // optional redirect logging to this <div> tag
|
||||||
|
traceEvents: false, // `true`or list of hook names
|
||||||
|
traceHooks: false // `true`or list of event names
|
||||||
|
},
|
||||||
|
// Overide virtual methods for this extension.
|
||||||
|
// `this` : is this Fancytree object
|
||||||
|
// `this._super`: the virtual function that was overridden (member of prev. extension or Fancytree)
|
||||||
|
treeInit: function(ctx){
|
||||||
|
var tree = ctx.tree;
|
||||||
|
|
||||||
|
// Bind init-handler to apply cookie state
|
||||||
|
tree.$div.bind("fancytreeinit", function(event){
|
||||||
|
tree.debug("COOKIE " + document.cookie);
|
||||||
|
});
|
||||||
|
// Init the tree
|
||||||
|
this._superApply(arguments);
|
||||||
|
},
|
||||||
|
nodeClick: function(ctx) {
|
||||||
|
if(this.options.tracecalls.traceHooks){
|
||||||
|
this.debug();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nodeCollapseSiblings: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeDblclick: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeKeydown: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeLoadChildren: function(ctx, source) {
|
||||||
|
},
|
||||||
|
nodeOnFocusInOut: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeRemoveChildMarkup: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeRemoveMarkup: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeRender: function(ctx, force, deep, collapsed, _recursive) {
|
||||||
|
},
|
||||||
|
nodeRenderStatus: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeRenderTitle: function(ctx, title) {
|
||||||
|
},
|
||||||
|
nodeSetActive: function(ctx, flag, callOpts) {
|
||||||
|
},
|
||||||
|
nodeSetExpanded: function(ctx, flag, callOpts) {
|
||||||
|
},
|
||||||
|
nodeSetFocus: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeSetSelected: function(ctx, flag) {
|
||||||
|
},
|
||||||
|
nodeSetStatus: function(ctx, status, message, details) {
|
||||||
|
},
|
||||||
|
nodeToggleExpanded: function(ctx) {
|
||||||
|
},
|
||||||
|
nodeToggleSelected: function(ctx) {
|
||||||
|
},
|
||||||
|
treeClear: function(ctx) {
|
||||||
|
},
|
||||||
|
treeCreate: function(ctx) {
|
||||||
|
},
|
||||||
|
treeDestroy: function(ctx) {
|
||||||
|
},
|
||||||
|
// treeInit: function(ctx) {
|
||||||
|
// },
|
||||||
|
treeLoad: function(ctx, source) {
|
||||||
|
},
|
||||||
|
treeSetFocus: function(ctx, flag) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}(jQuery, window, document));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
* Fancytree extension: profiler
|
||||||
|
*/
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "profiler",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension
|
||||||
|
options: {
|
||||||
|
prefix: ""
|
||||||
|
},
|
||||||
|
// Overide virtual methods for this extension
|
||||||
|
nodeRender: function(ctx, force, deep, collapsed){
|
||||||
|
// ctx.tree.debug("**** PROFILER nodeRender");
|
||||||
|
var s = this.options.prefix + "render '" + ctx.node + "'";
|
||||||
|
/*jshint expr:true */
|
||||||
|
window.console && window.console.time && window.console.time(s);
|
||||||
|
this._superApply(arguments);
|
||||||
|
window.console && window.console.timeEnd && window.console.timeEnd(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||
572
frontend/js/fancytree/src/jquery.fancytree.dnd.js
Normal file
@@ -0,0 +1,572 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.dnd.js
|
||||||
|
*
|
||||||
|
* Drag-and-drop support (jQuery UI draggable/droppable).
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
var didRegisterDnd = false,
|
||||||
|
classDropAccept = "fancytree-drop-accept",
|
||||||
|
classDropAfter = "fancytree-drop-after",
|
||||||
|
classDropBefore = "fancytree-drop-before",
|
||||||
|
classDropOver = "fancytree-drop-over",
|
||||||
|
classDropReject = "fancytree-drop-reject",
|
||||||
|
classDropTarget = "fancytree-drop-target";
|
||||||
|
|
||||||
|
/* Convert number to string and prepend +/-; return empty string for 0.*/
|
||||||
|
function offsetString(n){
|
||||||
|
return n === 0 ? "" : (( n > 0 ) ? ("+" + n) : ("" + n));
|
||||||
|
}
|
||||||
|
|
||||||
|
//--- Extend ui.draggable event handling --------------------------------------
|
||||||
|
|
||||||
|
function _registerDnd() {
|
||||||
|
if(didRegisterDnd){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register proxy-functions for draggable.start/drag/stop
|
||||||
|
|
||||||
|
$.ui.plugin.add("draggable", "connectToFancytree", {
|
||||||
|
start: function(event, ui) {
|
||||||
|
// 'draggable' was renamed to 'ui-draggable' since jQueryUI 1.10
|
||||||
|
var draggable = $(this).data("ui-draggable") || $(this).data("draggable"),
|
||||||
|
sourceNode = ui.helper.data("ftSourceNode") || null;
|
||||||
|
|
||||||
|
if(sourceNode) {
|
||||||
|
// Adjust helper offset, so cursor is slightly outside top/left corner
|
||||||
|
draggable.offset.click.top = -2;
|
||||||
|
draggable.offset.click.left = + 16;
|
||||||
|
// Trigger dragStart event
|
||||||
|
// TODO: when called as connectTo..., the return value is ignored(?)
|
||||||
|
return sourceNode.tree.ext.dnd._onDragEvent("start", sourceNode, null, event, ui, draggable);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
drag: function(event, ui) {
|
||||||
|
var ctx, isHelper, logObject,
|
||||||
|
// 'draggable' was renamed to 'ui-draggable' since jQueryUI 1.10
|
||||||
|
draggable = $(this).data("ui-draggable") || $(this).data("draggable"),
|
||||||
|
sourceNode = ui.helper.data("ftSourceNode") || null,
|
||||||
|
prevTargetNode = ui.helper.data("ftTargetNode") || null,
|
||||||
|
targetNode = $.ui.fancytree.getNode(event.target),
|
||||||
|
dndOpts = sourceNode && sourceNode.tree.options.dnd;
|
||||||
|
|
||||||
|
// logObject = sourceNode || prevTargetNode || $.ui.fancytree;
|
||||||
|
// logObject.debug("Drag event:", event, event.shiftKey);
|
||||||
|
if(event.target && !targetNode){
|
||||||
|
// We got a drag event, but the targetNode could not be found
|
||||||
|
// at the event location. This may happen,
|
||||||
|
// 1. if the mouse jumped over the drag helper,
|
||||||
|
// 2. or if a non-fancytree element is dragged
|
||||||
|
// We ignore it:
|
||||||
|
isHelper = $(event.target).closest("div.fancytree-drag-helper,#fancytree-drop-marker").length > 0;
|
||||||
|
if(isHelper){
|
||||||
|
logObject = sourceNode || prevTargetNode || $.ui.fancytree;
|
||||||
|
logObject.debug("Drag event over helper: ignored.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ui.helper.data("ftTargetNode", targetNode);
|
||||||
|
|
||||||
|
if( dndOpts && dndOpts.updateHelper ) {
|
||||||
|
ctx = sourceNode.tree._makeHookContext(sourceNode, event, {
|
||||||
|
otherNode: targetNode,
|
||||||
|
ui: ui,
|
||||||
|
draggable: draggable,
|
||||||
|
dropMarker: $("#fancytree-drop-marker")
|
||||||
|
});
|
||||||
|
dndOpts.updateHelper.call(sourceNode.tree, sourceNode, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Leaving a tree node
|
||||||
|
if(prevTargetNode && prevTargetNode !== targetNode ) {
|
||||||
|
prevTargetNode.tree.ext.dnd._onDragEvent("leave", prevTargetNode, sourceNode, event, ui, draggable);
|
||||||
|
}
|
||||||
|
if(targetNode){
|
||||||
|
if(!targetNode.tree.options.dnd.dragDrop) {
|
||||||
|
// not enabled as drop target
|
||||||
|
} else if(targetNode === prevTargetNode) {
|
||||||
|
// Moving over same node
|
||||||
|
targetNode.tree.ext.dnd._onDragEvent("over", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
}else{
|
||||||
|
// Entering this node first time
|
||||||
|
targetNode.tree.ext.dnd._onDragEvent("enter", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
targetNode.tree.ext.dnd._onDragEvent("over", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else go ahead with standard event handling
|
||||||
|
},
|
||||||
|
stop: function(event, ui) {
|
||||||
|
var logObject,
|
||||||
|
// 'draggable' was renamed to 'ui-draggable' since jQueryUI 1.10:
|
||||||
|
draggable = $(this).data("ui-draggable") || $(this).data("draggable"),
|
||||||
|
sourceNode = ui.helper.data("ftSourceNode") || null,
|
||||||
|
targetNode = ui.helper.data("ftTargetNode") || null,
|
||||||
|
dropped = (event.type === "mouseup" && event.which === 1);
|
||||||
|
|
||||||
|
if(!dropped){
|
||||||
|
logObject = sourceNode || targetNode || $.ui.fancytree;
|
||||||
|
logObject.debug("Drag was cancelled");
|
||||||
|
}
|
||||||
|
if(targetNode) {
|
||||||
|
if(dropped){
|
||||||
|
targetNode.tree.ext.dnd._onDragEvent("drop", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
}
|
||||||
|
targetNode.tree.ext.dnd._onDragEvent("leave", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
}
|
||||||
|
if(sourceNode){
|
||||||
|
sourceNode.tree.ext.dnd._onDragEvent("stop", sourceNode, null, event, ui, draggable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
didRegisterDnd = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
* Drag and drop support
|
||||||
|
*/
|
||||||
|
function _initDragAndDrop(tree) {
|
||||||
|
var dnd = tree.options.dnd || null,
|
||||||
|
glyph = tree.options.glyph || null;
|
||||||
|
|
||||||
|
// Register 'connectToFancytree' option with ui.draggable
|
||||||
|
if( dnd ) {
|
||||||
|
_registerDnd();
|
||||||
|
}
|
||||||
|
// Attach ui.draggable to this Fancytree instance
|
||||||
|
if(dnd && dnd.dragStart ) {
|
||||||
|
tree.widget.element.draggable($.extend({
|
||||||
|
addClasses: false,
|
||||||
|
// DT issue 244: helper should be child of scrollParent:
|
||||||
|
appendTo: tree.$container,
|
||||||
|
// appendTo: "body",
|
||||||
|
containment: false,
|
||||||
|
// containment: "parent",
|
||||||
|
delay: 0,
|
||||||
|
distance: 4,
|
||||||
|
revert: false,
|
||||||
|
scroll: true, // to disable, also set css 'position: inherit' on ul.fancytree-container
|
||||||
|
scrollSpeed: 7,
|
||||||
|
scrollSensitivity: 10,
|
||||||
|
// Delegate draggable.start, drag, and stop events to our handler
|
||||||
|
connectToFancytree: true,
|
||||||
|
// Let source tree create the helper element
|
||||||
|
helper: function(event) {
|
||||||
|
var $helper, $nodeTag, opts,
|
||||||
|
sourceNode = $.ui.fancytree.getNode(event.target);
|
||||||
|
|
||||||
|
if(!sourceNode){
|
||||||
|
// #405, DT issue 211: might happen, if dragging a table *header*
|
||||||
|
return "<div>ERROR?: helper requested but sourceNode not found</div>";
|
||||||
|
}
|
||||||
|
opts = sourceNode.tree.options.dnd;
|
||||||
|
$nodeTag = $(sourceNode.span);
|
||||||
|
// Only event and node argument is available
|
||||||
|
$helper = $("<div class='fancytree-drag-helper'><span class='fancytree-drag-helper-img' /></div>")
|
||||||
|
.css({zIndex: 3, position: "relative"}) // so it appears above ext-wide selection bar
|
||||||
|
.append($nodeTag.find("span.fancytree-title").clone());
|
||||||
|
|
||||||
|
// Attach node reference to helper object
|
||||||
|
$helper.data("ftSourceNode", sourceNode);
|
||||||
|
|
||||||
|
// Support glyph symbols instead of icons
|
||||||
|
if( glyph ) {
|
||||||
|
$helper.find(".fancytree-drag-helper-img")
|
||||||
|
.addClass(glyph.map.dragHelper);
|
||||||
|
}
|
||||||
|
// Allow to modify the helper, e.g. to add multi-node-drag feedback
|
||||||
|
if( opts.initHelper ) {
|
||||||
|
opts.initHelper.call(sourceNode.tree, sourceNode, {
|
||||||
|
node: sourceNode,
|
||||||
|
tree: sourceNode.tree,
|
||||||
|
originalEvent: event,
|
||||||
|
ui: { helper: $helper }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// We return an unconnected element, so `draggable` will add this
|
||||||
|
// to the parent specified as `appendTo` option
|
||||||
|
return $helper;
|
||||||
|
},
|
||||||
|
start: function(event, ui) {
|
||||||
|
var sourceNode = ui.helper.data("ftSourceNode");
|
||||||
|
return !!sourceNode; // Abort dragging if no node could be found
|
||||||
|
}
|
||||||
|
}, tree.options.dnd.draggable));
|
||||||
|
}
|
||||||
|
// Attach ui.droppable to this Fancytree instance
|
||||||
|
if(dnd && dnd.dragDrop) {
|
||||||
|
tree.widget.element.droppable($.extend({
|
||||||
|
addClasses: false,
|
||||||
|
tolerance: "intersect",
|
||||||
|
greedy: false
|
||||||
|
/*
|
||||||
|
activate: function(event, ui) {
|
||||||
|
tree.debug("droppable - activate", event, ui, this);
|
||||||
|
},
|
||||||
|
create: function(event, ui) {
|
||||||
|
tree.debug("droppable - create", event, ui);
|
||||||
|
},
|
||||||
|
deactivate: function(event, ui) {
|
||||||
|
tree.debug("droppable - deactivate", event, ui);
|
||||||
|
},
|
||||||
|
drop: function(event, ui) {
|
||||||
|
tree.debug("droppable - drop", event, ui);
|
||||||
|
},
|
||||||
|
out: function(event, ui) {
|
||||||
|
tree.debug("droppable - out", event, ui);
|
||||||
|
},
|
||||||
|
over: function(event, ui) {
|
||||||
|
tree.debug("droppable - over", event, ui);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}, tree.options.dnd.droppable));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "dnd",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
// Make tree nodes accept draggables
|
||||||
|
autoExpandMS: 1000, // Expand nodes after n milliseconds of hovering.
|
||||||
|
draggable: null, // Additional options passed to jQuery draggable
|
||||||
|
droppable: null, // Additional options passed to jQuery droppable
|
||||||
|
focusOnClick: false, // Focus, although draggable cancels mousedown event (#270)
|
||||||
|
preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
|
||||||
|
preventRecursiveMoves: true,// Prevent dropping nodes on own descendants
|
||||||
|
smartRevert: true, // set draggable.revert = true if drop was rejected
|
||||||
|
dropMarkerOffsetX: -24, // absolute position offset for .fancytree-drop-marker relatively to ..fancytree-title (icon/img near a node accepting drop)
|
||||||
|
dropMarkerInsertOffsetX: -16, // additional offset for drop-marker with hitMode = "before"/"after"
|
||||||
|
// Events (drag support)
|
||||||
|
dragStart: null, // Callback(sourceNode, data), return true, to enable dnd
|
||||||
|
dragStop: null, // Callback(sourceNode, data)
|
||||||
|
initHelper: null, // Callback(sourceNode, data)
|
||||||
|
updateHelper: null, // Callback(sourceNode, data)
|
||||||
|
// Events (drop support)
|
||||||
|
dragEnter: null, // Callback(targetNode, data)
|
||||||
|
dragOver: null, // Callback(targetNode, data)
|
||||||
|
dragExpand: null, // Callback(targetNode, data), return false to prevent autoExpand
|
||||||
|
dragDrop: null, // Callback(targetNode, data)
|
||||||
|
dragLeave: null // Callback(targetNode, data)
|
||||||
|
},
|
||||||
|
|
||||||
|
treeInit: function(ctx){
|
||||||
|
var tree = ctx.tree;
|
||||||
|
this._superApply(arguments);
|
||||||
|
// issue #270: draggable eats mousedown events
|
||||||
|
if( tree.options.dnd.dragStart ){
|
||||||
|
tree.$container.on("mousedown", function(event){
|
||||||
|
// if( !tree.hasFocus() && ctx.options.dnd.focusOnClick ) {
|
||||||
|
if( ctx.options.dnd.focusOnClick ) { // #270
|
||||||
|
var node = $.ui.fancytree.getNode(event);
|
||||||
|
if (node){
|
||||||
|
node.debug("Re-enable focus that was prevented by jQuery UI draggable.");
|
||||||
|
// node.setFocus();
|
||||||
|
// $(node.span).closest(":tabbable").focus();
|
||||||
|
// $(event.target).trigger("focus");
|
||||||
|
// $(event.target).closest(":tabbable").trigger("focus");
|
||||||
|
}
|
||||||
|
setTimeout(function() { // #300
|
||||||
|
$(event.target).closest(":tabbable").focus();
|
||||||
|
}, 10);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_initDragAndDrop(tree);
|
||||||
|
},
|
||||||
|
/* Display drop marker according to hitMode ('after', 'before', 'over'). */
|
||||||
|
_setDndStatus: function(sourceNode, targetNode, helper, hitMode, accept) {
|
||||||
|
var markerOffsetX,
|
||||||
|
markerAt = "center",
|
||||||
|
instData = this._local,
|
||||||
|
dndOpt = this.options.dnd ,
|
||||||
|
glyphOpt = this.options.glyph,
|
||||||
|
$source = sourceNode ? $(sourceNode.span) : null,
|
||||||
|
$target = $(targetNode.span),
|
||||||
|
$targetTitle = $target.find("span.fancytree-title");
|
||||||
|
|
||||||
|
if( !instData.$dropMarker ) {
|
||||||
|
instData.$dropMarker = $("<div id='fancytree-drop-marker'></div>")
|
||||||
|
.hide()
|
||||||
|
.css({"z-index": 1000})
|
||||||
|
.prependTo($(this.$div).parent());
|
||||||
|
// .prependTo("body");
|
||||||
|
|
||||||
|
if( glyphOpt ) {
|
||||||
|
// instData.$dropMarker.addClass(glyph.map.dragHelper);
|
||||||
|
instData.$dropMarker
|
||||||
|
.addClass(glyphOpt.map.dropMarker);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( hitMode === "after" || hitMode === "before" || hitMode === "over" ){
|
||||||
|
markerOffsetX = dndOpt.dropMarkerOffsetX || 0;
|
||||||
|
switch(hitMode){
|
||||||
|
case "before":
|
||||||
|
markerAt = "top";
|
||||||
|
markerOffsetX += (dndOpt.dropMarkerInsertOffsetX || 0);
|
||||||
|
break;
|
||||||
|
case "after":
|
||||||
|
markerAt = "bottom";
|
||||||
|
markerOffsetX += (dndOpt.dropMarkerInsertOffsetX || 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
instData.$dropMarker
|
||||||
|
.toggleClass(classDropAfter, hitMode === "after")
|
||||||
|
.toggleClass(classDropOver, hitMode === "over")
|
||||||
|
.toggleClass(classDropBefore, hitMode === "before")
|
||||||
|
.show()
|
||||||
|
.position($.ui.fancytree.fixPositionOptions({
|
||||||
|
my: "left" + offsetString(markerOffsetX) + " center",
|
||||||
|
at: "left " + markerAt,
|
||||||
|
of: $targetTitle
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
instData.$dropMarker.hide();
|
||||||
|
}
|
||||||
|
if( $source ){
|
||||||
|
$source
|
||||||
|
.toggleClass(classDropAccept, accept === true)
|
||||||
|
.toggleClass(classDropReject, accept === false);
|
||||||
|
}
|
||||||
|
$target
|
||||||
|
.toggleClass(classDropTarget, hitMode === "after" || hitMode === "before" || hitMode === "over")
|
||||||
|
.toggleClass(classDropAfter, hitMode === "after")
|
||||||
|
.toggleClass(classDropBefore, hitMode === "before")
|
||||||
|
.toggleClass(classDropAccept, accept === true)
|
||||||
|
.toggleClass(classDropReject, accept === false);
|
||||||
|
|
||||||
|
helper
|
||||||
|
.toggleClass(classDropAccept, accept === true)
|
||||||
|
.toggleClass(classDropReject, accept === false);
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handles drag'n'drop functionality.
|
||||||
|
*
|
||||||
|
* A standard jQuery drag-and-drop process may generate these calls:
|
||||||
|
*
|
||||||
|
* start:
|
||||||
|
* _onDragEvent("start", sourceNode, null, event, ui, draggable);
|
||||||
|
* drag:
|
||||||
|
* _onDragEvent("leave", prevTargetNode, sourceNode, event, ui, draggable);
|
||||||
|
* _onDragEvent("over", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
* _onDragEvent("enter", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
* stop:
|
||||||
|
* _onDragEvent("drop", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
* _onDragEvent("leave", targetNode, sourceNode, event, ui, draggable);
|
||||||
|
* _onDragEvent("stop", sourceNode, null, event, ui, draggable);
|
||||||
|
*/
|
||||||
|
_onDragEvent: function(eventName, node, otherNode, event, ui, draggable) {
|
||||||
|
// if(eventName !== "over"){
|
||||||
|
// this.debug("tree.ext.dnd._onDragEvent(%s, %o, %o) - %o", eventName, node, otherNode, this);
|
||||||
|
// }
|
||||||
|
var accept, nodeOfs, parentRect, rect, relPos, relPos2,
|
||||||
|
enterResponse, hitMode, r,
|
||||||
|
opts = this.options,
|
||||||
|
dnd = opts.dnd,
|
||||||
|
ctx = this._makeHookContext(node, event, {otherNode: otherNode, ui: ui, draggable: draggable}),
|
||||||
|
res = null,
|
||||||
|
that = this,
|
||||||
|
$nodeTag = $(node.span);
|
||||||
|
|
||||||
|
if( dnd.smartRevert ) {
|
||||||
|
draggable.options.revert = "invalid";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (eventName) {
|
||||||
|
|
||||||
|
case "start":
|
||||||
|
if( node.isStatusNode() ) {
|
||||||
|
res = false;
|
||||||
|
} else if(dnd.dragStart) {
|
||||||
|
res = dnd.dragStart(node, ctx);
|
||||||
|
}
|
||||||
|
if(res === false) {
|
||||||
|
this.debug("tree.dragStart() cancelled");
|
||||||
|
//draggable._clear();
|
||||||
|
// NOTE: the return value seems to be ignored (drag is not cancelled, when false is returned)
|
||||||
|
// TODO: call this._cancelDrag()?
|
||||||
|
ui.helper.trigger("mouseup")
|
||||||
|
.hide();
|
||||||
|
} else {
|
||||||
|
if( dnd.smartRevert ) {
|
||||||
|
// #567, #593: fix revert position
|
||||||
|
// rect = node.li.getBoundingClientRect();
|
||||||
|
rect = node[ctx.tree.nodeContainerAttrName].getBoundingClientRect();
|
||||||
|
parentRect = $(draggable.options.appendTo)[0].getBoundingClientRect();
|
||||||
|
draggable.originalPosition.left = Math.max(0, rect.left - parentRect.left);
|
||||||
|
draggable.originalPosition.top = Math.max(0, rect.top - parentRect.top);
|
||||||
|
}
|
||||||
|
$nodeTag.addClass("fancytree-drag-source");
|
||||||
|
// Register global handlers to allow cancel
|
||||||
|
$(document)
|
||||||
|
.on("keydown.fancytree-dnd,mousedown.fancytree-dnd", function(event){
|
||||||
|
// node.tree.debug("dnd global event", event.type, event.which);
|
||||||
|
if( event.type === "keydown" && event.which === $.ui.keyCode.ESCAPE ) {
|
||||||
|
that.ext.dnd._cancelDrag();
|
||||||
|
} else if( event.type === "mousedown" ) {
|
||||||
|
that.ext.dnd._cancelDrag();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "enter":
|
||||||
|
if(dnd.preventRecursiveMoves && node.isDescendantOf(otherNode)){
|
||||||
|
r = false;
|
||||||
|
}else{
|
||||||
|
r = dnd.dragEnter ? dnd.dragEnter(node, ctx) : null;
|
||||||
|
}
|
||||||
|
if(!r){
|
||||||
|
// convert null, undefined, false to false
|
||||||
|
res = false;
|
||||||
|
}else if ( $.isArray(r) ) {
|
||||||
|
// TODO: also accept passing an object of this format directly
|
||||||
|
res = {
|
||||||
|
over: ($.inArray("over", r) >= 0),
|
||||||
|
before: ($.inArray("before", r) >= 0),
|
||||||
|
after: ($.inArray("after", r) >= 0)
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
res = {
|
||||||
|
over: ((r === true) || (r === "over")),
|
||||||
|
before: ((r === true) || (r === "before")),
|
||||||
|
after: ((r === true) || (r === "after"))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
ui.helper.data("enterResponse", res);
|
||||||
|
// this.debug("helper.enterResponse: %o", res);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "over":
|
||||||
|
enterResponse = ui.helper.data("enterResponse");
|
||||||
|
hitMode = null;
|
||||||
|
if(enterResponse === false){
|
||||||
|
// Don't call dragOver if onEnter returned false.
|
||||||
|
// break;
|
||||||
|
} else if(typeof enterResponse === "string") {
|
||||||
|
// Use hitMode from onEnter if provided.
|
||||||
|
hitMode = enterResponse;
|
||||||
|
} else {
|
||||||
|
// Calculate hitMode from relative cursor position.
|
||||||
|
nodeOfs = $nodeTag.offset();
|
||||||
|
relPos = { x: event.pageX - nodeOfs.left,
|
||||||
|
y: event.pageY - nodeOfs.top };
|
||||||
|
relPos2 = { x: relPos.x / $nodeTag.width(),
|
||||||
|
y: relPos.y / $nodeTag.height() };
|
||||||
|
|
||||||
|
if( enterResponse.after && relPos2.y > 0.75 ){
|
||||||
|
hitMode = "after";
|
||||||
|
} else if(!enterResponse.over && enterResponse.after && relPos2.y > 0.5 ){
|
||||||
|
hitMode = "after";
|
||||||
|
} else if(enterResponse.before && relPos2.y <= 0.25) {
|
||||||
|
hitMode = "before";
|
||||||
|
} else if(!enterResponse.over && enterResponse.before && relPos2.y <= 0.5) {
|
||||||
|
hitMode = "before";
|
||||||
|
} else if(enterResponse.over) {
|
||||||
|
hitMode = "over";
|
||||||
|
}
|
||||||
|
// Prevent no-ops like 'before source node'
|
||||||
|
// TODO: these are no-ops when moving nodes, but not in copy mode
|
||||||
|
if( dnd.preventVoidMoves ){
|
||||||
|
if(node === otherNode){
|
||||||
|
this.debug(" drop over source node prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}else if(hitMode === "before" && otherNode && node === otherNode.getNextSibling()){
|
||||||
|
this.debug(" drop after source node prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}else if(hitMode === "after" && otherNode && node === otherNode.getPrevSibling()){
|
||||||
|
this.debug(" drop before source node prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}else if(hitMode === "over" && otherNode && otherNode.parent === node && otherNode.isLastSibling() ){
|
||||||
|
this.debug(" drop last child over own parent prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// this.debug("hitMode: %s - %s - %s", hitMode, (node.parent === otherNode), node.isLastSibling());
|
||||||
|
ui.helper.data("hitMode", hitMode);
|
||||||
|
}
|
||||||
|
// Auto-expand node (only when 'over' the node, not 'before', or 'after')
|
||||||
|
if(hitMode !== "before" && hitMode !== "after" && dnd.autoExpandMS &&
|
||||||
|
node.hasChildren() !== false && !node.expanded &&
|
||||||
|
(!dnd.dragExpand || dnd.dragExpand(node, ctx) !== false)
|
||||||
|
) {
|
||||||
|
node.scheduleAction("expand", dnd.autoExpandMS);
|
||||||
|
}
|
||||||
|
if(hitMode && dnd.dragOver){
|
||||||
|
// TODO: http://code.google.com/p/dynatree/source/detail?r=625
|
||||||
|
ctx.hitMode = hitMode;
|
||||||
|
res = dnd.dragOver(node, ctx);
|
||||||
|
}
|
||||||
|
accept = (res !== false && hitMode !== null);
|
||||||
|
if( dnd.smartRevert ) {
|
||||||
|
draggable.options.revert = !accept;
|
||||||
|
}
|
||||||
|
this._local._setDndStatus(otherNode, node, ui.helper, hitMode, accept);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "drop":
|
||||||
|
hitMode = ui.helper.data("hitMode");
|
||||||
|
if(hitMode && dnd.dragDrop){
|
||||||
|
ctx.hitMode = hitMode;
|
||||||
|
dnd.dragDrop(node, ctx);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "leave":
|
||||||
|
// Cancel pending expand request
|
||||||
|
node.scheduleAction("cancel");
|
||||||
|
ui.helper.data("enterResponse", null);
|
||||||
|
ui.helper.data("hitMode", null);
|
||||||
|
this._local._setDndStatus(otherNode, node, ui.helper, "out", undefined);
|
||||||
|
if(dnd.dragLeave){
|
||||||
|
dnd.dragLeave(node, ctx);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "stop":
|
||||||
|
$nodeTag.removeClass("fancytree-drag-source");
|
||||||
|
$(document).off(".fancytree-dnd");
|
||||||
|
if(dnd.dragStop){
|
||||||
|
dnd.dragStop(node, ctx);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$.error("Unsupported drag event: " + eventName);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
_cancelDrag: function() {
|
||||||
|
var dd = $.ui.ddmanager.current;
|
||||||
|
if(dd){
|
||||||
|
dd.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||
580
frontend/js/fancytree/src/jquery.fancytree.dnd5.js
Normal file
@@ -0,0 +1,580 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.dnd5.js
|
||||||
|
*
|
||||||
|
* Drag-and-drop support (native HTML5).
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
#TODO
|
||||||
|
- glyph
|
||||||
|
|
||||||
|
Compatiblity when dragging between *separate* windows:
|
||||||
|
|
||||||
|
Drag from Chrome Edge FF IE11 Safari
|
||||||
|
To Chrome ok ok ok NO ?
|
||||||
|
Edge ok ok ok NO ?
|
||||||
|
FF ok ok ok NO ?
|
||||||
|
IE 11 ok ok ok ok ?
|
||||||
|
Safari ? ? ? ? ok
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
var
|
||||||
|
classDragSource = "fancytree-drag-source",
|
||||||
|
classDragRemove = "fancytree-drag-remove",
|
||||||
|
classDropAccept = "fancytree-drop-accept",
|
||||||
|
classDropAfter = "fancytree-drop-after",
|
||||||
|
classDropBefore = "fancytree-drop-before",
|
||||||
|
classDropOver = "fancytree-drop-over",
|
||||||
|
classDropReject = "fancytree-drop-reject",
|
||||||
|
classDropTarget = "fancytree-drop-target",
|
||||||
|
nodeMimeType = "application/x-fancytree-node",
|
||||||
|
$dropMarker = null,
|
||||||
|
SOURCE_NODE = null,
|
||||||
|
DRAG_ENTER_RESPONSE = null,
|
||||||
|
LAST_HIT_MODE = null;
|
||||||
|
|
||||||
|
/* Convert number to string and prepend +/-; return empty string for 0.*/
|
||||||
|
function offsetString(n){
|
||||||
|
return n === 0 ? "" : (( n > 0 ) ? ("+" + n) : ("" + n));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert a dragEnter() or dragOver() response to a canonical form.
|
||||||
|
* Return false or plain object
|
||||||
|
* @param {string|object|boolean} r
|
||||||
|
* @return {object|false}
|
||||||
|
*/
|
||||||
|
function normalizeDragEnterResponse(r) {
|
||||||
|
var res;
|
||||||
|
|
||||||
|
if( !r ){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ( $.isPlainObject(r) ) {
|
||||||
|
res = {
|
||||||
|
over: !!r.over,
|
||||||
|
before: !!r.before,
|
||||||
|
after: !!r.after
|
||||||
|
};
|
||||||
|
}else if ( $.isArray(r) ) {
|
||||||
|
res = {
|
||||||
|
over: ($.inArray("over", r) >= 0),
|
||||||
|
before: ($.inArray("before", r) >= 0),
|
||||||
|
after: ($.inArray("after", r) >= 0)
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
res = {
|
||||||
|
over: ((r === true) || (r === "over")),
|
||||||
|
before: ((r === true) || (r === "before")),
|
||||||
|
after: ((r === true) || (r === "after"))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if( Object.keys(res).length === 0 ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// if( Object.keys(res).length === 1 ) {
|
||||||
|
// res.unique = res[0];
|
||||||
|
// }
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Implement auto scrolling when drag cursor is in top/bottom area of scroll parent. */
|
||||||
|
function autoScroll(tree, event) {
|
||||||
|
var spOfs, scrollTop, delta,
|
||||||
|
dndOpts = tree.options.dnd5,
|
||||||
|
sp = tree.$scrollParent[0],
|
||||||
|
sensitivity = dndOpts.scrollSensitivity,
|
||||||
|
speed = dndOpts.scrollSpeed,
|
||||||
|
scrolled = 0;
|
||||||
|
|
||||||
|
if ( sp !== document && sp.tagName !== "HTML" ) {
|
||||||
|
spOfs = tree.$scrollParent.offset();
|
||||||
|
scrollTop = sp.scrollTop;
|
||||||
|
if ( spOfs.top + sp.offsetHeight - event.pageY < sensitivity ) {
|
||||||
|
delta = (sp.scrollHeight - tree.$scrollParent.innerHeight() - scrollTop);
|
||||||
|
// console.log ("sp.offsetHeight: " + sp.offsetHeight
|
||||||
|
// + ", spOfs.top: " + spOfs.top
|
||||||
|
// + ", scrollTop: " + scrollTop
|
||||||
|
// + ", innerHeight: " + tree.$scrollParent.innerHeight()
|
||||||
|
// + ", scrollHeight: " + sp.scrollHeight
|
||||||
|
// + ", delta: " + delta
|
||||||
|
// );
|
||||||
|
if( delta > 0 ) {
|
||||||
|
sp.scrollTop = scrolled = scrollTop + speed;
|
||||||
|
}
|
||||||
|
} else if ( scrollTop > 0 && event.pageY - spOfs.top < sensitivity ) {
|
||||||
|
sp.scrollTop = scrolled = scrollTop - speed;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
scrollTop = $(document).scrollTop();
|
||||||
|
if (scrollTop > 0 && event.pageY - scrollTop < sensitivity) {
|
||||||
|
scrolled = scrollTop - speed;
|
||||||
|
$(document).scrollTop(scrolled);
|
||||||
|
} else if ($(window).height() - (event.pageY - scrollTop) < sensitivity) {
|
||||||
|
scrolled = scrollTop + speed;
|
||||||
|
$(document).scrollTop(scrolled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( scrolled ) {
|
||||||
|
tree.debug("autoScroll: " + scrolled + "px");
|
||||||
|
}
|
||||||
|
return scrolled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle dragover event (fired every x ms) and return hitMode. */
|
||||||
|
function handleDragOver(event, data) {
|
||||||
|
// Implement auto-scrolling
|
||||||
|
if ( data.options.dnd5.scroll ) {
|
||||||
|
autoScroll(data.tree, event);
|
||||||
|
}
|
||||||
|
// Bail out with previous response if we get an invalid dragover
|
||||||
|
if( !data.node ) {
|
||||||
|
data.tree.warn("Ignore dragover for non-node"); //, event, data);
|
||||||
|
return LAST_HIT_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
var markerOffsetX, nodeOfs, relPosY, //res,
|
||||||
|
// eventHash = getEventHash(event),
|
||||||
|
hitMode = null,
|
||||||
|
tree = data.tree,
|
||||||
|
options = tree.options,
|
||||||
|
dndOpts = options.dnd5,
|
||||||
|
targetNode = data.node,
|
||||||
|
sourceNode = data.otherNode,
|
||||||
|
markerAt = "center",
|
||||||
|
// glyph = options.glyph || null,
|
||||||
|
// $source = sourceNode ? $(sourceNode.span) : null,
|
||||||
|
$target = $(targetNode.span),
|
||||||
|
$targetTitle = $target.find("span.fancytree-title");
|
||||||
|
|
||||||
|
if(DRAG_ENTER_RESPONSE === false){
|
||||||
|
tree.warn("Ignore dragover, since dragenter returned false"); //, event, data);
|
||||||
|
// $.error("assert failed: dragenter returned false");
|
||||||
|
return false;
|
||||||
|
} else if(typeof DRAG_ENTER_RESPONSE === "string") {
|
||||||
|
$.error("assert failed: dragenter returned string");
|
||||||
|
// Use hitMode from onEnter if provided.
|
||||||
|
// hitMode = DRAG_ENTER_RESPONSE;
|
||||||
|
} else {
|
||||||
|
// Calculate hitMode from relative cursor position.
|
||||||
|
nodeOfs = $target.offset();
|
||||||
|
relPosY = (event.pageY - nodeOfs.top) / $target.height();
|
||||||
|
|
||||||
|
if( DRAG_ENTER_RESPONSE.after && relPosY > 0.75 ){
|
||||||
|
hitMode = "after";
|
||||||
|
} else if(!DRAG_ENTER_RESPONSE.over && DRAG_ENTER_RESPONSE.after && relPosY > 0.5 ){
|
||||||
|
hitMode = "after";
|
||||||
|
} else if(DRAG_ENTER_RESPONSE.before && relPosY <= 0.25) {
|
||||||
|
hitMode = "before";
|
||||||
|
} else if(!DRAG_ENTER_RESPONSE.over && DRAG_ENTER_RESPONSE.before && relPosY <= 0.5) {
|
||||||
|
hitMode = "before";
|
||||||
|
} else if(DRAG_ENTER_RESPONSE.over) {
|
||||||
|
hitMode = "over";
|
||||||
|
}
|
||||||
|
// Prevent no-ops like 'before source node'
|
||||||
|
// TODO: these are no-ops when moving nodes, but not in copy mode
|
||||||
|
if( dndOpts.preventVoidMoves ){
|
||||||
|
if(targetNode === sourceNode){
|
||||||
|
targetNode.debug("drop over source node prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}else if(hitMode === "before" && sourceNode && targetNode === sourceNode.getNextSibling()){
|
||||||
|
targetNode.debug("drop after source node prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}else if(hitMode === "after" && sourceNode && targetNode === sourceNode.getPrevSibling()){
|
||||||
|
targetNode.debug("drop before source node prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}else if(hitMode === "over" && sourceNode && sourceNode.parent === targetNode && sourceNode.isLastSibling() ){
|
||||||
|
targetNode.debug("drop last child over own parent prevented");
|
||||||
|
hitMode = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Let callback modify the calculated hitMode
|
||||||
|
data.hitMode = hitMode;
|
||||||
|
if(hitMode && dndOpts.dragOver){
|
||||||
|
// TODO: http://code.google.com/p/dynatree/source/detail?r=625
|
||||||
|
dndOpts.dragOver(targetNode, data);
|
||||||
|
hitMode = data.hitMode;
|
||||||
|
}
|
||||||
|
// LAST_DROP_EFFECT = data.dataTransfer.dropEffect;
|
||||||
|
// LAST_EFFECT_ALLOWED = data.dataTransfer.effectAllowed;
|
||||||
|
LAST_HIT_MODE = hitMode;
|
||||||
|
//
|
||||||
|
if( hitMode === "after" || hitMode === "before" || hitMode === "over" ){
|
||||||
|
markerOffsetX = dndOpts.dropMarkerOffsetX || 0;
|
||||||
|
switch(hitMode){
|
||||||
|
case "before":
|
||||||
|
markerAt = "top";
|
||||||
|
markerOffsetX += (dndOpts.dropMarkerInsertOffsetX || 0);
|
||||||
|
break;
|
||||||
|
case "after":
|
||||||
|
markerAt = "bottom";
|
||||||
|
markerOffsetX += (dndOpts.dropMarkerInsertOffsetX || 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dropMarker
|
||||||
|
.toggleClass(classDropAfter, hitMode === "after")
|
||||||
|
.toggleClass(classDropOver, hitMode === "over")
|
||||||
|
.toggleClass(classDropBefore, hitMode === "before")
|
||||||
|
.show()
|
||||||
|
.position($.ui.fancytree.fixPositionOptions({
|
||||||
|
my: "left" + offsetString(markerOffsetX) + " center",
|
||||||
|
at: "left " + markerAt,
|
||||||
|
of: $targetTitle
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
$dropMarker.hide();
|
||||||
|
// console.log("hide dropmarker")
|
||||||
|
}
|
||||||
|
// if( $source ){
|
||||||
|
// $source.toggleClass(classDragRemove, isMove);
|
||||||
|
// }
|
||||||
|
$(targetNode.span)
|
||||||
|
.toggleClass(classDropTarget, hitMode === "after" || hitMode === "before" || hitMode === "over")
|
||||||
|
.toggleClass(classDropAfter, hitMode === "after")
|
||||||
|
.toggleClass(classDropBefore, hitMode === "before")
|
||||||
|
.toggleClass(classDropAccept, hitMode === "over")
|
||||||
|
.toggleClass(classDropReject, hitMode === false);
|
||||||
|
|
||||||
|
return hitMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* *****************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "dnd5",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
autoExpandMS: 1500, // Expand nodes after n milliseconds of hovering
|
||||||
|
setTextTypeJson: false, // Allow dragging of nodes to different IE windows
|
||||||
|
preventForeignNodes: false, // Prevent dropping nodes from different Fancytrees
|
||||||
|
preventNonNodes: false, // Prevent dropping items other than Fancytree nodes
|
||||||
|
preventRecursiveMoves: true, // Prevent dropping nodes on own descendants
|
||||||
|
preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
|
||||||
|
scroll: true, // Enable auto-scrolling while dragging
|
||||||
|
scrollSensitivity: 20, // Active top/bottom margin in pixel
|
||||||
|
scrollSpeed: 5, // Pixel per event
|
||||||
|
dropMarkerOffsetX: -24, // absolute position offset for .fancytree-drop-marker relatively to ..fancytree-title (icon/img near a node accepting drop)
|
||||||
|
dropMarkerInsertOffsetX: -16,// additional offset for drop-marker with hitMode = "before"/"after"
|
||||||
|
// Events (drag support)
|
||||||
|
dragStart: null, // Callback(sourceNode, data), return true, to enable dnd drag
|
||||||
|
dragDrag: $.noop, // Callback(sourceNode, data)
|
||||||
|
dragEnd: $.noop, // Callback(sourceNode, data)
|
||||||
|
// Events (drop support)
|
||||||
|
dragEnter: null, // Callback(targetNode, data), return true, to enable dnd drop
|
||||||
|
dragOver: $.noop, // Callback(targetNode, data)
|
||||||
|
dragExpand: $.noop, // Callback(targetNode, data), return false to prevent autoExpand
|
||||||
|
dragDrop: $.noop, // Callback(targetNode, data)
|
||||||
|
dragLeave: $.noop // Callback(targetNode, data)
|
||||||
|
},
|
||||||
|
|
||||||
|
treeInit: function(ctx){
|
||||||
|
var tree = ctx.tree,
|
||||||
|
opts = ctx.options,
|
||||||
|
dndOpts = opts.dnd5,
|
||||||
|
getNode = $.ui.fancytree.getNode;
|
||||||
|
|
||||||
|
if( $.inArray("dnd", opts.extensions) >= 0 ) {
|
||||||
|
$.error("Extensions 'dnd' and 'dnd5' are mutually exclusive.");
|
||||||
|
}
|
||||||
|
if( dndOpts.dragStop ) {
|
||||||
|
$.error("dragStop is not used by ext-dnd5. Use dragEnd instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implement `opts.createNode` event to add the 'draggable' attribute
|
||||||
|
// #680: this must happen before calling super.treeInit()
|
||||||
|
if( dndOpts.dragStart ) {
|
||||||
|
$.ui.fancytree.overrideMethod(ctx.options, "createNode", function(event, data) {
|
||||||
|
// Default processing if any
|
||||||
|
this._super.apply(this, arguments);
|
||||||
|
|
||||||
|
data.node.span.draggable = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this._superApply(arguments);
|
||||||
|
|
||||||
|
this.$container.addClass("fancytree-ext-dnd5");
|
||||||
|
|
||||||
|
// Store the current scroll parent, which may be the tree
|
||||||
|
// container, any enclosing div, or the document
|
||||||
|
this.$scrollParent = this.$container.children(":first").scrollParent();
|
||||||
|
|
||||||
|
$dropMarker = $("#fancytree-drop-marker");
|
||||||
|
if( !$dropMarker.length ) {
|
||||||
|
$dropMarker = $("<div id='fancytree-drop-marker'></div>")
|
||||||
|
.hide()
|
||||||
|
.css({
|
||||||
|
"z-index": 1000,
|
||||||
|
// Drop marker should not steal dragenter/dragover events:
|
||||||
|
"pointer-events": "none"
|
||||||
|
}).prependTo("body");
|
||||||
|
// if( glyph ) {
|
||||||
|
// instData.$dropMarker
|
||||||
|
// .addClass(glyph.map.dropMarker);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
// Enable drag support if dragStart() is specified:
|
||||||
|
if( dndOpts.dragStart ) {
|
||||||
|
// Bind drag event handlers
|
||||||
|
tree.$container.on("dragstart drag dragend", function(event){
|
||||||
|
var json,
|
||||||
|
node = getNode(event),
|
||||||
|
dataTransfer = event.dataTransfer || event.originalEvent.dataTransfer,
|
||||||
|
isMove = dataTransfer.dropEffect === "move",
|
||||||
|
$source = node ? $(node.span) : null,
|
||||||
|
data = {
|
||||||
|
node: node,
|
||||||
|
tree: tree,
|
||||||
|
options: tree.options,
|
||||||
|
originalEvent: event,
|
||||||
|
dataTransfer: dataTransfer,
|
||||||
|
// dropEffect: undefined, // set by dragend
|
||||||
|
isCancelled: undefined // set by dragend
|
||||||
|
};
|
||||||
|
|
||||||
|
switch( event.type ) {
|
||||||
|
|
||||||
|
case "dragstart":
|
||||||
|
$(node.span).addClass(classDragSource);
|
||||||
|
|
||||||
|
// Store current source node in different formats
|
||||||
|
SOURCE_NODE = node;
|
||||||
|
|
||||||
|
// Set payload
|
||||||
|
// Note:
|
||||||
|
// Transfer data is only accessible on dragstart and drop!
|
||||||
|
// For all other events the formats and kinds in the drag
|
||||||
|
// data store list of items representing dragged data can be
|
||||||
|
// enumerated, but the data itself is unavailable and no new
|
||||||
|
// data can be added.
|
||||||
|
json = JSON.stringify(node.toDict());
|
||||||
|
try {
|
||||||
|
dataTransfer.setData(nodeMimeType, json);
|
||||||
|
dataTransfer.setData("text/html", $(node.span).html());
|
||||||
|
dataTransfer.setData("text/plain", node.title);
|
||||||
|
} catch(ex) {
|
||||||
|
// IE only accepts 'text' type
|
||||||
|
tree.warn("Could not set data (IE only accepts 'text') - " + ex);
|
||||||
|
}
|
||||||
|
// We always need to set the 'text' type if we want to drag
|
||||||
|
// Because IE 11 only accepts this single type.
|
||||||
|
// If we pass JSON here, IE can can access all node properties,
|
||||||
|
// even when the source lives in another window. (D'n'd inside
|
||||||
|
// the same window will always work.)
|
||||||
|
// The drawback is, that in this case ALL browsers will see
|
||||||
|
// the JSON representation as 'text', so dragging
|
||||||
|
// to a text field will insert the JSON string instead of
|
||||||
|
// the node title.
|
||||||
|
if( dndOpts.setTextTypeJson ) {
|
||||||
|
dataTransfer.setData("text", json);
|
||||||
|
} else {
|
||||||
|
dataTransfer.setData("text", node.title);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the allowed and current drag mode (move, copy, or link)
|
||||||
|
dataTransfer.effectAllowed = "all"; // "copyMove"
|
||||||
|
// dataTransfer.dropEffect = "move";
|
||||||
|
|
||||||
|
// Set the title as drag image (otherwise it would contain the expander)
|
||||||
|
if( dataTransfer.setDragImage ) {
|
||||||
|
// IE 11 does not support this
|
||||||
|
dataTransfer.setDragImage($(node.span).find(".fancytree-title")[0], -10, -10);
|
||||||
|
// dataTransfer.setDragImage($(node.span)[0], -10, -10);
|
||||||
|
}
|
||||||
|
// Let user modify above settings
|
||||||
|
return dndOpts.dragStart(node, data) !== false;
|
||||||
|
|
||||||
|
case "drag":
|
||||||
|
// Called every few miliseconds
|
||||||
|
$source.toggleClass(classDragRemove, isMove);
|
||||||
|
dndOpts.dragDrag(node, data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "dragend":
|
||||||
|
$(node.span).removeClass(classDragSource + " " + classDragRemove);
|
||||||
|
SOURCE_NODE = null;
|
||||||
|
DRAG_ENTER_RESPONSE = null;
|
||||||
|
// data.dropEffect = dataTransfer.dropEffect;
|
||||||
|
data.isCancelled = (dataTransfer.dropEffect === "none");
|
||||||
|
$dropMarker.hide();
|
||||||
|
dndOpts.dragEnd(node, data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Enable drop support if dragEnter() is specified:
|
||||||
|
if( dndOpts.dragEnter ) {
|
||||||
|
// Bind drop event handlers
|
||||||
|
tree.$container.on("dragenter dragover dragleave drop", function(event){
|
||||||
|
var json, nodeData, r, res,
|
||||||
|
allowDrop = null,
|
||||||
|
node = getNode(event),
|
||||||
|
dataTransfer = event.dataTransfer || event.originalEvent.dataTransfer,
|
||||||
|
// glyph = opts.glyph || null,
|
||||||
|
data = {
|
||||||
|
node: node,
|
||||||
|
tree: tree,
|
||||||
|
options: tree.options,
|
||||||
|
hitMode: DRAG_ENTER_RESPONSE,
|
||||||
|
originalEvent: event,
|
||||||
|
dataTransfer: dataTransfer,
|
||||||
|
otherNode: SOURCE_NODE || null,
|
||||||
|
otherNodeData: null, // set by drop event
|
||||||
|
dropEffect: undefined, // set by drop event
|
||||||
|
isCancelled: undefined // set by drop event
|
||||||
|
};
|
||||||
|
|
||||||
|
switch( event.type ) {
|
||||||
|
|
||||||
|
case "dragenter":
|
||||||
|
// The dragenter event is fired when a dragged element or
|
||||||
|
// text selection enters a valid drop target.
|
||||||
|
|
||||||
|
if( !node ) {
|
||||||
|
// Sometimes we get dragenter for the container element
|
||||||
|
tree.debug("Ignore non-node " + event.type + ": " + event.target.tagName + "." + event.target.className);
|
||||||
|
DRAG_ENTER_RESPONSE = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(node.span)
|
||||||
|
.addClass(classDropOver)
|
||||||
|
.removeClass(classDropAccept + " " + classDropReject);
|
||||||
|
|
||||||
|
if( dndOpts.preventNonNodes && !nodeData ) {
|
||||||
|
node.debug("Reject dropping a non-node");
|
||||||
|
DRAG_ENTER_RESPONSE = false;
|
||||||
|
break;
|
||||||
|
} else if( dndOpts.preventForeignNodes && (!SOURCE_NODE || SOURCE_NODE.tree !== node.tree ) ) {
|
||||||
|
node.debug("Reject dropping a foreign node");
|
||||||
|
DRAG_ENTER_RESPONSE = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: dragenter is fired BEFORE the dragleave event
|
||||||
|
// of the previous element!
|
||||||
|
// https://www.w3.org/Bugs/Public/show_bug.cgi?id=19041
|
||||||
|
setTimeout(function(){
|
||||||
|
// node.info("DELAYED " + event.type, event.target, DRAG_ENTER_RESPONSE);
|
||||||
|
// Auto-expand node (only when 'over' the node, not 'before', or 'after')
|
||||||
|
if( dndOpts.autoExpandMS &&
|
||||||
|
node.hasChildren() !== false && !node.expanded &&
|
||||||
|
(!dndOpts.dragExpand || dndOpts.dragExpand(node, data) !== false)
|
||||||
|
) {
|
||||||
|
node.scheduleAction("expand", dndOpts.autoExpandMS);
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
$dropMarker.show();
|
||||||
|
|
||||||
|
// Call dragEnter() to figure out if (and where) dropping is allowed
|
||||||
|
if( dndOpts.preventRecursiveMoves && node.isDescendantOf(data.otherNode) ){
|
||||||
|
res = false;
|
||||||
|
}else{
|
||||||
|
r = dndOpts.dragEnter(node, data);
|
||||||
|
res = normalizeDragEnterResponse(r);
|
||||||
|
}
|
||||||
|
DRAG_ENTER_RESPONSE = res;
|
||||||
|
|
||||||
|
allowDrop = res && ( res.over || res.before || res.after );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "dragover":
|
||||||
|
// The dragover event is fired when an element or text
|
||||||
|
// selection is being dragged over a valid drop target
|
||||||
|
// (every few hundred milliseconds).
|
||||||
|
LAST_HIT_MODE = handleDragOver(event, data);
|
||||||
|
allowDrop = !!LAST_HIT_MODE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "dragleave":
|
||||||
|
// NOTE: dragleave is fired AFTER the dragenter event of the
|
||||||
|
// FOLLOWING element.
|
||||||
|
if( !node ) {
|
||||||
|
tree.debug("Ignore non-node " + event.type + ": " + event.target.tagName + "." + event.target.className);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if( !$(node.span).hasClass(classDropOver) ) {
|
||||||
|
node.debug("Ignore dragleave (multi)"); //, event.currentTarget);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$(node.span).removeClass(classDropOver + " " + classDropAccept + " " + classDropReject);
|
||||||
|
node.scheduleAction("cancel");
|
||||||
|
dndOpts.dragLeave(node, data);
|
||||||
|
$dropMarker.hide();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "drop":
|
||||||
|
// Data is only readable in the (dragenter and) drop event:
|
||||||
|
|
||||||
|
if( $.inArray(nodeMimeType, dataTransfer.types) >= 0 ) {
|
||||||
|
nodeData = dataTransfer.getData(nodeMimeType);
|
||||||
|
tree.info(event.type + ": getData('application/x-fancytree-node'): '" + nodeData + "'");
|
||||||
|
}
|
||||||
|
if( !nodeData ) {
|
||||||
|
// 1. Source is not a Fancytree node, or
|
||||||
|
// 2. If the FT mime type was set, but returns '', this
|
||||||
|
// is probably IE 11 (which only supports 'text')
|
||||||
|
nodeData = dataTransfer.getData("text");
|
||||||
|
tree.info(event.type + ": getData('text'): '" + nodeData + "'");
|
||||||
|
}
|
||||||
|
if( nodeData ) {
|
||||||
|
try {
|
||||||
|
// 'text' type may contain JSON if IE is involved
|
||||||
|
// and setTextTypeJson option was set
|
||||||
|
json = JSON.parse(nodeData);
|
||||||
|
if( json.title !== undefined ) {
|
||||||
|
data.otherNodeData = json;
|
||||||
|
}
|
||||||
|
} catch(ex) {
|
||||||
|
// assume 'text' type contains plain text, so `otherNodeData`
|
||||||
|
// should not be set
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tree.debug(event.type + ": nodeData: '" + nodeData + "', otherNodeData: ", data.otherNodeData);
|
||||||
|
|
||||||
|
$(node.span).removeClass(classDropOver + " " + classDropAccept + " " + classDropReject);
|
||||||
|
$dropMarker.hide();
|
||||||
|
|
||||||
|
data.hitMode = LAST_HIT_MODE;
|
||||||
|
data.dropEffect = dataTransfer.dropEffect;
|
||||||
|
data.isCancelled = data.dropEffect === "none";
|
||||||
|
|
||||||
|
// Let user implement the actual drop operation
|
||||||
|
dndOpts.dragDrop(node, data);
|
||||||
|
|
||||||
|
// Prevent browser's default drop handling
|
||||||
|
event.preventDefault();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Dnd API madness: we must PREVENT default handling to enable dropping
|
||||||
|
if( allowDrop ) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||
315
frontend/js/fancytree/src/jquery.fancytree.edit.js
Normal file
@@ -0,0 +1,315 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.edit.js
|
||||||
|
*
|
||||||
|
* Make node titles editable.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
var isMac = /Mac/.test(navigator.platform),
|
||||||
|
escapeHtml = $.ui.fancytree.escapeHtml,
|
||||||
|
unescapeHtml = $.ui.fancytree.unescapeHtml;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-edit] Start inline editing of current node title.
|
||||||
|
*
|
||||||
|
* @alias FancytreeNode#editStart
|
||||||
|
* @requires Fancytree
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.editStart = function(){
|
||||||
|
var $input,
|
||||||
|
node = this,
|
||||||
|
tree = this.tree,
|
||||||
|
local = tree.ext.edit,
|
||||||
|
instOpts = tree.options.edit,
|
||||||
|
$title = $(".fancytree-title", node.span),
|
||||||
|
eventData = {
|
||||||
|
node: node,
|
||||||
|
tree: tree,
|
||||||
|
options: tree.options,
|
||||||
|
isNew: $(node[tree.statusClassPropName]).hasClass("fancytree-edit-new"),
|
||||||
|
orgTitle: node.title,
|
||||||
|
input: null,
|
||||||
|
dirty: false
|
||||||
|
};
|
||||||
|
|
||||||
|
// beforeEdit may want to modify the title before editing
|
||||||
|
if( instOpts.beforeEdit.call(node, {type: "beforeEdit"}, eventData) === false ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$.ui.fancytree.assert(!local.currentNode, "recursive edit");
|
||||||
|
local.currentNode = this;
|
||||||
|
local.eventData = eventData;
|
||||||
|
|
||||||
|
// Disable standard Fancytree mouse- and key handling
|
||||||
|
tree.widget._unbind();
|
||||||
|
// #116: ext-dnd prevents the blur event, so we have to catch outer clicks
|
||||||
|
$(document).on("mousedown.fancytree-edit", function(event){
|
||||||
|
if( ! $(event.target).hasClass("fancytree-edit-input") ){
|
||||||
|
node.editEnd(true, event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Replace node with <input>
|
||||||
|
$input = $("<input />", {
|
||||||
|
"class": "fancytree-edit-input",
|
||||||
|
type: "text",
|
||||||
|
value: tree.options.escapeTitles ? eventData.orgTitle : unescapeHtml(eventData.orgTitle)
|
||||||
|
});
|
||||||
|
local.eventData.input = $input;
|
||||||
|
if ( instOpts.adjustWidthOfs != null ) {
|
||||||
|
$input.width($title.width() + instOpts.adjustWidthOfs);
|
||||||
|
}
|
||||||
|
if ( instOpts.inputCss != null ) {
|
||||||
|
$input.css(instOpts.inputCss);
|
||||||
|
}
|
||||||
|
|
||||||
|
$title.html($input);
|
||||||
|
|
||||||
|
// Focus <input> and bind keyboard handler
|
||||||
|
$input
|
||||||
|
.focus()
|
||||||
|
.change(function(event){
|
||||||
|
$input.addClass("fancytree-edit-dirty");
|
||||||
|
}).keydown(function(event){
|
||||||
|
switch( event.which ) {
|
||||||
|
case $.ui.keyCode.ESCAPE:
|
||||||
|
node.editEnd(false, event);
|
||||||
|
break;
|
||||||
|
case $.ui.keyCode.ENTER:
|
||||||
|
node.editEnd(true, event);
|
||||||
|
return false; // so we don't start editmode on Mac
|
||||||
|
}
|
||||||
|
event.stopPropagation();
|
||||||
|
}).blur(function(event){
|
||||||
|
return node.editEnd(true, event);
|
||||||
|
});
|
||||||
|
|
||||||
|
instOpts.edit.call(node, {type: "edit"}, eventData);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-edit] Stop inline editing.
|
||||||
|
* @param {Boolean} [applyChanges=false] false: cancel edit, true: save (if modified)
|
||||||
|
* @alias FancytreeNode#editEnd
|
||||||
|
* @requires jquery.fancytree.edit.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.editEnd = function(applyChanges, _event){
|
||||||
|
var newVal,
|
||||||
|
node = this,
|
||||||
|
tree = this.tree,
|
||||||
|
local = tree.ext.edit,
|
||||||
|
eventData = local.eventData,
|
||||||
|
instOpts = tree.options.edit,
|
||||||
|
$title = $(".fancytree-title", node.span),
|
||||||
|
$input = $title.find("input.fancytree-edit-input");
|
||||||
|
|
||||||
|
if( instOpts.trim ) {
|
||||||
|
$input.val($.trim($input.val()));
|
||||||
|
}
|
||||||
|
newVal = $input.val();
|
||||||
|
|
||||||
|
eventData.dirty = ( newVal !== node.title );
|
||||||
|
eventData.originalEvent = _event;
|
||||||
|
|
||||||
|
// Find out, if saving is required
|
||||||
|
if( applyChanges === false ) {
|
||||||
|
// If true/false was passed, honor this (except in rename mode, if unchanged)
|
||||||
|
eventData.save = false;
|
||||||
|
} else if( eventData.isNew ) {
|
||||||
|
// In create mode, we save everyting, except for empty text
|
||||||
|
eventData.save = (newVal !== "");
|
||||||
|
} else {
|
||||||
|
// In rename mode, we save everyting, except for empty or unchanged text
|
||||||
|
eventData.save = eventData.dirty && (newVal !== "");
|
||||||
|
}
|
||||||
|
// Allow to break (keep editor open), modify input, or re-define data.save
|
||||||
|
if( instOpts.beforeClose.call(node, {type: "beforeClose"}, eventData) === false){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( eventData.save && instOpts.save.call(node, {type: "save"}, eventData) === false){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$input
|
||||||
|
.removeClass("fancytree-edit-dirty")
|
||||||
|
.off();
|
||||||
|
// Unbind outer-click handler
|
||||||
|
$(document).off(".fancytree-edit");
|
||||||
|
|
||||||
|
if( eventData.save ) {
|
||||||
|
// # 171: escape user input (not required if global escaping is on)
|
||||||
|
node.setTitle( tree.options.escapeTitles ? newVal : escapeHtml(newVal) );
|
||||||
|
node.setFocus();
|
||||||
|
}else{
|
||||||
|
if( eventData.isNew ) {
|
||||||
|
node.remove();
|
||||||
|
node = eventData.node = null;
|
||||||
|
local.relatedNode.setFocus();
|
||||||
|
} else {
|
||||||
|
node.renderTitle();
|
||||||
|
node.setFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
local.eventData = null;
|
||||||
|
local.currentNode = null;
|
||||||
|
local.relatedNode = null;
|
||||||
|
// Re-enable mouse and keyboard handling
|
||||||
|
tree.widget._bind();
|
||||||
|
// Set keyboard focus, even if setFocus() claims 'nothing to do'
|
||||||
|
$(tree.$container).focus();
|
||||||
|
eventData.input = null;
|
||||||
|
instOpts.close.call(node, {type: "close"}, eventData);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-edit] Create a new child or sibling node and start edit mode.
|
||||||
|
*
|
||||||
|
* @param {String} [mode='child'] 'before', 'after', or 'child'
|
||||||
|
* @param {Object} [init] NodeData (or simple title string)
|
||||||
|
* @alias FancytreeNode#editCreateNode
|
||||||
|
* @requires jquery.fancytree.edit.js
|
||||||
|
* @since 2.4
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.editCreateNode = function(mode, init){
|
||||||
|
var newNode,
|
||||||
|
tree = this.tree,
|
||||||
|
self = this;
|
||||||
|
|
||||||
|
mode = mode || "child";
|
||||||
|
if( init == null ) {
|
||||||
|
init = { title: "" };
|
||||||
|
} else if( typeof init === "string" ) {
|
||||||
|
init = { title: init };
|
||||||
|
} else {
|
||||||
|
$.ui.fancytree.assert($.isPlainObject(init));
|
||||||
|
}
|
||||||
|
// Make sure node is expanded (and loaded) in 'child' mode
|
||||||
|
if( mode === "child" && !this.isExpanded() && this.hasChildren() !== false ) {
|
||||||
|
this.setExpanded().done(function(){
|
||||||
|
self.editCreateNode(mode, init);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
newNode = this.addNode(init, mode);
|
||||||
|
|
||||||
|
// #644: Don't filter new nodes.
|
||||||
|
newNode.match = true;
|
||||||
|
$(newNode[tree.statusClassPropName])
|
||||||
|
.removeClass("fancytree-hide")
|
||||||
|
.addClass("fancytree-match");
|
||||||
|
|
||||||
|
newNode.makeVisible(/*{noAnimation: true}*/).done(function(){
|
||||||
|
$(newNode[tree.statusClassPropName]).addClass("fancytree-edit-new");
|
||||||
|
self.tree.ext.edit.relatedNode = self;
|
||||||
|
newNode.editStart();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-edit] Check if any node in this tree in edit mode.
|
||||||
|
*
|
||||||
|
* @returns {FancytreeNode | null}
|
||||||
|
* @alias Fancytree#isEditing
|
||||||
|
* @requires jquery.fancytree.edit.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.isEditing = function(){
|
||||||
|
return this.ext.edit ? this.ext.edit.currentNode : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-edit] Check if this node is in edit mode.
|
||||||
|
* @returns {Boolean} true if node is currently beeing edited
|
||||||
|
* @alias FancytreeNode#isEditing
|
||||||
|
* @requires jquery.fancytree.edit.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.isEditing = function(){
|
||||||
|
return this.tree.ext.edit ? this.tree.ext.edit.currentNode === this : false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Extension code
|
||||||
|
*/
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "edit",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
adjustWidthOfs: 4, // null: don't adjust input size to content
|
||||||
|
allowEmpty: false, // Prevent empty input
|
||||||
|
inputCss: {minWidth: "3em"},
|
||||||
|
// triggerCancel: ["esc", "tab", "click"],
|
||||||
|
// triggerStart: ["f2", "dblclick", "shift+click", "mac+enter"],
|
||||||
|
triggerStart: ["f2", "shift+click", "mac+enter"],
|
||||||
|
trim: true, // Trim whitespace before save
|
||||||
|
// Events:
|
||||||
|
beforeClose: $.noop, // Return false to prevent cancel/save (data.input is available)
|
||||||
|
beforeEdit: $.noop, // Return false to prevent edit mode
|
||||||
|
close: $.noop, // Editor was removed
|
||||||
|
edit: $.noop, // Editor was opened (available as data.input)
|
||||||
|
// keypress: $.noop, // Not yet implemented
|
||||||
|
save: $.noop // Save data.input.val() or return false to keep editor open
|
||||||
|
},
|
||||||
|
// Local attributes
|
||||||
|
currentNode: null,
|
||||||
|
|
||||||
|
treeInit: function(ctx){
|
||||||
|
this._superApply(arguments);
|
||||||
|
this.$container.addClass("fancytree-ext-edit");
|
||||||
|
},
|
||||||
|
nodeClick: function(ctx) {
|
||||||
|
if( $.inArray("shift+click", ctx.options.edit.triggerStart) >= 0 ){
|
||||||
|
if( ctx.originalEvent.shiftKey ){
|
||||||
|
ctx.node.editStart();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this._superApply(arguments);
|
||||||
|
},
|
||||||
|
nodeDblclick: function(ctx) {
|
||||||
|
if( $.inArray("dblclick", ctx.options.edit.triggerStart) >= 0 ){
|
||||||
|
ctx.node.editStart();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return this._superApply(arguments);
|
||||||
|
},
|
||||||
|
nodeKeydown: function(ctx) {
|
||||||
|
switch( ctx.originalEvent.which ) {
|
||||||
|
case 113: // [F2]
|
||||||
|
if( $.inArray("f2", ctx.options.edit.triggerStart) >= 0 ){
|
||||||
|
ctx.node.editStart();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case $.ui.keyCode.ENTER:
|
||||||
|
if( $.inArray("mac+enter", ctx.options.edit.triggerStart) >= 0 && isMac ){
|
||||||
|
ctx.node.editStart();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return this._superApply(arguments);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||
353
frontend/js/fancytree/src/jquery.fancytree.filter.js
Normal file
@@ -0,0 +1,353 @@
|
|||||||
|
/*!
|
||||||
|
* jquery.fancytree.filter.js
|
||||||
|
*
|
||||||
|
* Remove or highlight tree nodes, based on a filter.
|
||||||
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2017, Martin Wendt (http://wwWendt.de)
|
||||||
|
*
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
||||||
|
*
|
||||||
|
* @version 2.22.5
|
||||||
|
* @date 2017-05-11T17:01:53Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($, window, document, undefined) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Private functions and variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
var KeyNoData = "__not_found__",
|
||||||
|
escapeHtml = $.ui.fancytree.escapeHtml;
|
||||||
|
|
||||||
|
function _escapeRegex(str){
|
||||||
|
/*jshint regexdash:true */
|
||||||
|
return (str + "").replace(/([.?*+\^\$\[\]\\(){}|-])/g, "\\$1");
|
||||||
|
}
|
||||||
|
|
||||||
|
function extractHtmlText(s){
|
||||||
|
if( s.indexOf(">") >= 0 ) {
|
||||||
|
return $("<div/>").html(s).text();
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype._applyFilterImpl = function(filter, branchMode, _opts){
|
||||||
|
var match, statusNode, re, reHighlight,
|
||||||
|
count = 0,
|
||||||
|
treeOpts = this.options,
|
||||||
|
escapeTitles = treeOpts.escapeTitles,
|
||||||
|
prevAutoCollapse = treeOpts.autoCollapse,
|
||||||
|
opts = $.extend({}, treeOpts.filter, _opts),
|
||||||
|
hideMode = opts.mode === "hide",
|
||||||
|
leavesOnly = !!opts.leavesOnly && !branchMode;
|
||||||
|
|
||||||
|
// Default to 'match title substring (not case sensitive)'
|
||||||
|
if(typeof filter === "string"){
|
||||||
|
// console.log("rex", filter.split('').join('\\w*').replace(/\W/, ""))
|
||||||
|
if( opts.fuzzy ) {
|
||||||
|
// See https://codereview.stackexchange.com/questions/23899/faster-javascript-fuzzy-string-matching-function/23905#23905
|
||||||
|
// and http://www.quora.com/How-is-the-fuzzy-search-algorithm-in-Sublime-Text-designed
|
||||||
|
// and http://www.dustindiaz.com/autocomplete-fuzzy-matching
|
||||||
|
match = filter.split("").reduce(function(a, b) {
|
||||||
|
return a + "[^" + b + "]*" + b;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
match = _escapeRegex(filter); // make sure a '.' is treated literally
|
||||||
|
}
|
||||||
|
re = new RegExp(".*" + match + ".*", "i");
|
||||||
|
reHighlight = new RegExp(_escapeRegex(filter), "gi");
|
||||||
|
filter = function(node){
|
||||||
|
var display,
|
||||||
|
text = escapeTitles ? node.title : extractHtmlText(node.title),
|
||||||
|
res = !!re.test(text);
|
||||||
|
|
||||||
|
if( res && opts.highlight ) {
|
||||||
|
display = escapeTitles ? escapeHtml(node.title) : text;
|
||||||
|
node.titleWithHighlight = display.replace(reHighlight, function(s){
|
||||||
|
return "<mark>" + s + "</mark>";
|
||||||
|
});
|
||||||
|
// node.debug("filter", escapeTitles, text, node.titleWithHighlight);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
this.enableFilter = true;
|
||||||
|
this.lastFilterArgs = arguments;
|
||||||
|
|
||||||
|
this.$div.addClass("fancytree-ext-filter");
|
||||||
|
if( hideMode ){
|
||||||
|
this.$div.addClass("fancytree-ext-filter-hide");
|
||||||
|
} else {
|
||||||
|
this.$div.addClass("fancytree-ext-filter-dimm");
|
||||||
|
}
|
||||||
|
this.$div.toggleClass("fancytree-ext-filter-hide-expanders", !!opts.hideExpanders);
|
||||||
|
// Reset current filter
|
||||||
|
this.visit(function(node){
|
||||||
|
delete node.match;
|
||||||
|
delete node.titleWithHighlight;
|
||||||
|
node.subMatchCount = 0;
|
||||||
|
});
|
||||||
|
statusNode = this.getRootNode()._findDirectChild(KeyNoData);
|
||||||
|
if( statusNode ) {
|
||||||
|
statusNode.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adjust node.hide, .match, and .subMatchCount properties
|
||||||
|
treeOpts.autoCollapse = false; // #528
|
||||||
|
|
||||||
|
this.visit(function(node){
|
||||||
|
if ( leavesOnly && node.children != null ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var res = filter(node),
|
||||||
|
matchedByBranch = false;
|
||||||
|
|
||||||
|
if( res === "skip" ) {
|
||||||
|
node.visit(function(c){
|
||||||
|
c.match = false;
|
||||||
|
}, true);
|
||||||
|
return "skip";
|
||||||
|
}
|
||||||
|
if( !res && (branchMode || res === "branch") && node.parent.match ) {
|
||||||
|
res = true;
|
||||||
|
matchedByBranch = true;
|
||||||
|
}
|
||||||
|
if( res ) {
|
||||||
|
count++;
|
||||||
|
node.match = true;
|
||||||
|
node.visitParents(function(p){
|
||||||
|
p.subMatchCount += 1;
|
||||||
|
// Expand match (unless this is no real match, but only a node in a matched branch)
|
||||||
|
if( opts.autoExpand && !matchedByBranch && !p.expanded ) {
|
||||||
|
p.setExpanded(true, {noAnimation: true, noEvents: true, scrollIntoView: false});
|
||||||
|
p._filterAutoExpanded = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
treeOpts.autoCollapse = prevAutoCollapse;
|
||||||
|
|
||||||
|
if( count === 0 && opts.nodata && hideMode ) {
|
||||||
|
statusNode = opts.nodata;
|
||||||
|
if( $.isFunction(statusNode) ) {
|
||||||
|
statusNode = statusNode();
|
||||||
|
}
|
||||||
|
if( statusNode === true ) {
|
||||||
|
statusNode = {};
|
||||||
|
} else if( typeof statusNode === "string" ) {
|
||||||
|
statusNode = { title: statusNode };
|
||||||
|
}
|
||||||
|
statusNode = $.extend({
|
||||||
|
statusNodeType: "nodata",
|
||||||
|
key: KeyNoData,
|
||||||
|
title: this.options.strings.noData
|
||||||
|
}, statusNode);
|
||||||
|
|
||||||
|
this.getRootNode().addNode(statusNode).match = true;
|
||||||
|
}
|
||||||
|
// Redraw whole tree
|
||||||
|
this.render();
|
||||||
|
return count;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-filter] Dimm or hide nodes.
|
||||||
|
*
|
||||||
|
* @param {function | string} filter
|
||||||
|
* @param {boolean} [opts={autoExpand: false, leavesOnly: false}]
|
||||||
|
* @returns {integer} count
|
||||||
|
* @alias Fancytree#filterNodes
|
||||||
|
* @requires jquery.fancytree.filter.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.filterNodes = function(filter, opts) {
|
||||||
|
if( typeof opts === "boolean" ) {
|
||||||
|
opts = { leavesOnly: opts };
|
||||||
|
this.warn("Fancytree.filterNodes() leavesOnly option is deprecated since 2.9.0 / 2015-04-19. Use opts.leavesOnly instead.");
|
||||||
|
}
|
||||||
|
return this._applyFilterImpl(filter, false, opts);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.applyFilter = function(filter){
|
||||||
|
this.warn("Fancytree.applyFilter() is deprecated since 2.1.0 / 2014-05-29. Use .filterNodes() instead.");
|
||||||
|
return this.filterNodes.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-filter] Dimm or hide whole branches.
|
||||||
|
*
|
||||||
|
* @param {function | string} filter
|
||||||
|
* @param {boolean} [opts={autoExpand: false}]
|
||||||
|
* @returns {integer} count
|
||||||
|
* @alias Fancytree#filterBranches
|
||||||
|
* @requires jquery.fancytree.filter.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.filterBranches = function(filter, opts){
|
||||||
|
return this._applyFilterImpl(filter, true, opts);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-filter] Reset the filter.
|
||||||
|
*
|
||||||
|
* @alias Fancytree#clearFilter
|
||||||
|
* @requires jquery.fancytree.filter.js
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.clearFilter = function(){
|
||||||
|
var $title,
|
||||||
|
statusNode = this.getRootNode()._findDirectChild(KeyNoData),
|
||||||
|
escapeTitles = this.options.escapeTitles,
|
||||||
|
enhanceTitle = this.options.enhanceTitle;
|
||||||
|
|
||||||
|
if( statusNode ) {
|
||||||
|
statusNode.remove();
|
||||||
|
}
|
||||||
|
this.visit(function(node){
|
||||||
|
if( node.match && node.span ) { // #491, #601
|
||||||
|
$title = $(node.span).find(">span.fancytree-title");
|
||||||
|
if( escapeTitles ) {
|
||||||
|
$title.text(node.title);
|
||||||
|
} else {
|
||||||
|
$title.html(node.title);
|
||||||
|
}
|
||||||
|
if( enhanceTitle ) {
|
||||||
|
enhanceTitle({type: "enhanceTitle"}, {node: node, $title: $title});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete node.match;
|
||||||
|
delete node.subMatchCount;
|
||||||
|
delete node.titleWithHighlight;
|
||||||
|
if ( node.$subMatchBadge ) {
|
||||||
|
node.$subMatchBadge.remove();
|
||||||
|
delete node.$subMatchBadge;
|
||||||
|
}
|
||||||
|
if( node._filterAutoExpanded && node.expanded ) {
|
||||||
|
node.setExpanded(false, {noAnimation: true, noEvents: true, scrollIntoView: false});
|
||||||
|
}
|
||||||
|
delete node._filterAutoExpanded;
|
||||||
|
});
|
||||||
|
this.enableFilter = false;
|
||||||
|
this.lastFilterArgs = null;
|
||||||
|
this.$div.removeClass("fancytree-ext-filter fancytree-ext-filter-dimm fancytree-ext-filter-hide");
|
||||||
|
this.render();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-filter] Return true if a filter is currently applied.
|
||||||
|
*
|
||||||
|
* @returns {Boolean}
|
||||||
|
* @alias Fancytree#isFilterActive
|
||||||
|
* @requires jquery.fancytree.filter.js
|
||||||
|
* @since 2.13
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeClass.prototype.isFilterActive = function(){
|
||||||
|
return !!this.enableFilter;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ext-filter] Return true if this node is matched by current filter (or no filter is active).
|
||||||
|
*
|
||||||
|
* @returns {Boolean}
|
||||||
|
* @alias FancytreeNode#isMatched
|
||||||
|
* @requires jquery.fancytree.filter.js
|
||||||
|
* @since 2.13
|
||||||
|
*/
|
||||||
|
$.ui.fancytree._FancytreeNodeClass.prototype.isMatched = function(){
|
||||||
|
return !(this.tree.enableFilter && !this.match);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Extension code
|
||||||
|
*/
|
||||||
|
$.ui.fancytree.registerExtension({
|
||||||
|
name: "filter",
|
||||||
|
version: "2.22.5",
|
||||||
|
// Default options for this extension.
|
||||||
|
options: {
|
||||||
|
autoApply: true, // Re-apply last filter if lazy data is loaded
|
||||||
|
autoExpand: false, // Expand all branches that contain matches while filtered
|
||||||
|
counter: true, // Show a badge with number of matching child nodes near parent icons
|
||||||
|
fuzzy: false, // Match single characters in order, e.g. 'fb' will match 'FooBar'
|
||||||
|
hideExpandedCounter: true, // Hide counter badge if parent is expanded
|
||||||
|
hideExpanders: false, // Hide expanders if all child nodes are hidden by filter
|
||||||
|
highlight: true, // Highlight matches by wrapping inside <mark> tags
|
||||||
|
leavesOnly: false, // Match end nodes only
|
||||||
|
nodata: true, // Display a 'no data' status node if result is empty
|
||||||
|
mode: "dimm" // Grayout unmatched nodes (pass "hide" to remove unmatched node instead)
|
||||||
|
},
|
||||||
|
nodeLoadChildren: function(ctx, source) {
|
||||||
|
return this._superApply(arguments).done(function() {
|
||||||
|
if( ctx.tree.enableFilter && ctx.tree.lastFilterArgs && ctx.options.filter.autoApply ) {
|
||||||
|
ctx.tree._applyFilterImpl.apply(ctx.tree, ctx.tree.lastFilterArgs);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
nodeSetExpanded: function(ctx, flag, callOpts) {
|
||||||
|
delete ctx.node._filterAutoExpanded;
|
||||||
|
// Make sure counter badge is displayed again, when node is beeing collapsed
|
||||||
|
if( !flag && ctx.options.filter.hideExpandedCounter && ctx.node.$subMatchBadge ) {
|
||||||
|
ctx.node.$subMatchBadge.show();
|
||||||
|
}
|
||||||
|
return this._superApply(arguments);
|
||||||
|
},
|
||||||
|
nodeRenderStatus: function(ctx) {
|
||||||
|
// Set classes for current status
|
||||||
|
var res,
|
||||||
|
node = ctx.node,
|
||||||
|
tree = ctx.tree,
|
||||||
|
opts = ctx.options.filter,
|
||||||
|
$title = $(node.span).find("span.fancytree-title"),
|
||||||
|
$span = $(node[tree.statusClassPropName]),
|
||||||
|
enhanceTitle = ctx.options.enhanceTitle,
|
||||||
|
escapeTitles = ctx.options.escapeTitles;
|
||||||
|
|
||||||
|
res = this._super(ctx);
|
||||||
|
// nothing to do, if node was not yet rendered
|
||||||
|
if( !$span.length || !tree.enableFilter ) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
$span
|
||||||
|
.toggleClass("fancytree-match", !!node.match)
|
||||||
|
.toggleClass("fancytree-submatch", !!node.subMatchCount)
|
||||||
|
.toggleClass("fancytree-hide", !(node.match || node.subMatchCount));
|
||||||
|
// Add/update counter badge
|
||||||
|
if( opts.counter && node.subMatchCount && (!node.isExpanded() || !opts.hideExpandedCounter) ) {
|
||||||
|
if( !node.$subMatchBadge ) {
|
||||||
|
node.$subMatchBadge = $("<span class='fancytree-childcounter'/>");
|
||||||
|
$("span.fancytree-icon, span.fancytree-custom-icon", node.span).append(node.$subMatchBadge);
|
||||||
|
}
|
||||||
|
node.$subMatchBadge.show().text(node.subMatchCount);
|
||||||
|
} else if ( node.$subMatchBadge ) {
|
||||||
|
node.$subMatchBadge.hide();
|
||||||
|
}
|
||||||
|
// node.debug("nodeRenderStatus", node.titleWithHighlight, node.title)
|
||||||
|
// #601: also chek for $title.length, because we don't need to render
|
||||||
|
// if node.span is null (i.e. not rendered)
|
||||||
|
if( node.span && (!node.isEditing || !node.isEditing.call(node)) ) {
|
||||||
|
if( node.titleWithHighlight ) {
|
||||||
|
$title.html(node.titleWithHighlight);
|
||||||
|
} else if ( escapeTitles ) {
|
||||||
|
$title.text(node.title);
|
||||||
|
} else {
|
||||||
|
$title.html(node.title);
|
||||||
|
}
|
||||||
|
if( enhanceTitle ) {
|
||||||
|
enhanceTitle({type: "enhanceTitle"}, {node: node, $title: $title});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery, window, document));
|
||||||