chore: consolidate Docs/ into docs/ (single documentation directory)

Move UML/ directory and Architecture.md from Docs/ to docs/.
Rename Architecture.md to UML_ARCHITECTURE.md to avoid collision
with existing docs/ARCHITECTURE.md (docs organization file).

Update all references in README.md, CONTRIBUTING.md, CLAUDE.md,
and the architecture file itself.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
yusyus
2026-03-22 20:02:53 +03:00
parent a1934905f6
commit 8152045e38
1777 changed files with 14 additions and 14 deletions

2276
docs/UML/html/index.html/assets/js/bootstrap.js vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
/*! Image Map Resizer (imageMapResizer.min.js ) - v1.0.10 - 2019-04-10
* Desc: Resize HTML imageMap to scaled image.
* Copyright: (c) 2019 David J. Bradshaw - dave@bradshaw.net
* License: MIT
*/
!function(){"use strict";function r(){function e(){var r={width:u.width/u.naturalWidth,height:u.height/u.naturalHeight},a={width:parseInt(window.getComputedStyle(u,null).getPropertyValue("padding-left"),10),height:parseInt(window.getComputedStyle(u,null).getPropertyValue("padding-top"),10)};i.forEach(function(e,t){var n=0;o[t].coords=e.split(",").map(function(e){var t=1==(n=1-n)?"width":"height";return a[t]+Math.floor(Number(e)*r[t])}).join(",")})}function t(e){return e.coords.replace(/ *, */g,",").replace(/ +/g,",")}function n(){clearTimeout(d),d=setTimeout(e,250)}function r(e){return document.querySelector('img[usemap="'+e+'"]')}var a=this,o=null,i=null,u=null,d=null;"function"!=typeof a._resize?(o=a.getElementsByTagName("area"),i=Array.prototype.map.call(o,t),u=r("#"+a.name)||r(a.name),a._resize=e,u.addEventListener("load",e,!1),window.addEventListener("focus",e,!1),window.addEventListener("resize",n,!1),window.addEventListener("readystatechange",e,!1),document.addEventListener("fullscreenchange",e,!1),u.width===u.naturalWidth&&u.height===u.naturalHeight||e()):a._resize()}function e(){function t(e){e&&(!function(e){if(!e.tagName)throw new TypeError("Object is not a valid DOM element");if("MAP"!==e.tagName.toUpperCase())throw new TypeError("Expected <MAP> tag, found <"+e.tagName+">.")}(e),r.call(e),n.push(e))}var n;return function(e){switch(n=[],typeof e){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(e||"map"),t);break;case"object":t(e);break;default:throw new TypeError("Unexpected data type ("+typeof e+").")}return n}}"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e():window.imageMapResize=e(),"jQuery"in window&&(window.jQuery.fn.imageMapResize=function(){return this.filter("map").each(r).end()})}();
//# sourceMappingURL=imageMapResizer.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,247 @@
(function($){
$.fn.bonsai = function(options) {
var args = arguments;
return this.each(function() {
var bonsai = $(this).data('bonsai');
if (!bonsai) {
bonsai = new Bonsai(this, options);
$(this).data('bonsai', bonsai);
}
if (typeof options == 'string') {
var method = options;
bonsai[method].apply(bonsai, [].slice.call(args, 1));
}
});
};
$.bonsai = {};
$.bonsai.defaults = {
expandAll: false, // boolean expands all items
expand: null, // function to expand an item
collapse: null, // function to collapse an item
checkboxes: false, // requires jquery.qubit
// createCheckboxes: creates checkboxes for each list item.
//
// The name and value for the checkboxes can be declared in the
// markup using `data-name` and `data-value`.
//
// The name is inherited from parent items if not specified.
//
// Checked state can be indicated using `data-checked`.
createCheckboxes: false,
// handleDuplicateCheckboxes: adds onChange bindings to update
// any other checkboxes that have the same value.
handleDuplicateCheckboxes: false,
selectAllExclude: null
};
var Bonsai = function(el, options) {
var self = this;
options = options || {};
this.options = $.extend({}, $.bonsai.defaults, options);
this.el = $(el).addClass('bonsai').data('bonsai', this);
this.update();
if (this.isRootNode()) {
if (this.options.handleDuplicateCheckboxes) this.handleDuplicates();
if (this.options.checkboxes) this.el.qubit(this.options);
if (this.options.addExpandAll) this.addExpandAllLink();
if (this.options.addSelectAll) this.addSelectAllLink();
this.el.on('click', '.thumb', function(ev) {
self.toggle($(ev.currentTarget).closest('li'));
});
}
if (this.options.expandAll) this.expandAll();
};
Bonsai.prototype = {
isRootNode: function() {
return this.options.scope == this.el;
},
toggle: function(listItem) {
if (!$(listItem).hasClass('expanded')) {
this.expand(listItem);
}
else {
this.collapse(listItem);
}
},
expand: function(listItem) {
this.setExpanded(listItem, true);
},
collapse: function(listItem) {
this.setExpanded(listItem, false);
},
setExpanded: function(listItem, expanded) {
listItem = $(listItem);
if (listItem.length > 1) {
var self = this;
listItem.each(function() {
self.setExpanded(this, expanded);
});
return;
}
if (expanded) {
if (!listItem.data('subList')) return;
listItem = $(listItem).addClass('expanded')
.removeClass('collapsed');
$(listItem.data('subList')).css('height', 'auto');
}
else {
listItem = $(listItem).addClass('collapsed')
.removeClass('expanded');
$(listItem.data('subList')).height(0);
}
},
expandAll: function() {
this.expand(this.el.find('li'));
},
collapseAll: function() {
this.collapse(this.el.find('li'));
},
update: function() {
var self = this;
// store the scope in the options for child nodes
if (!this.options.scope) {
this.options.scope = this.el;
}
// look for a nested list (if any)
this.el.children().each(function() {
var item = $(this);
if (self.options.createCheckboxes) self.insertCheckbox(item);
// insert a thumb if it doesn't already exist
if (item.children().filter('.thumb').length == 0) {
var thumb = $('<div class="thumb"></div>');
item.prepend(thumb);
}
var subLists = item.children().filter('ol, ul');
item.toggleClass('has-children', subLists.find('li').length > 0);
// if there is a child list
subLists.each(function() {
// that's not empty
if ($('li', this).length == 0) {
return;
}
// then this el has children
item.data('subList', this);
// collapse the nested list
if (item.hasClass('expanded')) {
self.expand(item);
}
else {
self.collapse(item);
}
// handle any deeper nested lists
var exists = !!$(this).data('bonsai');
$(this).bonsai(exists ? 'update' : self.options);
});
});
this.expand = this.options.expand || this.expand;
this.collapse = this.options.collapse || this.collapse;
},
insertCheckbox: function(listItem) {
if (listItem.find('> input[type=checkbox]').length) return;
var id = this.generateId(listItem),
checkbox = $('<input type="checkbox" name="'
+ this.getCheckboxName(listItem) + '" id="' + id + '" /> '
),
children = listItem.children(),
// get the first text node for the label
text = listItem.contents().filter(function() {
return this.nodeType == 3;
}).first();
checkbox.val(listItem.data('value'));
checkbox.prop('checked', listItem.data('checked'))
children.remove();
listItem.append(checkbox)
.append(
$('<label for="' + id + '">').append(text ? text : children.first())
)
.append(text ? children : children.slice(1));
},
handleDuplicates: function() {
var self = this;
self.el.on('change', 'input[type=checkbox]', function(ev) {
var checkbox = $(ev.target);
if (!checkbox.val()) return;
// select all duplicate checkboxes that need to be updated
var selector = 'input[type=checkbox]'
+ '[value="' + checkbox.val() + '"]'
+ '[name="' + checkbox.attr('name') + '"]'
+ (checkbox.prop('checked') ? ':not(:checked)' : ':checked');
self.el.find(selector).prop({
checked: checkbox.prop('checked'),
indeterminate: checkbox.prop('indeterminate')
}).trigger('change');
});
},
idPrefix: 'checkbox-',
generateId: function(listItem) {
do {
var id = this.idPrefix + Bonsai.uniqueId++;
}
while($('#' + id).length > 0);
return id;
},
getCheckboxName: function(listItem) {
return listItem.data('name')
|| listItem.parents().filter('[data-name]').data('name');
},
addExpandAllLink: function() {
var self = this;
$('<div class="expand-all">')
.append($('<a class="all">Expand all</a>')
.on('click', function() {
self.expandAll();
})
)
.append('<i class="separator"></i>')
.append($('<a class="none">Collapse all</a>')
.on('click', function() {
self.collapseAll();
})
)
.insertBefore(this.el);
},
addSelectAllLink: function() {
var scope = this.options.scope,
self = this;
function getCheckboxes() {
// return all checkboxes that are not in hidden list items
return scope.find('li')
.filter(self.options.selectAllExclude || function() {
return $(this).css('display') != 'none';
})
.find('> input[type=checkbox]');
}
$('<div class="check-all">')
.append($('<a class="all">Select all</a>')
.css('cursor', 'pointer')
.on('click', function() {
getCheckboxes().prop({
checked: true,
indeterminate: false
});
})
)
.append('<i class="separator"></i>')
.append($('<a class="none">Select none</a>')
.css('cursor', 'pointer')
.on('click', function() {
getCheckboxes().prop({
checked: false,
indeterminate: false
});
})
)
.insertAfter(this.el);
},
setCheckedValues: function(values) {
var all = this.options.scope.find('input[type=checkbox]');
$.each(values, function(key, value) {
all.filter('[value="' + value + '"]')
.prop('checked', true)
.trigger('change');
});
}
};
$.extend(Bonsai, {
uniqueId: 0
});
}(jQuery));

File diff suppressed because one or more lines are too long