Update AdminLTE
- from 2.4.5 to 2.4.18 (cannot detect any issues) - set default scancycle for Apple Devices to 1
This commit is contained in:
@@ -940,7 +940,7 @@ def update_devices_data_from_scan ():
|
|||||||
|
|
||||||
# New Apple devices -> Cycle 15
|
# New Apple devices -> Cycle 15
|
||||||
print_log ('Update devices - 6 Cycle for Apple devices')
|
print_log ('Update devices - 6 Cycle for Apple devices')
|
||||||
sql.execute ("""UPDATE Devices SET dev_ScanCycle = 15
|
sql.execute ("""UPDATE Devices SET dev_ScanCycle = 1
|
||||||
WHERE dev_FirstConnection = ?
|
WHERE dev_FirstConnection = ?
|
||||||
AND UPPER(dev_Vendor) LIKE '%APPLE%' """,
|
AND UPPER(dev_Vendor) LIKE '%APPLE%' """,
|
||||||
(startTime,) )
|
(startTime,) )
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "",
|
"src": "https://net-dev.de/pialert_homescreen.png",
|
||||||
"sizes": "180x180",
|
"sizes": "180x180",
|
||||||
"type": "image/png"
|
"type": "image/png"
|
||||||
}
|
}
|
||||||
|
|||||||
351
front/index.php
Normal file
351
front/index.php
Normal file
@@ -0,0 +1,351 @@
|
|||||||
|
<!-- ---------------------------------------------------------------------------
|
||||||
|
# Pi.Alert
|
||||||
|
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||||
|
#
|
||||||
|
# devices.php - Front module. Devices list page
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||||
|
#--------------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require 'php/templates/header.php';
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Page ------------------------------------------------------------------ -->
|
||||||
|
<div class="content-wrapper">
|
||||||
|
|
||||||
|
<!-- Content header--------------------------------------------------------- -->
|
||||||
|
<section class="content-header">
|
||||||
|
<h1 id="pageTitle">
|
||||||
|
<?php echo $pia_lang['Device_Title'];?>
|
||||||
|
</h1>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Main content ---------------------------------------------------------- -->
|
||||||
|
<section class="content">
|
||||||
|
|
||||||
|
<!-- top small box 1 ------------------------------------------------------- -->
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||||
|
<a href="#" onclick="javascript: getDevicesList('all');">
|
||||||
|
<div class="small-box bg-aqua pa-small-box-aqua pa-small-box-2">
|
||||||
|
<div class="inner"> <h3 id="devicesAll"> -- </h3> </div>
|
||||||
|
<div class="icon"> <i class="fa fa-laptop text-aqua-20"></i> </div>
|
||||||
|
<div class="small-box-footer pa-small-box-footer"> <?php echo $pia_lang['Device_Shortcut_AllDevices'];?> <i class="fa fa-arrow-circle-right"></i> </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- top small box 2 ------------------------------------------------------- -->
|
||||||
|
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||||
|
<a href="#" onclick="javascript: getDevicesList('connected');">
|
||||||
|
<div class="small-box bg-green pa-small-box-green pa-small-box-2">
|
||||||
|
<div class="inner"> <h3 id="devicesConnected"> -- </h3> </div>
|
||||||
|
<div class="icon"> <i class="fa fa-plug text-green-20"></i> </div>
|
||||||
|
<div class="small-box-footer pa-small-box-footer"> <?php echo $pia_lang['Device_Shortcut_Connected'];?> <i class="fa fa-arrow-circle-right"></i> </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- top small box 3 ------------------------------------------------------- -->
|
||||||
|
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||||
|
<a href="#" onclick="javascript: getDevicesList('favorites');">
|
||||||
|
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||||
|
<div class="inner"> <h3 id="devicesFavorites"> -- </h3> </div>
|
||||||
|
<div class="icon"> <i class="fa fa-star text-yellow-20"></i> </div>
|
||||||
|
<div class="small-box-footer pa-small-box-footer"> <?php echo $pia_lang['Device_Shortcut_Favorites'];?> <i class="fa fa-arrow-circle-right"></i> </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- top small box 4 ------------------------------------------------------- -->
|
||||||
|
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||||
|
<a href="#" onclick="javascript: getDevicesList('new');">
|
||||||
|
<div class="small-box bg-yellow pa-small-box-yellow pa-small-box-2">
|
||||||
|
<div class="inner"> <h3 id="devicesNew"> -- </h3> </div>
|
||||||
|
<div class="icon"> <i class="ion ion-plus-round text-yellow-20"></i> </div>
|
||||||
|
<div class="small-box-footer pa-small-box-footer"> <?php echo $pia_lang['Device_Shortcut_NewDevices'];?> <i class="fa fa-arrow-circle-right"></i> </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- top small box 5 ------------------------------------------------------- -->
|
||||||
|
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||||
|
<a href="#" onclick="javascript: getDevicesList('down');">
|
||||||
|
<div class="small-box bg-red pa-small-box-red pa-small-box-2">
|
||||||
|
<div class="inner"> <h3 id="devicesDown"> -- </h3> </div>
|
||||||
|
<div class="icon"> <i class="fa fa-warning text-red-20"></i> </div>
|
||||||
|
<div class="small-box-footer pa-small-box-footer"> <?php echo $pia_lang['Device_Shortcut_DownAlerts'];?> <i class="fa fa-arrow-circle-right"></i> </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- top small box 6 ------------------------------------------------------- -->
|
||||||
|
<div class="col-lg-2 col-sm-4 col-xs-6">
|
||||||
|
<a href="#" onclick="javascript: getDevicesList('archived');">
|
||||||
|
<div class="small-box bg-gray pa-small-box-gray pa-small-box-2">
|
||||||
|
<div class="inner"> <h3 id="devicesArchived"> -- </h3> </div>
|
||||||
|
<div class="icon"> <i class="fa fa-eye-slash text-gray-20"></i> </div>
|
||||||
|
<div class="small-box-footer pa-small-box-footer"> <?php echo $pia_lang['Device_Shortcut_Archived'];?> <i class="fa fa-arrow-circle-right"></i> </div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /.row -->
|
||||||
|
|
||||||
|
<!-- datatable ------------------------------------------------------------- -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12">
|
||||||
|
<div id="tableDevicesBox" class="box">
|
||||||
|
|
||||||
|
<!-- box-header -->
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 id="tableDevicesTitle" class="box-title text-gray">Devices</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- table -->
|
||||||
|
<div class="box-body table-responsive">
|
||||||
|
<table id="tableDevices" class="table table-bordered table-hover table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Name'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Owner'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Type'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Favorite'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Group'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_FirstSession'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_LastSession'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_LastIP'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_MAC'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Status'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_MAC'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_LastIPOrder'];?></th>
|
||||||
|
<th><?php echo $pia_lang['Device_TableHead_Rowid'];?></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- /.box-body -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /.box -->
|
||||||
|
</div>
|
||||||
|
<!-- /.col -->
|
||||||
|
</div>
|
||||||
|
<!-- /.row -->
|
||||||
|
|
||||||
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
</section>
|
||||||
|
<!-- /.content -->
|
||||||
|
</div>
|
||||||
|
<!-- /.content-wrapper -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
<?php
|
||||||
|
require 'php/templates/footer.php';
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
<!-- Datatable -->
|
||||||
|
<link rel="stylesheet" href="lib/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
|
||||||
|
<script src="lib/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="lib/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- page script ----------------------------------------------------------- -->
|
||||||
|
<script>
|
||||||
|
var deviceStatus = 'all';
|
||||||
|
var parTableRows = 'Front_Devices_Rows';
|
||||||
|
var parTableOrder = 'Front_Devices_Order';
|
||||||
|
var tableRows = 10;
|
||||||
|
var tableOrder = [[3,'desc'], [0,'asc']];
|
||||||
|
|
||||||
|
// Read parameters & Initialize components
|
||||||
|
main();
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function main () {
|
||||||
|
// get parameter value
|
||||||
|
$.get('php/server/parameters.php?action=get¶meter='+ parTableRows, function(data) {
|
||||||
|
var result = JSON.parse(data);
|
||||||
|
if (Number.isInteger (result) ) {
|
||||||
|
tableRows = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get parameter value
|
||||||
|
$.get('php/server/parameters.php?action=get¶meter='+ parTableOrder, function(data) {
|
||||||
|
var result = JSON.parse(data);
|
||||||
|
result = JSON.parse(result);
|
||||||
|
if (Array.isArray (result) ) {
|
||||||
|
tableOrder = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize components with parameters
|
||||||
|
initializeDatatable();
|
||||||
|
|
||||||
|
// query data
|
||||||
|
getDevicesTotals();
|
||||||
|
getDevicesList (deviceStatus);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function initializeDatatable () {
|
||||||
|
var table=
|
||||||
|
$('#tableDevices').DataTable({
|
||||||
|
'paging' : true,
|
||||||
|
'lengthChange' : true,
|
||||||
|
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, '<?php echo $pia_lang['Device_Tablelenght_all'];?>']],
|
||||||
|
'searching' : true,
|
||||||
|
|
||||||
|
'ordering' : true,
|
||||||
|
'info' : true,
|
||||||
|
'autoWidth' : false,
|
||||||
|
|
||||||
|
// Parameters
|
||||||
|
'pageLength' : tableRows,
|
||||||
|
'order' : tableOrder,
|
||||||
|
// 'order' : [[3,'desc'], [0,'asc']],
|
||||||
|
|
||||||
|
'columnDefs' : [
|
||||||
|
{visible: false, targets: [10, 11, 12] },
|
||||||
|
{className: 'text-center', targets: [3, 8, 9] },
|
||||||
|
{width: '80px', targets: [5, 6] },
|
||||||
|
{width: '0px', targets: 9 },
|
||||||
|
{orderData: [11], targets: 7 },
|
||||||
|
|
||||||
|
// Device Name
|
||||||
|
{targets: [0],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
$(td).html ('<b><a href="deviceDetails.php?mac='+ rowData[10] +'" class="">'+ cellData +'</a></b>');
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Favorite
|
||||||
|
{targets: [3],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (cellData == 1){
|
||||||
|
$(td).html ('<i class="fa fa-star text-yellow" style="font-size:16px"></i>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Dates
|
||||||
|
{targets: [5, 6],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
$(td).html (translateHTMLcodes (cellData));
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Random MAC
|
||||||
|
{targets: [8],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (cellData == 1){
|
||||||
|
$(td).html ('<i data-toggle="tooltip" data-placement="right" title="Random MAC" style="font-size: 16px;" class="text-yellow glyphicon glyphicon-random"></i>');
|
||||||
|
} else {
|
||||||
|
$(td).html ('');
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
|
||||||
|
// Status color
|
||||||
|
{targets: [9],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
switch (cellData) {
|
||||||
|
case 'Down': color='red'; break;
|
||||||
|
case 'New': color='yellow'; break;
|
||||||
|
case 'On-line': color='green'; break;
|
||||||
|
case 'Off-line': color='gray text-white'; break;
|
||||||
|
case 'Archived': color='gray text-white'; break;
|
||||||
|
default: color='aqua'; break;
|
||||||
|
};
|
||||||
|
|
||||||
|
$(td).html ('<a href="deviceDetails.php?mac='+ rowData[10] +'" class="badge bg-'+ color +'">'+ cellData.replace('-', '') +'</a>');
|
||||||
|
} },
|
||||||
|
],
|
||||||
|
|
||||||
|
// Processing
|
||||||
|
'processing' : true,
|
||||||
|
'language' : {
|
||||||
|
processing: '<table> <td width="130px" align="middle">Loading...</td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td> </table>',
|
||||||
|
emptyTable: 'No data',
|
||||||
|
"lengthMenu": "<?php echo $pia_lang['Device_Tablelenght'];?>",
|
||||||
|
"search": "<?php echo $pia_lang['Device_Searchbox'];?>: ",
|
||||||
|
"paginate": {
|
||||||
|
"next": "<?php echo $pia_lang['Device_Table_nav_next'];?>",
|
||||||
|
"previous": "<?php echo $pia_lang['Device_Table_nav_prev'];?>"
|
||||||
|
},
|
||||||
|
"info": "<?php echo $pia_lang['Device_Table_info'];?>",
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Save cookie Rows displayed, and Parameters rows & order
|
||||||
|
$('#tableDevices').on( 'length.dt', function ( e, settings, len ) {
|
||||||
|
setParameter (parTableRows, len);
|
||||||
|
} );
|
||||||
|
|
||||||
|
$('#tableDevices').on( 'order.dt', function () {
|
||||||
|
setParameter (parTableOrder, JSON.stringify (table.order()) );
|
||||||
|
setCookie ('devicesList',JSON.stringify (table.column(12, { 'search': 'applied' }).data().toArray()) );
|
||||||
|
} );
|
||||||
|
|
||||||
|
$('#tableDevices').on( 'search.dt', function () {
|
||||||
|
setCookie ('devicesList', JSON.stringify (table.column(12, { 'search': 'applied' }).data().toArray()) );
|
||||||
|
} );
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function getDevicesTotals () {
|
||||||
|
// stop timer
|
||||||
|
stopTimerRefreshData();
|
||||||
|
|
||||||
|
// get totals and put in boxes
|
||||||
|
$.get('php/server/devices.php?action=getDevicesTotals', function(data) {
|
||||||
|
var totalsDevices = JSON.parse(data);
|
||||||
|
|
||||||
|
$('#devicesAll').html (totalsDevices[0].toLocaleString());
|
||||||
|
$('#devicesConnected').html (totalsDevices[1].toLocaleString());
|
||||||
|
$('#devicesFavorites').html (totalsDevices[2].toLocaleString());
|
||||||
|
$('#devicesNew').html (totalsDevices[3].toLocaleString());
|
||||||
|
$('#devicesDown').html (totalsDevices[4].toLocaleString());
|
||||||
|
$('#devicesArchived').html (totalsDevices[5].toLocaleString());
|
||||||
|
|
||||||
|
// Timer for refresh data
|
||||||
|
newTimerRefreshData (getDevicesTotals);
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function getDevicesList (status) {
|
||||||
|
// Save status selected
|
||||||
|
deviceStatus = status;
|
||||||
|
|
||||||
|
// Define color & title for the status selected
|
||||||
|
switch (deviceStatus) {
|
||||||
|
case 'all': tableTitle = '<?php echo $pia_lang['Device_Shortcut_AllDevices']?>'; color = 'aqua'; break;
|
||||||
|
case 'connected': tableTitle = '<?php echo $pia_lang['Device_Shortcut_Connected']?>'; color = 'green'; break;
|
||||||
|
case 'favorites': tableTitle = '<?php echo $pia_lang['Device_Shortcut_Favorites']?>'; color = 'yellow'; break;
|
||||||
|
case 'new': tableTitle = '<?php echo $pia_lang['Device_Shortcut_NewDevices']?>'; color = 'yellow'; break;
|
||||||
|
case 'down': tableTitle = '<?php echo $pia_lang['Device_Shortcut_DownAlerts']?>'; color = 'red'; break;
|
||||||
|
case 'archived': tableTitle = '<?php echo $pia_lang['Device_Shortcut_Archived']?>'; color = 'gray'; break;
|
||||||
|
default: tableTitle = '<?php echo $pia_lang['Device_Shortcut_Devices']?>'; color = 'gray'; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set title and color
|
||||||
|
$('#tableDevicesTitle')[0].className = 'box-title text-'+ color;
|
||||||
|
$('#tableDevicesBox')[0].className = 'box box-'+ color;
|
||||||
|
$('#tableDevicesTitle').html (tableTitle);
|
||||||
|
|
||||||
|
// Define new datasource URL and reload
|
||||||
|
$('#tableDevices').DataTable().ajax.url(
|
||||||
|
'php/server/devices.php?action=getDevicesList&status=' + deviceStatus).load();
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
2
front/lib/AdminLTE/.npmignore
Normal file
2
front/lib/AdminLTE/.npmignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
documentation/
|
||||||
|
composer.json
|
||||||
24
front/lib/AdminLTE/.travis.yml
Normal file
24
front/lib/AdminLTE/.travis.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
language: node_js
|
||||||
|
|
||||||
|
node_js:
|
||||||
|
- 8
|
||||||
|
- 9
|
||||||
|
- 10
|
||||||
|
- 11
|
||||||
|
- 12
|
||||||
|
|
||||||
|
env:
|
||||||
|
- INSTALL=bower
|
||||||
|
- INSTALL=yarn
|
||||||
|
- INSTALL=npm
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
|
||||||
|
install:
|
||||||
|
- if [ "bower" == $INSTALL ]; then yarn global add bower && bower install; fi
|
||||||
|
- if [ "yarn" == $INSTALL ]; then yarn install; fi
|
||||||
|
- if [ "npm" == $INSTALL ]; then npm install; fi
|
||||||
|
|
||||||
|
script:
|
||||||
|
- echo 'Tests must be configured'
|
||||||
312
front/lib/AdminLTE/Gruntfile.js
Normal file
312
front/lib/AdminLTE/Gruntfile.js
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
// AdminLTE Gruntfile
|
||||||
|
module.exports = function (grunt) { // jshint ignore:line
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
grunt.initConfig({
|
||||||
|
pkg : grunt.file.readJSON('package.json'),
|
||||||
|
watch : {
|
||||||
|
less : {
|
||||||
|
// Compiles less files upon saving
|
||||||
|
files: ['build/less/*.less'],
|
||||||
|
tasks: ['less:development', 'less:production', 'replace', 'notify:less']
|
||||||
|
},
|
||||||
|
js : {
|
||||||
|
// Compile js files upon saving
|
||||||
|
files: ['build/js/*.js'],
|
||||||
|
tasks: ['js', 'notify:js']
|
||||||
|
},
|
||||||
|
skins: {
|
||||||
|
// Compile any skin less files upon saving
|
||||||
|
files: ['build/less/skins/*.less'],
|
||||||
|
tasks: ['less:skins', 'less:minifiedSkins', 'notify:less']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Notify end of tasks
|
||||||
|
notify: {
|
||||||
|
less: {
|
||||||
|
options: {
|
||||||
|
title : 'AdminLTE',
|
||||||
|
message: 'LESS finished running'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
js : {
|
||||||
|
options: {
|
||||||
|
title : 'AdminLTE',
|
||||||
|
message: 'JS bundler finished running'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 'less'-task configuration
|
||||||
|
// This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css
|
||||||
|
less : {
|
||||||
|
// Development not compressed
|
||||||
|
development : {
|
||||||
|
files: {
|
||||||
|
// compilation.css : source.less
|
||||||
|
'dist/css/AdminLTE.css' : 'build/less/AdminLTE.less',
|
||||||
|
// AdminLTE without plugins
|
||||||
|
'dist/css/alt/AdminLTE-without-plugins.css' : 'build/less/AdminLTE-without-plugins.less',
|
||||||
|
// Separate plugins
|
||||||
|
'dist/css/alt/AdminLTE-select2.css' : 'build/less/select2.less',
|
||||||
|
'dist/css/alt/AdminLTE-fullcalendar.css' : 'build/less/fullcalendar.less',
|
||||||
|
'dist/css/alt/AdminLTE-bootstrap-social.css': 'build/less/bootstrap-social.less'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Production compressed version
|
||||||
|
production : {
|
||||||
|
options: {
|
||||||
|
compress: true
|
||||||
|
},
|
||||||
|
files : {
|
||||||
|
// compilation.css : source.less
|
||||||
|
'dist/css/AdminLTE.min.css' : 'build/less/AdminLTE.less',
|
||||||
|
// AdminLTE without plugins
|
||||||
|
'dist/css/alt/AdminLTE-without-plugins.min.css' : 'build/less/AdminLTE-without-plugins.less',
|
||||||
|
// Separate plugins
|
||||||
|
'dist/css/alt/AdminLTE-select2.min.css' : 'build/less/select2.less',
|
||||||
|
'dist/css/alt/AdminLTE-fullcalendar.min.css' : 'build/less/fullcalendar.less',
|
||||||
|
'dist/css/alt/AdminLTE-bootstrap-social.min.css': 'build/less/bootstrap-social.less'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Non minified skin files
|
||||||
|
skins : {
|
||||||
|
files: {
|
||||||
|
'dist/css/skins/skin-blue.css' : 'build/less/skins/skin-blue.less',
|
||||||
|
'dist/css/skins/skin-black.css' : 'build/less/skins/skin-black.less',
|
||||||
|
'dist/css/skins/skin-yellow.css' : 'build/less/skins/skin-yellow.less',
|
||||||
|
'dist/css/skins/skin-green.css' : 'build/less/skins/skin-green.less',
|
||||||
|
'dist/css/skins/skin-red.css' : 'build/less/skins/skin-red.less',
|
||||||
|
'dist/css/skins/skin-purple.css' : 'build/less/skins/skin-purple.less',
|
||||||
|
'dist/css/skins/skin-blue-light.css' : 'build/less/skins/skin-blue-light.less',
|
||||||
|
'dist/css/skins/skin-black-light.css' : 'build/less/skins/skin-black-light.less',
|
||||||
|
'dist/css/skins/skin-yellow-light.css': 'build/less/skins/skin-yellow-light.less',
|
||||||
|
'dist/css/skins/skin-green-light.css' : 'build/less/skins/skin-green-light.less',
|
||||||
|
'dist/css/skins/skin-red-light.css' : 'build/less/skins/skin-red-light.less',
|
||||||
|
'dist/css/skins/skin-purple-light.css': 'build/less/skins/skin-purple-light.less',
|
||||||
|
'dist/css/skins/_all-skins.css' : 'build/less/skins/_all-skins.less'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Skins minified
|
||||||
|
minifiedSkins: {
|
||||||
|
options: {
|
||||||
|
compress: true
|
||||||
|
},
|
||||||
|
files : {
|
||||||
|
'dist/css/skins/skin-blue.min.css' : 'build/less/skins/skin-blue.less',
|
||||||
|
'dist/css/skins/skin-black.min.css' : 'build/less/skins/skin-black.less',
|
||||||
|
'dist/css/skins/skin-yellow.min.css' : 'build/less/skins/skin-yellow.less',
|
||||||
|
'dist/css/skins/skin-green.min.css' : 'build/less/skins/skin-green.less',
|
||||||
|
'dist/css/skins/skin-red.min.css' : 'build/less/skins/skin-red.less',
|
||||||
|
'dist/css/skins/skin-purple.min.css' : 'build/less/skins/skin-purple.less',
|
||||||
|
'dist/css/skins/skin-blue-light.min.css' : 'build/less/skins/skin-blue-light.less',
|
||||||
|
'dist/css/skins/skin-black-light.min.css' : 'build/less/skins/skin-black-light.less',
|
||||||
|
'dist/css/skins/skin-yellow-light.min.css': 'build/less/skins/skin-yellow-light.less',
|
||||||
|
'dist/css/skins/skin-green-light.min.css' : 'build/less/skins/skin-green-light.less',
|
||||||
|
'dist/css/skins/skin-red-light.min.css' : 'build/less/skins/skin-red-light.less',
|
||||||
|
'dist/css/skins/skin-purple-light.min.css': 'build/less/skins/skin-purple-light.less',
|
||||||
|
'dist/css/skins/_all-skins.min.css' : 'build/less/skins/_all-skins.less'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Uglify task info. Compress the js files.
|
||||||
|
uglify: {
|
||||||
|
options : {
|
||||||
|
mangle : true,
|
||||||
|
output: {
|
||||||
|
comments: 'some'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
production: {
|
||||||
|
files: {
|
||||||
|
'dist/js/adminlte.min.js': ['dist/js/adminlte.js']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Concatenate JS Files
|
||||||
|
concat: {
|
||||||
|
options: {
|
||||||
|
separator: '\n\n',
|
||||||
|
banner : '/*! AdminLTE app.js\n'
|
||||||
|
+ '* ================\n'
|
||||||
|
+ '* Main JS application file for AdminLTE v2. This file\n'
|
||||||
|
+ '* should be included in all pages. It controls some layout\n'
|
||||||
|
+ '* options and implements exclusive AdminLTE plugins.\n'
|
||||||
|
+ '*\n'
|
||||||
|
+ '* @author Colorlib\n'
|
||||||
|
+ '* @support <https://github.com/ColorlibHQ/AdminLTE/issues>\n'
|
||||||
|
+ '* @version <%= pkg.version %>\n'
|
||||||
|
+ '* @repository <%= pkg.repository.url %>\n'
|
||||||
|
+ '* @license MIT <http://opensource.org/licenses/MIT>\n'
|
||||||
|
+ '*/\n\n'
|
||||||
|
+ '// Make sure jQuery has been loaded\n'
|
||||||
|
+ 'if (typeof jQuery === \'undefined\') {\n'
|
||||||
|
+ 'throw new Error(\'AdminLTE requires jQuery\')\n'
|
||||||
|
+ '}\n\n'
|
||||||
|
},
|
||||||
|
dist : {
|
||||||
|
src : [
|
||||||
|
'build/js/BoxRefresh.js',
|
||||||
|
'build/js/BoxWidget.js',
|
||||||
|
'build/js/ControlSidebar.js',
|
||||||
|
'build/js/DirectChat.js',
|
||||||
|
'build/js/PushMenu.js',
|
||||||
|
'build/js/TodoList.js',
|
||||||
|
'build/js/Tree.js',
|
||||||
|
'build/js/Layout.js',
|
||||||
|
],
|
||||||
|
dest: 'dist/js/adminlte.js'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Replace image paths in AdminLTE without plugins
|
||||||
|
replace: {
|
||||||
|
withoutPlugins : {
|
||||||
|
src : ['dist/css/alt/AdminLTE-without-plugins.css'],
|
||||||
|
dest : 'dist/css/alt/AdminLTE-without-plugins.css',
|
||||||
|
replacements: [
|
||||||
|
{
|
||||||
|
from: '../img',
|
||||||
|
to : '../../img'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
withoutPluginsMin: {
|
||||||
|
src : ['dist/css/alt/AdminLTE-without-plugins.min.css'],
|
||||||
|
dest : 'dist/css/alt/AdminLTE-without-plugins.min.css',
|
||||||
|
replacements: [
|
||||||
|
{
|
||||||
|
from: '../img',
|
||||||
|
to : '../../img'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Build the documentation files
|
||||||
|
includes: {
|
||||||
|
build: {
|
||||||
|
src : ['*.html'], // Source files
|
||||||
|
dest : 'documentation/', // Destination directory
|
||||||
|
flatten: true,
|
||||||
|
cwd : 'documentation/build',
|
||||||
|
options: {
|
||||||
|
silent : true,
|
||||||
|
includePath: 'documentation/build/include'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Optimize images
|
||||||
|
image: {
|
||||||
|
dynamic: {
|
||||||
|
files: [
|
||||||
|
{
|
||||||
|
expand: true,
|
||||||
|
cwd : 'build/img/',
|
||||||
|
src : ['**/*.{png,jpg,gif,svg,jpeg}'],
|
||||||
|
dest : 'dist/img/'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Validate JS code
|
||||||
|
jshint: {
|
||||||
|
options: {
|
||||||
|
jshintrc: 'build/js/.jshintrc'
|
||||||
|
},
|
||||||
|
grunt : {
|
||||||
|
options: {
|
||||||
|
jshintrc: 'build/grunt/.jshintrc'
|
||||||
|
},
|
||||||
|
src : 'Gruntfile.js'
|
||||||
|
},
|
||||||
|
core : {
|
||||||
|
src: 'build/js/*.js'
|
||||||
|
},
|
||||||
|
demo : {
|
||||||
|
src: 'dist/js/demo.js'
|
||||||
|
},
|
||||||
|
pages : {
|
||||||
|
src: 'dist/js/pages/*.js'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
jscs: {
|
||||||
|
options: {
|
||||||
|
config: 'build/js/.jscsrc'
|
||||||
|
},
|
||||||
|
core : {
|
||||||
|
src: '<%= jshint.core.src %>'
|
||||||
|
},
|
||||||
|
pages : {
|
||||||
|
src: '<%= jshint.pages.src %>'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Validate CSS files
|
||||||
|
csslint: {
|
||||||
|
options: {
|
||||||
|
csslintrc: 'build/less/.csslintrc'
|
||||||
|
},
|
||||||
|
dist : [
|
||||||
|
'dist/css/AdminLTE.css'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Validate Bootstrap HTML
|
||||||
|
bootlint: {
|
||||||
|
options: {
|
||||||
|
relaxerror: ['W005']
|
||||||
|
},
|
||||||
|
files : ['pages/**/*.html', '*.html']
|
||||||
|
},
|
||||||
|
|
||||||
|
// Delete images in build directory
|
||||||
|
// After compressing the images in the build/img dir, there is no need
|
||||||
|
// for them
|
||||||
|
clean: {
|
||||||
|
build: ['build/img/*']
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load all grunt tasks
|
||||||
|
|
||||||
|
// LESS Compiler
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-less');
|
||||||
|
// Watch File Changes
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||||
|
// Compress JS Files
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||||
|
// Include Files Within HTML
|
||||||
|
grunt.loadNpmTasks('grunt-includes');
|
||||||
|
// Optimize images
|
||||||
|
grunt.loadNpmTasks('grunt-image');
|
||||||
|
// Validate JS code
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||||
|
grunt.loadNpmTasks('grunt-jscs');
|
||||||
|
// Delete not needed files
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||||
|
// Lint CSS
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-csslint');
|
||||||
|
// Lint Bootstrap
|
||||||
|
grunt.loadNpmTasks('grunt-bootlint');
|
||||||
|
// Concatenate JS files
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||||
|
// Notify
|
||||||
|
grunt.loadNpmTasks('grunt-notify');
|
||||||
|
// Replace
|
||||||
|
grunt.loadNpmTasks('grunt-text-replace');
|
||||||
|
|
||||||
|
// Linting task
|
||||||
|
grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint']);
|
||||||
|
// JS task
|
||||||
|
grunt.registerTask('js', ['concat', 'uglify']);
|
||||||
|
// CSS Task
|
||||||
|
grunt.registerTask('css', ['less:development', 'less:production', 'replace']);
|
||||||
|
|
||||||
|
// The default task (running 'grunt' in console) is 'watch'
|
||||||
|
grunt.registerTask('default', ['watch']);
|
||||||
|
};
|
||||||
20
front/lib/AdminLTE/LICENSE
Normal file
20
front/lib/AdminLTE/LICENSE
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014-2017 Abdullah Almsaeed
|
||||||
|
|
||||||
|
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.
|
||||||
55
front/lib/AdminLTE/README.md
Normal file
55
front/lib/AdminLTE/README.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
[](https://travis-ci.org/ColorlibHQ/AdminLTE)
|
||||||
|

|
||||||
|
[](https://www.npmjs.com/package/admin-lte)
|
||||||
|
[](https://packagist.org/packages/almasaeed2010/adminlte)
|
||||||
|
[](https://cdnjs.com/libraries/admin-lte)
|
||||||
|
|
||||||
|
**AdminLTE** -- is a fully responsive admin template. Based on **[Bootstrap 3 & 4](https://github.com/twbs/bootstrap)** framework. Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops. Check out the live preview now and see for yourself.
|
||||||
|
|
||||||
|
**Download & Preview on [AdminLTE.IO](https://adminlte.io)**
|
||||||
|
|
||||||
|
### Looking for More Templates?
|
||||||
|
- **[Admin Templates](http://dashboardpack.com/)** by DashboardPack
|
||||||
|
- **[Bootstrap Templates](https://colorlib.com/wp/cat/bootstrap/)** by Colorlib
|
||||||
|
- **[Admin Dashboards](https://colorlib.com/wp/free-bootstrap-admin-dashboard-templates/)** by varios template designers and developers based on Bootstrap, Vue, React, Angular and more.
|
||||||
|
|
||||||
|
## Documentation & Installation Guide
|
||||||
|
Visit the [online documentation](https://adminlte.io/docs) for the most
|
||||||
|
updated guide.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Contribution
|
||||||
|
Contribution are always **welcome and recommended**! Here is how:
|
||||||
|
|
||||||
|
- Fork the repository ([here is the guide](https://help.github.com/articles/fork-a-repo/)).
|
||||||
|
- Clone to your machine ```git clone https://github.com/YOUR_USERNAME/AdminLTE.git```
|
||||||
|
- Make your changes
|
||||||
|
- Create a pull request
|
||||||
|
|
||||||
|
#### Contribution Requirements:
|
||||||
|
|
||||||
|
- When you contribute, you agree to give a non-exclusive license to AdminLTE.IO to use that contribution in any context as we (AdminLTE.IO) see appropriate.
|
||||||
|
- If you use content provided by another party, it must be appropriately licensed using an [open source](http://opensource.org/licenses) license.
|
||||||
|
- Contributions are only accepted through Github pull requests.
|
||||||
|
- Finally, contributed code must work in all supported browsers (see above for browser support).
|
||||||
|
|
||||||
|
### License
|
||||||
|
AdminLTE is an open source project by [AdminLTE.IO](https://adminlte.io) that is licensed under [MIT](http://opensource.org/licenses/MIT). AdminLTE.IO
|
||||||
|
reserves the right to change the license of future releases. Wondering what you can or can't do? View the [license guide](https://adminlte.io/docs/license).
|
||||||
|
|
||||||
|
### Legacy Releases
|
||||||
|
AdminLTE 1.x can be easily upgraded to 2.x using [this guide](https://adminlte.io/themes/AdminLTE/documentation/index.html#upgrade), but if you intend to keep using AdminLTE 1.x, you can download the latest release from the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) section above.
|
||||||
|
|
||||||
|
### Change log
|
||||||
|
**For the most recent change log, visit the [releases page](https://github.com/ColorlibHQ/AdminLTE/releases).** We will add detailed release notes to each new release.
|
||||||
|
|
||||||
|
### Image Credits
|
||||||
|
- [Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
|
||||||
|
- [Graphicsfuel](http://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
|
||||||
|
- [Pickaface](http://pickaface.net/)
|
||||||
|
- [Unsplash](https://unsplash.com/)
|
||||||
|
- [Uifaces](http://uifaces.com/)
|
||||||
64
front/lib/AdminLTE/bower.json
Normal file
64
front/lib/AdminLTE/bower.json
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"name": "admin-lte",
|
||||||
|
"homepage": "https://adminlte.io",
|
||||||
|
"authors": [
|
||||||
|
"Abdullah Almsaeed <abdullah@almsaeedstudio.com>"
|
||||||
|
],
|
||||||
|
"description": "Admin dashboard and control panel template",
|
||||||
|
"main": [
|
||||||
|
"index2.html",
|
||||||
|
"dist/css/AdminLTE.css",
|
||||||
|
"dist/js/adminlte.js",
|
||||||
|
"build/less/AdminLTE.less"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"css",
|
||||||
|
"js",
|
||||||
|
"html",
|
||||||
|
"template",
|
||||||
|
"admin",
|
||||||
|
"bootstrap",
|
||||||
|
"theme",
|
||||||
|
"backend",
|
||||||
|
"responsive"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"ignore": [
|
||||||
|
"/.*",
|
||||||
|
"node_modules",
|
||||||
|
"bower_components",
|
||||||
|
"composer.json",
|
||||||
|
"documentation"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"chart.js": "^1.0",
|
||||||
|
"ckeditor": "^4.7",
|
||||||
|
"bootstrap-colorpicker": "^2.5.1",
|
||||||
|
"bootstrap": "^3.4",
|
||||||
|
"jquery": "^3.4.1",
|
||||||
|
"datatables.net": "^1.10.15",
|
||||||
|
"datatables.net-bs": "^2.1.1",
|
||||||
|
"bootstrap-datepicker": "^1.7",
|
||||||
|
"bootstrap-daterangepicker": "^2.1.25",
|
||||||
|
"moment": "^2.18.1",
|
||||||
|
"fastclick": "^1.0.6",
|
||||||
|
"Flot": "flot#^0.8.3",
|
||||||
|
"fullcalendar": "^3.4",
|
||||||
|
"inputmask": "jquery.inputmask#^3.3.7",
|
||||||
|
"ion.rangeSlider": "ionrangeslider#^2.2",
|
||||||
|
"jvectormap": "^1.2.2",
|
||||||
|
"jquery-knob": "^1.2.13",
|
||||||
|
"morris.js": "^0.5.1",
|
||||||
|
"PACE": "pace#^1.0.2",
|
||||||
|
"select2": "^4.0.7",
|
||||||
|
"jquery-slimscroll": "slimscroll#^1.3.8",
|
||||||
|
"jquery-sparkline": "^2.1.3",
|
||||||
|
"font-awesome": "^4.7",
|
||||||
|
"Ionicons": "ionicons#^2.0.1",
|
||||||
|
"jquery-ui": "^1.12.1",
|
||||||
|
"seiyria-bootstrap-slider": "^10.6.2"
|
||||||
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"jquery": "^3.4.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
*.min.js
|
|
||||||
!excanvas.min.js
|
|
||||||
node_modules/
|
|
||||||
@@ -1,29 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "bootstrap-colorpicker",
|
"name": "bootstrap-colorpicker",
|
||||||
"main": [
|
|
||||||
"dist/css/bootstrap-colorpicker.css",
|
|
||||||
"dist/js/bootstrap-colorpicker.js"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"jquery": ">=1.10"
|
|
||||||
},
|
|
||||||
"ignore": [
|
|
||||||
"\\.*",
|
|
||||||
"/index.html",
|
|
||||||
"/package.json",
|
|
||||||
"/composer.json",
|
|
||||||
"/Gruntfile.js",
|
|
||||||
"/.travis.yml",
|
|
||||||
"/travis.sh",
|
|
||||||
"/server.js"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/itsjavi/bootstrap-colorpicker",
|
"homepage": "https://github.com/itsjavi/bootstrap-colorpicker",
|
||||||
"version": "2.5.2",
|
"version": "2.5.3",
|
||||||
"_release": "2.5.2",
|
"_release": "2.5.3",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "2.5.2",
|
"tag": "2.5.3",
|
||||||
"commit": "d56d0d3d5bee59904d48bce3c47a0029741e10e6"
|
"commit": "525cd6a0aa26ae95803bbf34d231c4163136a314"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/itsjavi/bootstrap-colorpicker.git",
|
"_source": "https://github.com/itsjavi/bootstrap-colorpicker.git",
|
||||||
"_target": "^2.5.1",
|
"_target": "^2.5.1",
|
||||||
|
|||||||
11
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.editorconfig
vendored
Normal file
11
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.editorconfig
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# EditorConfig is awesome: http://EditorConfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
47
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/CODE_OF_CONDUCT.md
vendored
Normal file
47
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/CODE_OF_CONDUCT.md
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team members through their social media sites or at _git @ itsjavi.com_.
|
||||||
|
The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
||||||
42
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/CONTRIBUTING.md
vendored
Normal file
42
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
The issue tracker is not the place for support requests. If you get stuck with bootstrap-colorpicker, it's very likely
|
||||||
|
that the fine folks at [StackOverflow](http://stackoverflow.com/) will be able to help you; simply describe the problem
|
||||||
|
you're having and provide them a link to the repo (so they know what code you're using).
|
||||||
|
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
For feature requests, suggestions or ideas, add `[SUGGESTION]` before the title of the issue, for anything else follow
|
||||||
|
the following guidelines.
|
||||||
|
|
||||||
|
### Steps to submit an issue
|
||||||
|
These steps are mandatory. Issues that are not clear or are not clearly reproduceable with a live example will be closed.
|
||||||
|
|
||||||
|
- Reproduce your problem in a separated environment, like in JSFiddle,
|
||||||
|
[here is a template for it](http://jsfiddle.net/0vopxm13/157/), that you can fork in the same page.
|
||||||
|
It already includes the required JS and CSS files.
|
||||||
|
- Before posting your issue, consider adding this information:
|
||||||
|
* Expected behaviour: what should happen?
|
||||||
|
* Actual behaviour: what happens instead?
|
||||||
|
* Your context: Where it happens? In which browser and version (if applicable)?
|
||||||
|
* Plugin version (and/or commit reference).
|
||||||
|
* jQuery version you use and list of all other plugins/scripts you are using with this one and may cause some conflict.
|
||||||
|
* A link to your JSFiddle (or similar tool) demo where you reproduced the problem (if applicable).
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
Patches and new features are welcome!
|
||||||
|
|
||||||
|
- Prerequisites: having `node`, `npm`, `yarn` and `grunt` installed in your machine.
|
||||||
|
- After a fresh clone for your fork, you need to run `yarn install` inside the project's root folder.
|
||||||
|
- For checking your changes in the browser you can execute `node serve` and navigate to http://localhost:5000/
|
||||||
|
- Before any commit run always `grunt` inside the project's root folder, to update the dist files
|
||||||
|
(never modify them manually).
|
||||||
|
- Do not change the plugin coding style.
|
||||||
|
- Check that the index.html demos aren't broken (modify if necessary).
|
||||||
|
- Test your code at least in Chrome, Firefox and Edge.
|
||||||
|
- Any new feature should come with updated docs if applicable (a demonstration).
|
||||||
|
- Generate the `/dist` files executing `grunt` before your Pull Request.
|
||||||
|
- Push to your fork and submit the pull request.
|
||||||
51
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/ISSUE_TEMPLATE.md
vendored
Normal file
51
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
THIS TEMPLATE IS MANDATORY!!
|
||||||
|
|
||||||
|
Thank you for your contribution to bootstrap-colorpicker! Please replace {Please write here *} with your description.
|
||||||
|
Please note that issues not following this template may be potentially discarded if they are not easily reproduceable
|
||||||
|
with live examples (in case of code issues) and/or the description is not clear enough.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Brief description
|
||||||
|
|
||||||
|
{Please write here a summary of the issue}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The following sections are only mandatory for bug reports.
|
||||||
|
For feature requests and other kind of tickets, you only need to fill the first section,
|
||||||
|
optionally with additional comments and examples.
|
||||||
|
-->
|
||||||
|
### Which software are you using?
|
||||||
|
|
||||||
|
- bootstrap-colorpicker version: {Please write here}
|
||||||
|
- bootstrap version: {Please write here}
|
||||||
|
- jQuery version: {Please write here}
|
||||||
|
- Browser name and version: {Please write here}
|
||||||
|
- Operative System name an version: {Please write here}
|
||||||
|
|
||||||
|
### What's the expected or desirable behavior?
|
||||||
|
|
||||||
|
{Please write here in case of code-related issues or remove this section}
|
||||||
|
|
||||||
|
### What's the actual current behavior?
|
||||||
|
|
||||||
|
{Please write here in case of code-related issues or remove this section}
|
||||||
|
|
||||||
|
### Are there some other related issues or PRs?
|
||||||
|
|
||||||
|
{Please write here if applicable the issue numbers or remove this section}
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
{Please write here in case of code-related issues or remove this section}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Live examples are MANDATORY for code-related issues
|
||||||
|
You have a JsFiddle template here: http://jsfiddle.net/0vopxm13/157/ which is using the latest master version of the library.
|
||||||
|
-->
|
||||||
|
*Live example*: {Please write here a link to your JsFiddle example}
|
||||||
|
|
||||||
|
### Additional Comments (if any)
|
||||||
|
|
||||||
|
{Please write here}
|
||||||
38
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
38
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
THIS TEMPLATE IS MANDATORY!!
|
||||||
|
|
||||||
|
Thank you for your contribution to bootstrap-colorpicker! Please replace {Please write here} with your description.
|
||||||
|
Please note that PRs not following this template may be potentially discarded if they are not clear enough.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Is your PR fixing an issue or introduces a new feature?
|
||||||
|
|
||||||
|
{Please write here}
|
||||||
|
|
||||||
|
### In case of fix, how this PR fixes the problem?
|
||||||
|
|
||||||
|
{Please write here only in case of fix PR or remove the section}
|
||||||
|
|
||||||
|
{Please also mention the related issue numbers you are trying to close, if applicable}
|
||||||
|
|
||||||
|
### In case of new feature, what are the benefits and use cases?
|
||||||
|
|
||||||
|
{Please write here only in case of feature PR or remove the section}
|
||||||
|
|
||||||
|
### Check list
|
||||||
|
Please mark with `x` inside the `[ ]` for anything that applies to this PR.
|
||||||
|
|
||||||
|
- [ ] All tests passed in travis-ci
|
||||||
|
- [ ] Regenerated the `dist` files via `grunt`
|
||||||
|
- [ ] All documentation examples are still working after testing them via `node serve`
|
||||||
|
- [ ] Added an example in the documentation for the newly introduced feature
|
||||||
|
- [ ] Provided an example via JsFiddle in the description of this PR
|
||||||
|
- [ ] Tested at least with latest Chrome, Firefox and Mobile (iOS Safari and/or Chrome for Android)
|
||||||
|
- [ ] This PR also introduces coding style changes (indentation, etc), in a separated commit
|
||||||
|
- [ ] The commit history is understandable and grouped into the minimum number of commits possible
|
||||||
|
- [ ] I've followed all other [`CONTRIBUTING.md`](.github/CONTRIBUTING.md#pull-requests) guidelines for Pull Requests.
|
||||||
|
|
||||||
|
### Additional Comments (if any)
|
||||||
|
|
||||||
|
{Please write here}
|
||||||
18
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.jshintrc
vendored
Normal file
18
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.jshintrc
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"bitwise": false,
|
||||||
|
"browser": true,
|
||||||
|
"curly": true,
|
||||||
|
"eqeqeq": true,
|
||||||
|
"eqnull": true,
|
||||||
|
"esnext": true,
|
||||||
|
"immed": true,
|
||||||
|
"jquery": true,
|
||||||
|
"latedef": true,
|
||||||
|
"newcap": true,
|
||||||
|
"noarg": true,
|
||||||
|
"node": true,
|
||||||
|
"strict": false,
|
||||||
|
"trailing": true,
|
||||||
|
"undef": true,
|
||||||
|
"predef" : ["define"]
|
||||||
|
}
|
||||||
21
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.npmignore
vendored
Normal file
21
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.npmignore
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
*~
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store*
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
*.log
|
||||||
|
/node_modules/
|
||||||
|
/bower_components/
|
||||||
|
/nbproject/
|
||||||
|
/gh-pages/
|
||||||
|
/package-lock.json
|
||||||
|
Gruntfile.js
|
||||||
|
/build
|
||||||
|
/docs
|
||||||
|
/tests
|
||||||
|
/spec
|
||||||
|
.*
|
||||||
|
/src/docs
|
||||||
|
*.psd
|
||||||
|
*.ai
|
||||||
|
composer.json
|
||||||
13
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.travis.yml
vendored
Normal file
13
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/.travis.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "6"
|
||||||
|
- "8"
|
||||||
|
before_script:
|
||||||
|
- npm install -g grunt-cli
|
||||||
|
- curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||||
|
|
||||||
|
script:
|
||||||
|
- yarn install
|
||||||
|
- grunt --verbose
|
||||||
|
# Check that files didn't change after running grunt. It should be run before pushing any code change.
|
||||||
|
- if ! git diff --name-only --quiet -- dist docs src index.html --; then echo \"Files where modified after grunt execution!!...\"; exit 1; fi
|
||||||
188
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/Gruntfile.js
vendored
Normal file
188
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/Gruntfile.js
vendored
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
'use strict';
|
||||||
|
module.exports = function (grunt) {
|
||||||
|
|
||||||
|
grunt.initConfig({
|
||||||
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
|
less: {
|
||||||
|
dist: {
|
||||||
|
options: {
|
||||||
|
strictMath: true,
|
||||||
|
sourceMap: true,
|
||||||
|
outputSourceFiles: true,
|
||||||
|
sourceMapURL: '<%= pkg.name %>.css.map',
|
||||||
|
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
|
||||||
|
},
|
||||||
|
src: 'src/less/colorpicker.less',
|
||||||
|
dest: 'dist/css/<%= pkg.name %>.css'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cssmin: {
|
||||||
|
options: {
|
||||||
|
compatibility: 'ie8',
|
||||||
|
keepSpecialComments: '*',
|
||||||
|
sourceMap: true,
|
||||||
|
advanced: false
|
||||||
|
},
|
||||||
|
dist: {
|
||||||
|
src: 'dist/css/<%= pkg.name %>.css',
|
||||||
|
dest: 'dist/css/<%= pkg.name %>.min.css'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
jshint: {
|
||||||
|
options: {
|
||||||
|
jshintrc: '.jshintrc'
|
||||||
|
},
|
||||||
|
files: [
|
||||||
|
'Gruntfile.js',
|
||||||
|
'docs/docs.js',
|
||||||
|
'dist/js/<%= pkg.name %>.js'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
jsbeautifier: {
|
||||||
|
options: {
|
||||||
|
js: {
|
||||||
|
braceStyle: "collapse",
|
||||||
|
breakChainedMethods: false,
|
||||||
|
e4x: false,
|
||||||
|
evalCode: false,
|
||||||
|
indentChar: " ",
|
||||||
|
indentLevel: 0,
|
||||||
|
indentSize: 2,
|
||||||
|
indentWithTabs: false,
|
||||||
|
jslintHappy: false,
|
||||||
|
keepArrayIndentation: false,
|
||||||
|
keepFunctionIndentation: false,
|
||||||
|
maxPreserveNewlines: 2,
|
||||||
|
preserveNewlines: true,
|
||||||
|
spaceBeforeConditional: true,
|
||||||
|
spaceInParen: false,
|
||||||
|
unescapeStrings: false,
|
||||||
|
wrapLineLength: 0,
|
||||||
|
endWithNewline: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
src: ['src/js/*.js', 'docs/docs.js'],
|
||||||
|
dist: ['dist/js/<%= pkg.name %>.js']
|
||||||
|
},
|
||||||
|
combine: {
|
||||||
|
js: {
|
||||||
|
input: 'src/js/colorpicker-plugin-wrapper.js',
|
||||||
|
output: 'dist/js/<%= pkg.name %>.js',
|
||||||
|
tokens: [{
|
||||||
|
token: "//@version",
|
||||||
|
string: '<%= pkg.version %>'
|
||||||
|
}, {
|
||||||
|
token: "//@colorpicker-color",
|
||||||
|
file: 'src/js/colorpicker-color.js'
|
||||||
|
}, {
|
||||||
|
token: "//@colorpicker-defaults",
|
||||||
|
file: 'src/js/colorpicker-defaults.js'
|
||||||
|
}, {
|
||||||
|
token: "//@colorpicker-component",
|
||||||
|
file: 'src/js/colorpicker-component.js'
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
less: {
|
||||||
|
input: 'src/less/colorpicker.less',
|
||||||
|
output: 'src/less/colorpicker.less',
|
||||||
|
tokens: [{
|
||||||
|
token: "//@version",
|
||||||
|
string: '<%= pkg.version %>'
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
strip_code: {
|
||||||
|
src: {
|
||||||
|
src: 'dist/js/*.js'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
uglify: {
|
||||||
|
options: {
|
||||||
|
banner: '/*!\n * Bootstrap Colorpicker v<%= pkg.version %>\n' +
|
||||||
|
' * https://itsjavi.com/bootstrap-colorpicker/\n */\n'
|
||||||
|
},
|
||||||
|
dist: {
|
||||||
|
files: {
|
||||||
|
'dist/js/<%= pkg.name %>.min.js': [
|
||||||
|
'dist/js/<%= pkg.name %>.js'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
less: {
|
||||||
|
files: [
|
||||||
|
'src/less/*.less'
|
||||||
|
],
|
||||||
|
tasks: ['combine:less', 'less', 'cssmin']
|
||||||
|
},
|
||||||
|
js: {
|
||||||
|
files: [
|
||||||
|
'src/js/*.js',
|
||||||
|
'docs/docs.js'
|
||||||
|
],
|
||||||
|
tasks: ['jsbeautifier:src', 'combine:js', 'jsbeautifier:dist', 'uglify', 'jshint']
|
||||||
|
},
|
||||||
|
handlebars: {
|
||||||
|
files: [
|
||||||
|
'docs/*.hbs',
|
||||||
|
'docs/**/*.hbs',
|
||||||
|
'docs/helpers/**/*.js'
|
||||||
|
],
|
||||||
|
tasks: ['assemble']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
assemble: {
|
||||||
|
options: {
|
||||||
|
assets: 'docs/assets',
|
||||||
|
helpers: ['docs/helpers/code'],
|
||||||
|
partials: ['docs/includes/**/*.hbs'],
|
||||||
|
layout: ['docs/layout.hbs'],
|
||||||
|
data: ['package.json'],
|
||||||
|
flatten: true
|
||||||
|
},
|
||||||
|
site: {
|
||||||
|
src: ['docs/pages/*.hbs'],
|
||||||
|
dest: './'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
clean: {
|
||||||
|
dist: [
|
||||||
|
'dist/css/*',
|
||||||
|
'dist/js/*',
|
||||||
|
'index_new.html'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load tasks
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-less');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
||||||
|
grunt.loadNpmTasks('grunt-jsbeautifier');
|
||||||
|
grunt.loadNpmTasks('grunt-combine');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||||
|
grunt.loadNpmTasks('grunt-assemble');
|
||||||
|
grunt.loadNpmTasks('grunt-strip-code');
|
||||||
|
|
||||||
|
// Register tasks
|
||||||
|
grunt.registerTask('default', [
|
||||||
|
'clean',
|
||||||
|
'combine:less',
|
||||||
|
'less',
|
||||||
|
'cssmin',
|
||||||
|
'jsbeautifier:src',
|
||||||
|
'combine:js',
|
||||||
|
'jsbeautifier:dist',
|
||||||
|
'strip_code',
|
||||||
|
'uglify',
|
||||||
|
'assemble',
|
||||||
|
'jshint'
|
||||||
|
]);
|
||||||
|
grunt.registerTask('dev', [
|
||||||
|
'watch'
|
||||||
|
]);
|
||||||
|
|
||||||
|
};
|
||||||
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
Simple and customizable colorpicker component for Twitter Bootstrap.
|
Simple and customizable colorpicker component for Twitter Bootstrap.
|
||||||
|
|
||||||
[](https://travis-ci.org/farbelous/bootstrap-colorpicker)
|
[](https://travis-ci.org/farbelous/bootstrap-colorpicker)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
For downloading the source code, you have many choices:
|
For downloading the source code, you have many choices:
|
||||||
|
|
||||||
- Downloading the [latest v2 source code ZIP file](https://github.com/farbelous/bootstrap-colorpicker/archive/v2.zip)
|
- Downloading the [latest v2.x source code ZIP file](https://github.com/farbelous/bootstrap-colorpicker/archive/v2.x.zip)
|
||||||
- Cloning the source code: `git clone https://github.com/farbelous/bootstrap-colorpicker.git`
|
- Cloning the source code: `git clone https://github.com/farbelous/bootstrap-colorpicker.git`
|
||||||
- Installing via NPM: `npm install bootstrap-colorpicker`
|
- Installing via NPM: `npm install bootstrap-colorpicker`
|
||||||
- Installing via Yarn: `yarn add bootstrap-colorpicker`
|
- Installing via Yarn: `yarn add bootstrap-colorpicker`
|
||||||
@@ -18,7 +18,7 @@ For downloading the source code, you have many choices:
|
|||||||
- [Documentation and demos](https://farbelous.github.io/bootstrap-colorpicker/v2/)
|
- [Documentation and demos](https://farbelous.github.io/bootstrap-colorpicker/v2/)
|
||||||
|
|
||||||
## Contributing and reporting issues
|
## Contributing and reporting issues
|
||||||
If you want to contribute to the source code or report issues and suggestions, please read the [CONTRIBUTING.md](CONTRIBUTING.md) guidelines first. Some steps are mandatory in order to accept a Pull Request.
|
If you want to contribute to the source code or report issues and suggestions, please read the [CONTRIBUTING.md](.github/CONTRIBUTING.md) guidelines first. Some steps are mandatory in order to accept a Pull Request.
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
Originally written by [Stefan Petre](http://www.eyecon.ro/)
|
Originally written by [Stefan Petre](http://www.eyecon.ro/)
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bootstrap-colorpicker",
|
|
||||||
"main": [
|
|
||||||
"dist/css/bootstrap-colorpicker.css",
|
|
||||||
"dist/js/bootstrap-colorpicker.js"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"jquery": ">=1.10"
|
|
||||||
},
|
|
||||||
"ignore": [
|
|
||||||
"\\.*",
|
|
||||||
"/index.html",
|
|
||||||
"/package.json",
|
|
||||||
"/composer.json",
|
|
||||||
"/Gruntfile.js",
|
|
||||||
"/.travis.yml",
|
|
||||||
"/travis.sh",
|
|
||||||
"/server.js"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
15
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/composer.json
vendored
Normal file
15
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/composer.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "itsjavi/bootstrap-colorpicker",
|
||||||
|
"description": "Fancy and customizable colorpicker plugin for Twitter Bootstrap",
|
||||||
|
"license": "Apache License Version 2.0",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Javier Aguilar",
|
||||||
|
"homepage": "https://itsjavi.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"require": {
|
||||||
|
"components/jquery" : ">=1.10"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -861,7 +861,7 @@
|
|||||||
'keyup.colorpicker': $.proxy(this.keyup, this)
|
'keyup.colorpicker': $.proxy(this.keyup, this)
|
||||||
});
|
});
|
||||||
this.input.on({
|
this.input.on({
|
||||||
'change.colorpicker': $.proxy(this.change, this)
|
'input.colorpicker': $.proxy(this.change, this)
|
||||||
});
|
});
|
||||||
if (this.component === false) {
|
if (this.component === false) {
|
||||||
this.element.on({
|
this.element.on({
|
||||||
@@ -1248,20 +1248,6 @@
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
change: function(e) {
|
change: function(e) {
|
||||||
this.keyup(e);
|
|
||||||
},
|
|
||||||
keyup: function(e) {
|
|
||||||
if ((e.keyCode === 38)) {
|
|
||||||
if (this.color.value.a < 1) {
|
|
||||||
this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
|
|
||||||
}
|
|
||||||
this.update(true);
|
|
||||||
} else if ((e.keyCode === 40)) {
|
|
||||||
if (this.color.value.a > 0) {
|
|
||||||
this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
|
|
||||||
}
|
|
||||||
this.update(true);
|
|
||||||
} else {
|
|
||||||
this.color = this.createColor(this.input.val());
|
this.color = this.createColor(this.input.val());
|
||||||
// Change format dynamically
|
// Change format dynamically
|
||||||
// Only occurs if user choose the dynamic format by
|
// Only occurs if user choose the dynamic format by
|
||||||
@@ -1274,7 +1260,26 @@
|
|||||||
this.updateComponent();
|
this.updateComponent();
|
||||||
this.updatePicker();
|
this.updatePicker();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.element.trigger({
|
||||||
|
type: 'changeColor',
|
||||||
|
color: this.color,
|
||||||
|
value: this.input.val()
|
||||||
|
});
|
||||||
|
},
|
||||||
|
keyup: function(e) {
|
||||||
|
if ((e.keyCode === 38)) {
|
||||||
|
if (this.color.value.a < 1) {
|
||||||
|
this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
|
||||||
}
|
}
|
||||||
|
this.update(true);
|
||||||
|
} else if ((e.keyCode === 40)) {
|
||||||
|
if (this.color.value.a > 0) {
|
||||||
|
this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
|
||||||
|
}
|
||||||
|
this.update(true);
|
||||||
|
}
|
||||||
|
|
||||||
this.element.trigger({
|
this.element.trigger({
|
||||||
type: 'changeColor',
|
type: 'changeColor',
|
||||||
color: this.color,
|
color: this.color,
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -18,7 +18,7 @@
|
|||||||
<link href="dist/css/bootstrap-colorpicker.min.css" rel="stylesheet">
|
<link href="dist/css/bootstrap-colorpicker.min.css" rel="stylesheet">
|
||||||
<link href="docs/assets/main.css" rel="stylesheet">
|
<link href="docs/assets/main.css" rel="stylesheet">
|
||||||
|
|
||||||
<script src="//code.jquery.com/jquery-3.1.1.min.js"></script>
|
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
|
||||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||||
<script src="dist/js/bootstrap-colorpicker.js"></script>
|
<script src="dist/js/bootstrap-colorpicker.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
794
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/index.html
vendored
Normal file
794
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/index.html
vendored
Normal file
@@ -0,0 +1,794 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<title>Colorpicker for Twitter Bootstrap</title>
|
||||||
|
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-85082661-5"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date()); gtag('config', 'UA-85082661-5');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="//cdnjs.cloudflare.com/ajax/libs/octicons/3.5.0/octicons.min.css" rel="stylesheet">
|
||||||
|
<link href="dist/css/bootstrap-colorpicker.min.css" rel="stylesheet">
|
||||||
|
<link href="docs/assets/main.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
|
||||||
|
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||||
|
<script src="dist/js/bootstrap-colorpicker.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="page-header">
|
||||||
|
<h1><i class="glyphicon glyphicon-tint"></i> Bootstrap Colorpicker 2.5.2
|
||||||
|
<small>for Twitter Bootstrap</small>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<article class="col-md-12">
|
||||||
|
<p>
|
||||||
|
Fancy and customizable colorpicker plugin for Twitter Bootstrap.
|
||||||
|
Originally written by <a
|
||||||
|
href="https://twitter.com/stefanpetre/" target="_blank">Stefan Petre</a> and maintained by
|
||||||
|
<a href="https://itsjavi.com/" target="_blank">Javi Aguilar</a> and the Github community.
|
||||||
|
</p>
|
||||||
|
<p class="alert alert-warning">
|
||||||
|
<b>NOTE</b> That this is an older version of the library documentation, please check
|
||||||
|
the project <a href="https://github.com/farbelous/bootstrap-colorpicker/blob/master/README.md">README</a>
|
||||||
|
to find the documentation for the newer and latest versions.
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<article class="col-md-12">
|
||||||
|
<hr>
|
||||||
|
<div class="social">
|
||||||
|
<a href="https://github.com/farbelous/bootstrap-colorpicker/" target="_blank"
|
||||||
|
class="btn btn-default btn-sm"><span class="octicon octicon-mark-github"></span>
|
||||||
|
Source code
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/farbelous/bootstrap-colorpicker/releases" target="_blank"
|
||||||
|
class="btn btn-default btn-sm">
|
||||||
|
Latest Releases
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/farbelous/bootstrap-colorpicker/archive/2.5.2.zip" target="_blank"
|
||||||
|
class="btn btn-success btn-sm"><i class="glyphicon glyphicon-download-alt"></i>
|
||||||
|
Download v2.5.2
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-7">
|
||||||
|
<h2>Documentation</h2>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p>Call the colopicker via javascript:</p>
|
||||||
|
<pre class="well">$('.sample-selector').colorpicker({ /*options...*/ });</pre>
|
||||||
|
<h3>Options</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You can set colorpicker options either as a plugin parameter or data-* attributes
|
||||||
|
</p>
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 100px;">Name</th>
|
||||||
|
<th style="width: 50px;">Type</th>
|
||||||
|
<th style="width: 100px;">Default</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>format</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td>false</td>
|
||||||
|
<td>If not false, forces the color format to be hex, rgb or rgba, otherwise the format is
|
||||||
|
automatically detected.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>color</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td>false</td>
|
||||||
|
<td>If not false, sets the color to this value.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>container</td>
|
||||||
|
<td>string or jQuery Element</td>
|
||||||
|
<td>false</td>
|
||||||
|
<td>If not false, the picker will be contained inside this element, otherwise it will be
|
||||||
|
appended to the document body.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>component</td>
|
||||||
|
<td>string or jQuery Element</td>
|
||||||
|
<td>'.add-on, .input-group-addon'</td>
|
||||||
|
<td>Children selector for the component or element that trigger the colorpicker and which
|
||||||
|
background color will change (needs an inner <i> element).
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>input</td>
|
||||||
|
<td>string or jQuery Element</td>
|
||||||
|
<td>'input'</td>
|
||||||
|
<td>Children selector for the input that will store the picker selected value.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>hexNumberSignPrefix</td>
|
||||||
|
<td>boolean</td>
|
||||||
|
<td>true</td>
|
||||||
|
<td>If true, put a '#' (number sign) before hex strings.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>horizontal</td>
|
||||||
|
<td>boolean</td>
|
||||||
|
<td>false</td>
|
||||||
|
<td>If true, the hue and alpha channel bars will be rendered horizontally, above the saturation
|
||||||
|
selector.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>inline</td>
|
||||||
|
<td>boolean</td>
|
||||||
|
<td>false</td>
|
||||||
|
<td>If true, forces to show the colorpicker as an inline element.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>sliders</td>
|
||||||
|
<td>object</td>
|
||||||
|
<td><abbr title='please, read the source code to see this value'>[...]</abbr></td>
|
||||||
|
<td>Vertical sliders configuration (read source code if you really need to tweak this).</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>slidersHorz</td>
|
||||||
|
<td>object</td>
|
||||||
|
<td><abbr title='please, read the source code to see this value'>[...]</abbr></td>
|
||||||
|
<td>Horizontal sliders configuration (read source code if you really need to tweak this).</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>template</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td><abbr title='please, read the source code to see this value'>[...]</abbr></td>
|
||||||
|
<td>Customizes the default colorpicker HTML template.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>align</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td>'right'</td>
|
||||||
|
<td>By default, the colorpicker is aligned to the right of the input. If you need to switch it
|
||||||
|
to the left, set align to 'left'.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>customClass</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td>null</td>
|
||||||
|
<td>Adds this class to the colorpicker widget.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>colorSelectors</td>
|
||||||
|
<td>object</td>
|
||||||
|
<td>null</td>
|
||||||
|
<td>List of pre selected colors (hex format). If you choose one of these colors, the alias is returned instead of the hex
|
||||||
|
code.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>fallbackColor</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td>null</td>
|
||||||
|
<td>
|
||||||
|
Fallback color string that will be applied when the color failed to be parsed.
|
||||||
|
If <var>null</var>, it will keep the current color if any.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>fallbackFormat</td>
|
||||||
|
<td>string</td>
|
||||||
|
<td>hex</td>
|
||||||
|
<td>
|
||||||
|
Fallback color format (e.g. when not specified or for alias mode, when selecting non aliased colors)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>jQuery API Methods</h3>
|
||||||
|
|
||||||
|
<p>General usage methods</p>
|
||||||
|
<h4>.colorpicker(options)</h4>
|
||||||
|
|
||||||
|
<p>Initializes an colorpicker.</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('getValue', defaultValue)</h4>
|
||||||
|
|
||||||
|
<p>Gets the value from the input or the data attribute (if has no input), otherwise returns the default
|
||||||
|
value, which defaults to #000000 if not specified.</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('setValue', value)</h4>
|
||||||
|
|
||||||
|
<p>Set a new value for the color picker (also updates everything). Triggers 'changeColor' event.</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('show')</h4>
|
||||||
|
|
||||||
|
<p>Show the color picker</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('hide')</h4>
|
||||||
|
|
||||||
|
<p>Hide the color picker</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('reposition')</h4>
|
||||||
|
|
||||||
|
<p>Updates the color picker's position relative to the element</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('update')</h4>
|
||||||
|
|
||||||
|
<p>Refreshes the widget colors (this is done automatically)</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('enable')</h4>
|
||||||
|
|
||||||
|
<p>Enable the color picker.</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('disable')</h4>
|
||||||
|
|
||||||
|
<p>Disable the color picker.</p>
|
||||||
|
|
||||||
|
<h4>.colorpicker('destroy')</h4>
|
||||||
|
|
||||||
|
<p>Destroys the colorpicker widget and unbind all .colorpicker events from the element and component</p>
|
||||||
|
|
||||||
|
<h4>.data('colorpicker')</h4>
|
||||||
|
|
||||||
|
<p>Access to the colorpicker API directly</p>
|
||||||
|
|
||||||
|
<h4>.data('colorpicker').color</h4>
|
||||||
|
|
||||||
|
<p>Access to the colorpicker Color object information</p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h3>Color object methods</h3>
|
||||||
|
|
||||||
|
<p>Each triggered events have a color object (avaliable through event.color, see the example at the
|
||||||
|
bottom) used internally by the picker. This object has several useful methods. These are the more
|
||||||
|
commonly used:</p>
|
||||||
|
|
||||||
|
<h4>.setColor(value)</h4>
|
||||||
|
|
||||||
|
<p>Set a new color. The value is parsed and tries to do a quess on the format.</p>
|
||||||
|
|
||||||
|
<h4>.setHue(value)</h4>
|
||||||
|
|
||||||
|
<p>Set the HUE with a value between 0 and 1.</p>
|
||||||
|
|
||||||
|
<h4>.setSaturation(value)</h4>
|
||||||
|
|
||||||
|
<p>Set the saturation with a value between 0 and 1.</p>
|
||||||
|
|
||||||
|
<h4>.setBrightness(value)</h4>
|
||||||
|
|
||||||
|
<p>Set the brightness with a value between 0 and 1.</p>
|
||||||
|
|
||||||
|
<h4>.setAlpha(value)</h4>
|
||||||
|
|
||||||
|
<p>Set the transparency with a value between 0 and 1.</p>
|
||||||
|
|
||||||
|
<h4>.toRGB()</h4>
|
||||||
|
|
||||||
|
<p>Returns a hash with red, green, blue and alpha.</p>
|
||||||
|
|
||||||
|
<h4>.toHex()</h4>
|
||||||
|
|
||||||
|
<p>Returns a string with HEX format for the current color.</p>
|
||||||
|
|
||||||
|
<h4>.toHSL()</h4>
|
||||||
|
|
||||||
|
<p>Returns a hash with HSLA values.</p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h3>Events</h3>
|
||||||
|
|
||||||
|
<p>The colorpicker plugin exposes some events</p>
|
||||||
|
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 150px;">Event</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>create</td>
|
||||||
|
<td>This event fires immediately when the color picker is created.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>showPicker</td>
|
||||||
|
<td>This event fires immediately when the color picker is displayed.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>hidePicker</td>
|
||||||
|
<td>This event is fired immediately when the color picker is hidden.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>changeColor</td>
|
||||||
|
<td>This event is fired when the color is changed.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>disable</td>
|
||||||
|
<td>This event is fired immediately when the color picker is disabled, except if it was
|
||||||
|
initialized as disabled.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>enable</td>
|
||||||
|
<td>This event is fired immediately when the color picker is enabled, except upon
|
||||||
|
initialization.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>destroy</td>
|
||||||
|
<td>This event fires immediately when the color picker is destroyed.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<h2>Examples</h2>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Simple input field</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<input id="cp1" type="text" class="form-control" value="#5367ce"/>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp1').colorpicker();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><input id="cp1" type="text" class="form-control" value="#5367ce" />
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp1').colorpicker();
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">As a component</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<div id="cp2" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="#00AABB" class="form-control"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp2').colorpicker();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><div id="cp2" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="#00AABB" class="form-control" />
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp2').colorpicker();
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">With custom options</div>
|
||||||
|
<div class="example-description">Sample overriding the initial color and format</div>
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<div id="cp3" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="#00AABB" class="form-control"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp3').colorpicker({
|
||||||
|
color: '#AA3399',
|
||||||
|
format: 'rgb'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><div id="cp3" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="#00AABB" class="form-control" />
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp3').colorpicker({
|
||||||
|
color: '#AA3399',
|
||||||
|
format: 'rgb'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Working with events</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<a href="#" class="btn btn-default" id="cp4">Change background color</a>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp4').colorpicker().on('changeColor', function (e) {
|
||||||
|
$('body')[0].style.backgroundColor = e.color.toString('rgba');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><a href="#" class="btn btn-default" id="cp4">Change background color</a>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp4').colorpicker().on('changeColor', function(e) {
|
||||||
|
$('body')[0].style.backgroundColor = e.color.toString(
|
||||||
|
'rgba');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Transparent color support</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<input type="text" class="form-control" id="cp5"/>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp5').colorpicker({
|
||||||
|
color: "transparent",
|
||||||
|
format: "hex"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><input type="text" class="form-control" id="cp5" />
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp5').colorpicker({
|
||||||
|
color: "transparent",
|
||||||
|
format: "hex"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Horizontal mode</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<input type="text" class="form-control" id="cp6" />
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp6').colorpicker({
|
||||||
|
color: "#88cc33",
|
||||||
|
horizontal: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><input type="text" class="form-control" id="cp6" />
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp6').colorpicker({
|
||||||
|
color: "#88cc33",
|
||||||
|
horizontal: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Inline mode</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<div id="cp7" class="inl-bl"></div>
|
||||||
|
<style>
|
||||||
|
.inl-bl {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp7').colorpicker({
|
||||||
|
color:'#ffaa00',
|
||||||
|
container: true,
|
||||||
|
inline:true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><div id="cp7" class="inl-bl"></div>
|
||||||
|
<style>
|
||||||
|
.inl-bl {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp7').colorpicker({
|
||||||
|
color: '#ffaa00',
|
||||||
|
container: true,
|
||||||
|
inline: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Aliased color palette</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<div id="cp8" data-format="alias" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="primary" class="form-control"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp8').colorpicker({
|
||||||
|
colorSelectors: {
|
||||||
|
'black': '#000000',
|
||||||
|
'white': '#ffffff',
|
||||||
|
'red': '#FF0000',
|
||||||
|
'default': '#777777',
|
||||||
|
'primary': '#337ab7',
|
||||||
|
'success': '#5cb85c',
|
||||||
|
'info': '#5bc0de',
|
||||||
|
'warning': '#f0ad4e',
|
||||||
|
'danger': '#d9534f'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><div id="cp8" data-format="alias" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="primary" class="form-control" />
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp8').colorpicker({
|
||||||
|
colorSelectors: {
|
||||||
|
'black': '#000000',
|
||||||
|
'white': '#ffffff',
|
||||||
|
'red': '#FF0000',
|
||||||
|
'default': '#777777',
|
||||||
|
'primary': '#337ab7',
|
||||||
|
'success': '#5cb85c',
|
||||||
|
'info': '#5bc0de',
|
||||||
|
'warning': '#f0ad4e',
|
||||||
|
'danger': '#d9534f'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Customized widget size</div>
|
||||||
|
<div class="example-description">Also showing the support of HTML color names</div>
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<input id="cp9" type="text" class="form-control" value="pink"/>
|
||||||
|
<style>
|
||||||
|
.colorpicker-2x .colorpicker-saturation {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorpicker-2x .colorpicker-hue,
|
||||||
|
.colorpicker-2x .colorpicker-alpha {
|
||||||
|
width: 30px;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorpicker-2x .colorpicker-color,
|
||||||
|
.colorpicker-2x .colorpicker-color div {
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp9').colorpicker({
|
||||||
|
customClass: 'colorpicker-2x',
|
||||||
|
sliders: {
|
||||||
|
saturation: {
|
||||||
|
maxLeft: 200,
|
||||||
|
maxTop: 200
|
||||||
|
},
|
||||||
|
hue: {
|
||||||
|
maxTop: 200
|
||||||
|
},
|
||||||
|
alpha: {
|
||||||
|
maxTop: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><input id="cp9" type="text" class="form-control" value="pink" />
|
||||||
|
<style>
|
||||||
|
.colorpicker-2x .colorpicker-saturation {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorpicker-2x .colorpicker-hue,
|
||||||
|
.colorpicker-2x .colorpicker-alpha {
|
||||||
|
width: 30px;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorpicker-2x .colorpicker-color,
|
||||||
|
.colorpicker-2x .colorpicker-color div {
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp9').colorpicker({
|
||||||
|
customClass: 'colorpicker-2x',
|
||||||
|
sliders: {
|
||||||
|
saturation: {
|
||||||
|
maxLeft: 200,
|
||||||
|
maxTop: 200
|
||||||
|
},
|
||||||
|
hue: {
|
||||||
|
maxTop: 200
|
||||||
|
},
|
||||||
|
alpha: {
|
||||||
|
maxTop: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Disabled / enabled status</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<div id="cp10" class="input-group colorpicker-component">
|
||||||
|
<input disabled type="text" value="" class="form-control"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a class="btn btn-sm btn-default enable-button" href="#">Enable</a>
|
||||||
|
<a class="btn btn-sm btn-default disable-button" href="#">Disable</a>
|
||||||
|
</p>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$(".disable-button").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#cp10").colorpicker('disable');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".enable-button").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#cp10").colorpicker('enable');
|
||||||
|
});
|
||||||
|
$('#cp10').colorpicker();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><div id="cp10" class="input-group colorpicker-component">
|
||||||
|
<input disabled type="text" value="" class="form-control" />
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a class="btn btn-sm btn-default enable-button" href="#">Enable</a>
|
||||||
|
<a class="btn btn-sm btn-default disable-button" href="#">Disable</a>
|
||||||
|
</p>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$(".disable-button").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#cp10").colorpicker('disable');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".enable-button").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#cp10").colorpicker('enable');
|
||||||
|
});
|
||||||
|
$('#cp10').colorpicker();
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
<div class="example">
|
||||||
|
<div class="example-title">Inside a modal</div>
|
||||||
|
|
||||||
|
<div class="example-content well">
|
||||||
|
<div class="example-content-widget">
|
||||||
|
<button class="btn btn-primary btn-md" data-toggle="modal" data-target="#myModal">
|
||||||
|
Show modal
|
||||||
|
</button>
|
||||||
|
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-body">
|
||||||
|
<div id="cp11" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="" class="form-control"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#cp11').colorpicker();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-link btn-xs example-code-toggle" data-toggle="button">View source</button>
|
||||||
|
<div class="example-code"><button class="btn btn-primary btn-md" data-toggle="modal" data-target="#myModal">
|
||||||
|
Show modal
|
||||||
|
</button>
|
||||||
|
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
|
||||||
|
aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-body">
|
||||||
|
<div id="cp11" class="input-group colorpicker-component">
|
||||||
|
<input type="text" value="" class="form-control" />
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#cp11').colorpicker();
|
||||||
|
});
|
||||||
|
</script></div> </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('.example-code-toggle').on('click', function () {
|
||||||
|
$(this).parent().find('.example-code').toggle();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
3593
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/package-lock.json
generated
vendored
3593
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/package-lock.json
generated
vendored
File diff suppressed because it is too large
Load Diff
48
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/package.json
vendored
Normal file
48
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/package.json
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "bootstrap-colorpicker",
|
||||||
|
"version": "2.5.3",
|
||||||
|
"description": "Fancy and customizable colorpicker plugin for Twitter Bootstrap",
|
||||||
|
"main": "./dist/js/bootstrap-colorpicker.js",
|
||||||
|
"homepage": "https://itsjavi.com/bootstrap-colorpicker/",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/itsjavi/bootstrap-colorpicker.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/itsjavi/bootstrap-colorpicker/issues"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"bootstrap",
|
||||||
|
"colorpicker"
|
||||||
|
],
|
||||||
|
"author": "Javier Aguilar",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"licenses": [
|
||||||
|
{
|
||||||
|
"type": "Apache-2.0",
|
||||||
|
"url": "http://opensource.org/licenses/Apache-2.0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"jquery": ">=1.10"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "jasmine"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"grunt": "~0.4.5",
|
||||||
|
"grunt-assemble": "~0.4.0",
|
||||||
|
"grunt-combine": "~0.8.3",
|
||||||
|
"grunt-contrib-clean": "~1.0.0",
|
||||||
|
"grunt-contrib-cssmin": "~1.0.1",
|
||||||
|
"grunt-contrib-jshint": "~1.0.0",
|
||||||
|
"grunt-contrib-less": "~1.2.0",
|
||||||
|
"grunt-contrib-uglify": "~1.0.0",
|
||||||
|
"grunt-contrib-watch": "~1.0.0",
|
||||||
|
"grunt-jsbeautifier": "~0.2.10",
|
||||||
|
"grunt-strip-code": "^1.0.6",
|
||||||
|
"jasmine": "^2.6.0",
|
||||||
|
"jquery": ">=1.10",
|
||||||
|
"jsdom": "^10.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -102,7 +102,7 @@ var Colorpicker = function(element, options) {
|
|||||||
'keyup.colorpicker': $.proxy(this.keyup, this)
|
'keyup.colorpicker': $.proxy(this.keyup, this)
|
||||||
});
|
});
|
||||||
this.input.on({
|
this.input.on({
|
||||||
'change.colorpicker': $.proxy(this.change, this)
|
'input.colorpicker': $.proxy(this.change, this)
|
||||||
});
|
});
|
||||||
if (this.component === false) {
|
if (this.component === false) {
|
||||||
this.element.on({
|
this.element.on({
|
||||||
@@ -489,20 +489,6 @@ Colorpicker.prototype = {
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
change: function(e) {
|
change: function(e) {
|
||||||
this.keyup(e);
|
|
||||||
},
|
|
||||||
keyup: function(e) {
|
|
||||||
if ((e.keyCode === 38)) {
|
|
||||||
if (this.color.value.a < 1) {
|
|
||||||
this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
|
|
||||||
}
|
|
||||||
this.update(true);
|
|
||||||
} else if ((e.keyCode === 40)) {
|
|
||||||
if (this.color.value.a > 0) {
|
|
||||||
this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
|
|
||||||
}
|
|
||||||
this.update(true);
|
|
||||||
} else {
|
|
||||||
this.color = this.createColor(this.input.val());
|
this.color = this.createColor(this.input.val());
|
||||||
// Change format dynamically
|
// Change format dynamically
|
||||||
// Only occurs if user choose the dynamic format by
|
// Only occurs if user choose the dynamic format by
|
||||||
@@ -515,7 +501,26 @@ Colorpicker.prototype = {
|
|||||||
this.updateComponent();
|
this.updateComponent();
|
||||||
this.updatePicker();
|
this.updatePicker();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.element.trigger({
|
||||||
|
type: 'changeColor',
|
||||||
|
color: this.color,
|
||||||
|
value: this.input.val()
|
||||||
|
});
|
||||||
|
},
|
||||||
|
keyup: function(e) {
|
||||||
|
if ((e.keyCode === 38)) {
|
||||||
|
if (this.color.value.a < 1) {
|
||||||
|
this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
|
||||||
}
|
}
|
||||||
|
this.update(true);
|
||||||
|
} else if ((e.keyCode === 40)) {
|
||||||
|
if (this.color.value.a > 0) {
|
||||||
|
this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
|
||||||
|
}
|
||||||
|
this.update(true);
|
||||||
|
}
|
||||||
|
|
||||||
this.element.trigger({
|
this.element.trigger({
|
||||||
type: 'changeColor',
|
type: 'changeColor',
|
||||||
color: this.color,
|
color: this.color,
|
||||||
|
|||||||
2362
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/yarn.lock
vendored
Normal file
2362
front/lib/AdminLTE/bower_components/bootstrap-colorpicker/yarn.lock
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -10,14 +10,14 @@
|
|||||||
},
|
},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"homepage": "https://github.com/eternicode/bootstrap-datepicker",
|
"homepage": "https://github.com/eternicode/bootstrap-datepicker",
|
||||||
"version": "1.8.0",
|
"version": "1.9.0",
|
||||||
"_release": "1.8.0",
|
"_release": "1.9.0",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "v1.8.0",
|
"tag": "v1.9.0",
|
||||||
"commit": "0d32bc5d91da11d9a3587537c3c36ce7ee815c94"
|
"commit": "fb8776d65825068b9f914ab37d6fd847c951f488"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/eternicode/bootstrap-datepicker.git",
|
"_source": "https://github.com/eternicode/bootstrap-datepicker.git",
|
||||||
"_target": "^1.7.0",
|
"_target": "^1.7",
|
||||||
"_originalSource": "bootstrap-datepicker"
|
"_originalSource": "bootstrap-datepicker"
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# EditorConfig is awesome: http://EditorConfig.org
|
# EditorConfig is awesome: https://editorconfig.org
|
||||||
|
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
docs/_build
|
|
||||||
*-dist.zip
|
|
||||||
|
|
||||||
# OS or Editor folders
|
|
||||||
.DS_Store
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# Folders to ignore
|
|
||||||
bower_components
|
|
||||||
node_modules
|
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
sudo: false
|
|
||||||
|
|
||||||
language: node_js
|
language: node_js
|
||||||
|
|
||||||
node_js:
|
node_js:
|
||||||
- "6"
|
- "12"
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- npm install -g grunt-cli
|
- npm install -g grunt-cli
|
||||||
|
|||||||
@@ -1,6 +1,24 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
1.9.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
## Features
|
||||||
|
* Added clearDates for clears range (#2114)
|
||||||
|
|
||||||
|
## Bugfix
|
||||||
|
* Hide today button when before start or after end date (#2474)
|
||||||
|
* Fix navigation buttons states (#2277)
|
||||||
|
* Fix updateNavArrows bug (#2230)
|
||||||
|
|
||||||
|
## Locales
|
||||||
|
### Bugfix
|
||||||
|
* Added monthsTitle to Latvian locale (#2255)
|
||||||
|
* Rename en-CA locale file to match the rest of the files (#2217)
|
||||||
|
* Fix cs locale date format (#2275)
|
||||||
|
* Added translation for months (fixing the default 'en' locale) (#2271)
|
||||||
|
|
||||||
1.7.1
|
1.7.1
|
||||||
-----
|
-----
|
||||||
|
|
||||||
@@ -351,7 +369,7 @@ Locale changes:
|
|||||||
* De-duplicated Ukrainian files from `uk` and `ua` to just `ua`
|
* De-duplicated Ukrainian files from `uk` and `ua` to just `ua`
|
||||||
|
|
||||||
Repository changes:
|
Repository changes:
|
||||||
* Documentation has been moved from the base `README.md` file to the `docs/` folder, and been re-written to use sphinx docs. The docs are now viewable online at http://bootstrap-datepicker.readthedocs.org/. The [gh-pages](http://eternicode.github.io/bootstrap-datepicker/) branch has been reduced to the sandbox demo.
|
* Documentation has been moved from the base `README.md` file to the `docs/` folder, and been re-written to use sphinx docs. The docs are now viewable online at https://bootstrap-datepicker.readthedocs.org/. The [gh-pages](https://uxsolutions.github.io/bootstrap-datepicker/) branch has been reduced to the sandbox demo.
|
||||||
* Changed the js file header to point at repo/demo/docs urls instead of eyecon.ro
|
* Changed the js file header to point at repo/demo/docs urls instead of eyecon.ro
|
||||||
* The css files are now the output of the standalone build scripts instead of `build/build.less` etc.
|
* The css files are now the output of the standalone build scripts instead of `build/build.less` etc.
|
||||||
* `composer.json` now supports component-installer
|
* `composer.json` now supports component-installer
|
||||||
@@ -465,7 +483,7 @@ Small optimizations release
|
|||||||
v1.0.1
|
v1.0.1
|
||||||
------
|
------
|
||||||
|
|
||||||
* Support for [Bower](http://twitter.github.com/bower/)
|
* Support for [Bower](https://bower.io/)
|
||||||
* Component pickers are now aligned under the input, not the add-on element.
|
* Component pickers are now aligned under the input, not the add-on element.
|
||||||
* Japanese locale now has "today" and "format".
|
* Japanese locale now has "today" and "format".
|
||||||
* "remove" method removes `.data().date` if the datepicker is on a non-input.
|
* "remove" method removes `.data().date` if the datepicker is on a non-input.
|
||||||
|
|||||||
@@ -67,8 +67,5 @@ members of the project's leadership.
|
|||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org), version 1.4,
|
||||||
available at [http://contributor-covenant.org/version/1/4][version]
|
available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
|
||||||
|
|
||||||
[homepage]: http://contributor-covenant.org
|
|
||||||
[version]: http://contributor-covenant.org/version/1/4/
|
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
## Support requests
|
## Support requests
|
||||||
|
|
||||||
The issue tracker is not the place for support requests. If you get stuck with bootstrap-datepicker, it's very likely that the fine folks at [StackOverflow](http://stackoverflow.com/) will be able to help you; simply describe the problem you're having and provide them a link to the repo (so they know what code you're using). Another option is to post to the [bootstrap-datepicker google group](https://groups.google.com/group/bootstrap-datepicker).
|
The issue tracker is not the place for support requests. If you get stuck with bootstrap-datepicker, it's very likely that the fine folks at [StackOverflow](https://stackoverflow.com/) will be able to help you; simply describe the problem you're having and provide them a link to the repo (so they know what code you're using). Another option is to post to the [bootstrap-datepicker google group](https://groups.google.com/group/bootstrap-datepicker).
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
|
|
||||||
If you've found a bug in bootstrap-datepicker, we want to know about it! However, please keep the following in mind:
|
If you've found a bug in bootstrap-datepicker, we want to know about it! However, please keep the following in mind:
|
||||||
|
|
||||||
* This is not the bootstrap-datepicker from [eyecon.ro](http://www.eyecon.ro/bootstrap-datepicker/). Stefan provided the initial code for bootstrap-datepicker, but this repo is divergent from his codebase. Please make sure you're using either the latest tagged version or the latest master from https://github.com/uxsolutions/bootstrap-datepicker/.
|
* This is not the bootstrap-datepicker from [eyecon.ro](https://www.eyecon.ro/bootstrap-datepicker/). Stefan provided the initial code for bootstrap-datepicker, but this repo is divergent from his codebase. Please make sure you're using either the latest tagged version or the latest master from https://github.com/uxsolutions/bootstrap-datepicker/.
|
||||||
* A working example of the bug you've found is *much* easier to work with than a description alone. If possible, please provide a link to a demonstration of the bug, perhaps using http://jsfiddle.net/ .
|
* A working example of the bug you've found is *much* easier to work with than a description alone. If possible, please provide a link to a demonstration of the bug, perhaps using https://jsfiddle.net/ .
|
||||||
* CDN-backed assets can be found at http://bsdp-assets.blackcherry.us/ . These should be used *only* for building test cases, as they may be removed or changed at any time.
|
* CDN-backed assets can be found at http://bsdp-assets.blackcherry.us/ . These should be used *only* for building test cases, as they may be removed or changed at any time.
|
||||||
* Finally, it's possible someone else has already reported the same bug you have. Please search the issue tracker for similar issues before posting your own. Thanks!
|
* Finally, it's possible someone else has already reported the same bug you have. Please search the issue tracker for similar issues before posting your own. Thanks!
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
* Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
*/
|
*/
|
||||||
@@ -89,6 +89,10 @@
|
|||||||
|
|
||||||
var Datepicker = function(element, options){
|
var Datepicker = function(element, options){
|
||||||
$.data(element, 'datepicker', this);
|
$.data(element, 'datepicker', this);
|
||||||
|
|
||||||
|
this._events = [];
|
||||||
|
this._secondaryEvents = [];
|
||||||
|
|
||||||
this._process_options(options);
|
this._process_options(options);
|
||||||
|
|
||||||
this.dates = new DateArray();
|
this.dates = new DateArray();
|
||||||
@@ -98,7 +102,7 @@
|
|||||||
this.element = $(element);
|
this.element = $(element);
|
||||||
this.isInput = this.element.is('input');
|
this.isInput = this.element.is('input');
|
||||||
this.inputField = this.isInput ? this.element : this.element.find('input');
|
this.inputField = this.isInput ? this.element : this.element.find('input');
|
||||||
this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
|
this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;
|
||||||
if (this.component && this.component.length === 0)
|
if (this.component && this.component.length === 0)
|
||||||
this.component = false;
|
this.component = false;
|
||||||
this.isInline = !this.component && this.element.is('div');
|
this.isInline = !this.component && this.element.is('div');
|
||||||
@@ -308,8 +312,6 @@
|
|||||||
o.defaultViewDate = UTCToday();
|
o.defaultViewDate = UTCToday();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_events: [],
|
|
||||||
_secondaryEvents: [],
|
|
||||||
_applyEvents: function(evs){
|
_applyEvents: function(evs){
|
||||||
for (var i=0, el, ch, ev; i < evs.length; i++){
|
for (var i=0, el, ch, ev; i < evs.length; i++){
|
||||||
el = evs[i][0];
|
el = evs[i][0];
|
||||||
@@ -465,7 +467,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
show: function(){
|
show: function(){
|
||||||
if (this.inputField.prop('disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
|
if (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
|
||||||
return;
|
return;
|
||||||
if (!this.isInline)
|
if (!this.isInline)
|
||||||
this.picker.appendTo(this.o.container);
|
this.picker.appendTo(this.o.container);
|
||||||
@@ -963,6 +965,8 @@
|
|||||||
todaytxt = dates[this.o.language].today || dates['en'].today || '',
|
todaytxt = dates[this.o.language].today || dates['en'].today || '',
|
||||||
cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
|
cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
|
||||||
titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
|
titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
|
||||||
|
todayDate = UTCToday(),
|
||||||
|
titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),
|
||||||
tooltip,
|
tooltip,
|
||||||
before;
|
before;
|
||||||
if (isNaN(year) || isNaN(month))
|
if (isNaN(year) || isNaN(month))
|
||||||
@@ -971,7 +975,7 @@
|
|||||||
.text(DPGlobal.formatDate(d, titleFormat, this.o.language));
|
.text(DPGlobal.formatDate(d, titleFormat, this.o.language));
|
||||||
this.picker.find('tfoot .today')
|
this.picker.find('tfoot .today')
|
||||||
.text(todaytxt)
|
.text(todaytxt)
|
||||||
.css('display', this.o.todayBtn === true || this.o.todayBtn === 'linked' ? 'table-cell' : 'none');
|
.css('display', titleBtnVisible ? 'table-cell' : 'none');
|
||||||
this.picker.find('tfoot .clear')
|
this.picker.find('tfoot .clear')
|
||||||
.text(cleartxt)
|
.text(cleartxt)
|
||||||
.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');
|
.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');
|
||||||
@@ -1151,12 +1155,12 @@
|
|||||||
factor *= 10;
|
factor *= 10;
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case 1:
|
case 1:
|
||||||
prevIsDisabled = Math.floor(year / factor) * factor < startYear;
|
prevIsDisabled = Math.floor(year / factor) * factor <= startYear;
|
||||||
nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;
|
nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
prevIsDisabled = year <= startYear && month < startMonth;
|
prevIsDisabled = year <= startYear && month <= startMonth;
|
||||||
nextIsDisabled = year >= endYear && month > endMonth;
|
nextIsDisabled = year >= endYear && month >= endMonth;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2003,7 +2007,7 @@
|
|||||||
|
|
||||||
/* DATEPICKER VERSION
|
/* DATEPICKER VERSION
|
||||||
* =================== */
|
* =================== */
|
||||||
$.fn.datepicker.version = '1.8.0';
|
$.fn.datepicker.version = '1.9.0';
|
||||||
|
|
||||||
$.fn.datepicker.deprecated = function(msg){
|
$.fn.datepicker.deprecated = function(msg){
|
||||||
var console = window.console;
|
var console = window.console;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
!function(a){a.fn.datepicker.dates.az={days:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],daysShort:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],daysMin:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],months:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],today:"Bu gün",weekStart:1}}(jQuery);
|
!function(a){a.fn.datepicker.dates.az={days:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],daysShort:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],daysMin:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],months:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],today:"Bu gün",weekStart:1,clear:"Təmizlə",monthsTitle:"Aylar"}}(jQuery);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
!function(a){a.fn.datepicker.dates.bm={days:["Kari","Ntɛnɛn","Tarata","Araba","Alamisa","Juma","Sibiri"],daysShort:["Kar","Ntɛ","Tar","Ara","Ala","Jum","Sib"],daysMin:["Ka","Nt","Ta","Ar","Al","Ju","Si"],months:["Zanwuyekalo","Fewuruyekalo","Marisikalo","Awirilikalo","Mɛkalo","Zuwɛnkalo","Zuluyekalo","Utikalo","Sɛtanburukalo","ɔkutɔburukalo","Nowanburukalo","Desanburukalo"],monthsShort:["Zan","Few","Mar","Awi","Mɛ","Zuw","Zul","Uti","Sɛt","ɔku","Now","Des"],today:"Bi",monthsTitle:"Kalo",clear:"Ka jɔsi",weekStart:1,format:"dd/mm/yyyy"}}(jQuery);
|
||||||
@@ -1 +1 @@
|
|||||||
!function(a){a.fn.datepicker.dates.no={days:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],daysShort:["søn","man","tir","ons","tor","fre","lør"],daysMin:["sø","ma","ti","on","to","fr","lø"],months:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","vovember","desember"],monthsShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],today:"i dag",monthsTitle:"Måneder",clear:"Nullstill",weekStart:1,format:"dd.mm.yyyy"}}(jQuery);
|
!function(a){a.fn.datepicker.dates.no={days:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],daysShort:["søn","man","tir","ons","tor","fre","lør"],daysMin:["sø","ma","ti","on","to","fr","lø"],months:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthsShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],today:"i dag",monthsTitle:"Måneder",clear:"Nullstill",weekStart:1,format:"dd.mm.yyyy"}}(jQuery);
|
||||||
@@ -1 +1 @@
|
|||||||
!function(a){a.fn.datepicker.dates.sq={days:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"],daysShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],daysMin:["Di","Hë","Ma","Më","En","Pr","Sht"],months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthsShort:["Jan","Shk","Mar","Pri","Maj","Qer","Korr","Gu","Sht","Tet","Nën","Dhjet"],today:"Sot"}}(jQuery);
|
!function(a){a.fn.datepicker.dates.sq={days:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"],daysShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],daysMin:["Di","Hë","Ma","Më","En","Pr","Sht"],months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthsShort:["Jan","Shk","Mar","Pri","Maj","Qer","Korr","Gu","Sht","Tet","Nën","Dhjet"],monthsTitle:"Muaj",today:"Sot",weekStart:1,format:"dd/mm/yyyy",clear:"Pastro"}}(jQuery);
|
||||||
@@ -1 +1 @@
|
|||||||
!function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",clear:"清除",format:"yyyy年mm月dd日",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery);
|
!function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",monthsTitle:"选择月份",clear:"清除",format:"yyyy-mm-dd",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery);
|
||||||
@@ -17,4 +17,4 @@ $ make html
|
|||||||
|
|
||||||
The docs will be generated, the output files will be placed in the `_build/html/` directory, and can be browsed (locally) with any browser.
|
The docs will be generated, the output files will be placed in the `_build/html/` directory, and can be browsed (locally) with any browser.
|
||||||
|
|
||||||
The docs can also be found online at <http://bootstrap-datepicker.readthedocs.org/>.
|
The docs can also be found online at <https://bootstrap-datepicker.readthedocs.org/>.
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="script/common.css">
|
||||||
|
<script src="script/common.js"></script>
|
||||||
|
<script>
|
||||||
|
function setup(){
|
||||||
|
$('input').datepicker({
|
||||||
|
format: 'mm-dd-yyyy',
|
||||||
|
showWeekDays: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body data-capture="input, .datepicker">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-offset-4 col-sm-3">
|
||||||
|
<input type="text" class="form-control" value="03-03-2013">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -6,9 +6,9 @@ Bootstrap-datepicker provides a flexible datepicker widget in the Bootstrap styl
|
|||||||
.. figure:: _static/screenshots/demo_head.png
|
.. figure:: _static/screenshots/demo_head.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Versions are incremented according to `semver <http://semver.org/>`_.
|
Versions are incremented according to `semver <https://semver.org/>`_.
|
||||||
|
|
||||||
`Online Demo <https://eternicode.github.io/bootstrap-datepicker/>`_
|
`Online Demo <https://uxsolutions.github.io/bootstrap-datepicker>`_
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
|
|||||||
@@ -449,6 +449,9 @@ Boolean. Default: true
|
|||||||
|
|
||||||
If false, the datepicker will not append the names of the weekdays to its view. Default behavior is appending the weekdays.
|
If false, the datepicker will not append the names of the weekdays to its view. Default behavior is appending the weekdays.
|
||||||
|
|
||||||
|
.. figure:: _static/screenshots/option_showweekdays.png
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
title
|
title
|
||||||
-----
|
-----
|
||||||
|
|||||||
@@ -102,6 +102,10 @@
|
|||||||
|
|
||||||
var Datepicker = function(element, options){
|
var Datepicker = function(element, options){
|
||||||
$.data(element, 'datepicker', this);
|
$.data(element, 'datepicker', this);
|
||||||
|
|
||||||
|
this._events = [];
|
||||||
|
this._secondaryEvents = [];
|
||||||
|
|
||||||
this._process_options(options);
|
this._process_options(options);
|
||||||
|
|
||||||
this.dates = new DateArray();
|
this.dates = new DateArray();
|
||||||
@@ -111,7 +115,7 @@
|
|||||||
this.element = $(element);
|
this.element = $(element);
|
||||||
this.isInput = this.element.is('input');
|
this.isInput = this.element.is('input');
|
||||||
this.inputField = this.isInput ? this.element : this.element.find('input');
|
this.inputField = this.isInput ? this.element : this.element.find('input');
|
||||||
this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;
|
this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;
|
||||||
if (this.component && this.component.length === 0)
|
if (this.component && this.component.length === 0)
|
||||||
this.component = false;
|
this.component = false;
|
||||||
this.isInline = !this.component && this.element.is('div');
|
this.isInline = !this.component && this.element.is('div');
|
||||||
@@ -321,8 +325,6 @@
|
|||||||
o.defaultViewDate = UTCToday();
|
o.defaultViewDate = UTCToday();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_events: [],
|
|
||||||
_secondaryEvents: [],
|
|
||||||
_applyEvents: function(evs){
|
_applyEvents: function(evs){
|
||||||
for (var i=0, el, ch, ev; i < evs.length; i++){
|
for (var i=0, el, ch, ev; i < evs.length; i++){
|
||||||
el = evs[i][0];
|
el = evs[i][0];
|
||||||
@@ -478,7 +480,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
show: function(){
|
show: function(){
|
||||||
if (this.inputField.prop('disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
|
if (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
|
||||||
return;
|
return;
|
||||||
if (!this.isInline)
|
if (!this.isInline)
|
||||||
this.picker.appendTo(this.o.container);
|
this.picker.appendTo(this.o.container);
|
||||||
@@ -976,6 +978,8 @@
|
|||||||
todaytxt = dates[this.o.language].today || dates['en'].today || '',
|
todaytxt = dates[this.o.language].today || dates['en'].today || '',
|
||||||
cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
|
cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
|
||||||
titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
|
titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
|
||||||
|
todayDate = UTCToday(),
|
||||||
|
titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),
|
||||||
tooltip,
|
tooltip,
|
||||||
before;
|
before;
|
||||||
if (isNaN(year) || isNaN(month))
|
if (isNaN(year) || isNaN(month))
|
||||||
@@ -984,7 +988,7 @@
|
|||||||
.text(DPGlobal.formatDate(d, titleFormat, this.o.language));
|
.text(DPGlobal.formatDate(d, titleFormat, this.o.language));
|
||||||
this.picker.find('tfoot .today')
|
this.picker.find('tfoot .today')
|
||||||
.text(todaytxt)
|
.text(todaytxt)
|
||||||
.css('display', this.o.todayBtn === true || this.o.todayBtn === 'linked' ? 'table-cell' : 'none');
|
.css('display', titleBtnVisible ? 'table-cell' : 'none');
|
||||||
this.picker.find('tfoot .clear')
|
this.picker.find('tfoot .clear')
|
||||||
.text(cleartxt)
|
.text(cleartxt)
|
||||||
.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');
|
.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');
|
||||||
@@ -1164,12 +1168,12 @@
|
|||||||
factor *= 10;
|
factor *= 10;
|
||||||
/* falls through */
|
/* falls through */
|
||||||
case 1:
|
case 1:
|
||||||
prevIsDisabled = Math.floor(year / factor) * factor < startYear;
|
prevIsDisabled = Math.floor(year / factor) * factor <= startYear;
|
||||||
nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;
|
nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
prevIsDisabled = year <= startYear && month < startMonth;
|
prevIsDisabled = year <= startYear && month <= startMonth;
|
||||||
nextIsDisabled = year >= endYear && month > endMonth;
|
nextIsDisabled = year >= endYear && month >= endMonth;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2016,7 +2020,7 @@
|
|||||||
|
|
||||||
/* DATEPICKER VERSION
|
/* DATEPICKER VERSION
|
||||||
* =================== */
|
* =================== */
|
||||||
$.fn.datepicker.version = '1.8.0';
|
$.fn.datepicker.version = '1.9.0';
|
||||||
|
|
||||||
$.fn.datepicker.deprecated = function(msg){
|
$.fn.datepicker.deprecated = function(msg){
|
||||||
var console = window.console;
|
var console = window.console;
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"],
|
months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"],
|
||||||
monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"],
|
monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"],
|
||||||
today: "Bu gün",
|
today: "Bu gün",
|
||||||
weekStart: 1
|
weekStart: 1,
|
||||||
|
clear: "Təmizlə",
|
||||||
|
monthsTitle: 'Aylar'
|
||||||
};
|
};
|
||||||
}(jQuery));
|
}(jQuery));
|
||||||
|
|||||||
18
front/lib/AdminLTE/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.bm.js
vendored
Normal file
18
front/lib/AdminLTE/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.bm.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Bamanankan (bm) translation for bootstrap-datepicker
|
||||||
|
* Fatou Fall <fatou@medicmobile.org>
|
||||||
|
*/
|
||||||
|
;(function($){
|
||||||
|
$.fn.datepicker.dates['bm'] = {
|
||||||
|
days: ["Kari","Ntɛnɛn","Tarata","Araba","Alamisa","Juma","Sibiri"],
|
||||||
|
daysShort: ["Kar","Ntɛ","Tar","Ara","Ala","Jum","Sib"],
|
||||||
|
daysMin: ["Ka","Nt","Ta","Ar","Al","Ju","Si"],
|
||||||
|
months: ["Zanwuyekalo","Fewuruyekalo","Marisikalo","Awirilikalo","Mɛkalo","Zuwɛnkalo","Zuluyekalo","Utikalo","Sɛtanburukalo","ɔkutɔburukalo","Nowanburukalo","Desanburukalo"],
|
||||||
|
monthsShort: ["Zan","Few","Mar","Awi","Mɛ","Zuw","Zul","Uti","Sɛt","ɔku","Now","Des"],
|
||||||
|
today: "Bi",
|
||||||
|
monthsTitle: "Kalo",
|
||||||
|
clear: "Ka jɔsi",
|
||||||
|
weekStart: 1,
|
||||||
|
format: "dd/mm/yyyy"
|
||||||
|
};
|
||||||
|
}(jQuery));
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
days: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
|
days: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
|
||||||
daysShort: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],
|
daysShort: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],
|
||||||
daysMin: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
|
daysMin: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
|
||||||
months: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'vovember', 'desember'],
|
months: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],
|
||||||
monthsShort: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
|
monthsShort: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
|
||||||
today: 'i dag',
|
today: 'i dag',
|
||||||
monthsTitle: 'Måneder',
|
monthsTitle: 'Måneder',
|
||||||
|
|||||||
@@ -9,7 +9,11 @@
|
|||||||
daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht"],
|
daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht"],
|
||||||
months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"],
|
months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"],
|
||||||
monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"],
|
monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"],
|
||||||
today: "Sot"
|
monthsTitle: "Muaj",
|
||||||
|
today: "Sot",
|
||||||
|
weekStart: 1,
|
||||||
|
format: "dd/mm/yyyy",
|
||||||
|
clear: "Pastro"
|
||||||
};
|
};
|
||||||
}(jQuery));
|
}(jQuery));
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,10 @@
|
|||||||
daysMin: ["日", "一", "二", "三", "四", "五", "六"],
|
daysMin: ["日", "一", "二", "三", "四", "五", "六"],
|
||||||
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
|
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
|
||||||
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
|
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
|
||||||
today: "今日",
|
today: "今天",
|
||||||
|
monthsTitle: "选择月份",
|
||||||
clear: "清除",
|
clear: "清除",
|
||||||
format: "yyyy年mm月dd日",
|
format: "yyyy-mm-dd",
|
||||||
titleFormat: "yyyy年mm月",
|
titleFormat: "yyyy年mm月",
|
||||||
weekStart: 1
|
weekStart: 1
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "bootstrap-datepicker",
|
"name": "bootstrap-datepicker",
|
||||||
"description": "A datepicker for Bootstrap",
|
"description": "A datepicker for Bootstrap",
|
||||||
"version": "1.8.0",
|
"version": "1.9.0",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"datepicker",
|
"datepicker",
|
||||||
@@ -28,10 +28,10 @@
|
|||||||
"jquery": ">=1.7.1 <4.0.0"
|
"jquery": ">=1.7.1 <4.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"grunt": "^1.0.1",
|
"grunt": "^1.0.4",
|
||||||
"grunt-banner": "~0.6.0",
|
"grunt-banner": "~0.6.0",
|
||||||
"grunt-contrib-clean": "^1.0.0",
|
"grunt-contrib-clean": "^1.0.0",
|
||||||
"grunt-contrib-compress": "^1.4.1",
|
"grunt-contrib-compress": "^1.5.0",
|
||||||
"grunt-contrib-concat": "^1.0.1",
|
"grunt-contrib-concat": "^1.0.1",
|
||||||
"grunt-contrib-csslint": "^2.0.0",
|
"grunt-contrib-csslint": "^2.0.0",
|
||||||
"grunt-contrib-cssmin": "^1.0.2",
|
"grunt-contrib-cssmin": "^1.0.2",
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
"grunt-jscs": "^3.0.1",
|
"grunt-jscs": "^3.0.1",
|
||||||
"grunt-string-replace": "^1.3.1",
|
"grunt-string-replace": "^1.3.1",
|
||||||
"load-grunt-tasks": "^3.5.2",
|
"load-grunt-tasks": "^3.5.2",
|
||||||
"phantomjs-prebuilt": "~2.1.8",
|
"phantomjs-prebuilt": "~2.1.16",
|
||||||
"time-grunt": "^1.4.0"
|
"time-grunt": "^1.4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
module('Component', {
|
module('Component', {
|
||||||
setup: function(){
|
setup: function(){
|
||||||
this.component = $('<div class="input-append date" id="datepicker">'+
|
this.fieldset = $('<fieldset>' +
|
||||||
|
'<div class="input-append date" id="datepicker">'+
|
||||||
'<input size="16" type="text" value="12-02-2012" readonly>'+
|
'<input size="16" type="text" value="12-02-2012" readonly>'+
|
||||||
'<span class="add-on"><i class="icon-th"></i></span>'+
|
'<span class="add-on"><i class="icon-th"></i></span>'+
|
||||||
'</div>')
|
'</div>' +
|
||||||
.appendTo('#qunit-fixture')
|
'<fieldset>')
|
||||||
|
.appendTo('#qunit-fixture');
|
||||||
|
|
||||||
|
this.component = this.fieldset.find('.input-append')
|
||||||
.datepicker({format: "dd-mm-yyyy"});
|
.datepicker({format: "dd-mm-yyyy"});
|
||||||
this.input = this.component.find('input');
|
this.input = this.component.find('input');
|
||||||
this.addon = this.component.find('.add-on');
|
this.addon = this.component.find('.add-on');
|
||||||
@@ -34,6 +38,9 @@ test('Dont activation (by disabled) by component', function(){
|
|||||||
this.addon.click();
|
this.addon.click();
|
||||||
ok(!this.picker.is(':visible'));
|
ok(!this.picker.is(':visible'));
|
||||||
this.input.prop('disabled', false);
|
this.input.prop('disabled', false);
|
||||||
|
this.fieldset.prop('disabled', true);
|
||||||
|
this.addon.click();
|
||||||
|
ok(!this.picker.is(':visible'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('simple keyboard nav test', function(){
|
test('simple keyboard nav test', function(){
|
||||||
|
|||||||
@@ -281,6 +281,309 @@ test('Today Button: today visibility when enabled', function(){
|
|||||||
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Today Button: today invisible when enabled and startDate is after today', function () {
|
||||||
|
var startDate = new Date();
|
||||||
|
startDate.setDate(startDate.getDate() + 1);
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
startDate: startDate,
|
||||||
|
todayBtn: true
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today invisible when enabled and endDate is before today', function () {
|
||||||
|
var endDate = new Date();
|
||||||
|
endDate.setDate(endDate.getDate() - 1);
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
endDate: endDate,
|
||||||
|
todayBtn: true
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today visible when enabled and today is between startDate and enDate', function () {
|
||||||
|
var startDate = new Date();
|
||||||
|
startDate.setDate(startDate.getDate() - 1);
|
||||||
|
var endDate = new Date();
|
||||||
|
endDate.setDate(endDate.getDate() + 1);
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
startDate: startDate,
|
||||||
|
endDate: endDate,
|
||||||
|
todayBtn: true
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today visible when enabled and daysOfWeekDisabled does not include current day', function () {
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
daysOfWeekDisabled: [(new Date().getDay() + 1) % 7],
|
||||||
|
todayBtn: true
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today invisible when enabled and daysOfWeekDisabled includes current day', function () {
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
daysOfWeekDisabled: [new Date().getDay()],
|
||||||
|
todayBtn: true
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today visibility when linked', function () {
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
todayBtn: 'linked'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today invisible when linked and startDate is after today', function () {
|
||||||
|
var startDate = new Date();
|
||||||
|
startDate.setDate(startDate.getDate() + 1);
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
startDate: startDate,
|
||||||
|
todayBtn: 'linked'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today invisible when linked and endDate is before today', function () {
|
||||||
|
var endDate = new Date();
|
||||||
|
endDate.setDate(endDate.getDate() - 1);
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
endDate: endDate,
|
||||||
|
todayBtn: 'linked'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today visible when linked and today is between startDate and enDate', function () {
|
||||||
|
var startDate = new Date();
|
||||||
|
startDate.setDate(startDate.getDate() - 1);
|
||||||
|
var endDate = new Date();
|
||||||
|
endDate.setDate(endDate.getDate() + 1);
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
startDate: startDate,
|
||||||
|
endDate: endDate,
|
||||||
|
todayBtn: 'linked'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today visible when linked and daysOfWeekDisabled does not include current day', function () {
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
daysOfWeekDisabled: [(new Date().getDay + 1) % 7],
|
||||||
|
todayBtn: 'linked'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':visible'), 'Today button visible');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Today Button: today invisible when linked and daysOfWeekDisabled includes current day', function () {
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('2012-03-05')
|
||||||
|
.datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
daysOfWeekDisabled: [new Date().getDay()],
|
||||||
|
todayBtn: 'linked'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
ok(picker.find('.datepicker-days').is(':visible'), 'Days view visible');
|
||||||
|
ok(picker.find('.datepicker-days tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-months').is(':visible'), 'Months view visible');
|
||||||
|
ok(picker.find('.datepicker-months tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
||||||
|
ok(picker.find('.datepicker-years').is(':visible'), 'Years view visible');
|
||||||
|
ok(picker.find('.datepicker-years tfoot .today').is(':not(:visible)'), 'Today button not visible');
|
||||||
|
});
|
||||||
|
|
||||||
test('Today Button: data-api', function(){
|
test('Today Button: data-api', function(){
|
||||||
var input = $('<input data-date-today-btn="true" />')
|
var input = $('<input data-date-today-btn="true" />')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
@@ -1647,25 +1950,97 @@ test('Visibility of the prev and next arrows for year/decade/century/millenium v
|
|||||||
target = picker.find('.datepicker-months thead th.next');
|
target = picker.find('.datepicker-months thead th.next');
|
||||||
ok(!target.hasClass('disabled'), 'Next switcher is not hidden');
|
ok(!target.hasClass('disabled'), 'Next switcher is not hidden');
|
||||||
|
|
||||||
picker.find('.datepicker-months thead th.datepicker-switch').click();
|
picker.find('.datepicker-months thead th.datepicker-switch').trigger('click');
|
||||||
target = picker.find('.datepicker-years thead th.prev');
|
target = picker.find('.datepicker-years thead th.prev');
|
||||||
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
||||||
target = picker.find('.datepicker-years thead th.next');
|
target = picker.find('.datepicker-years thead th.next');
|
||||||
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
||||||
|
|
||||||
picker.find('.datepicker-years thead th.datepicker-switch').click();
|
picker.find('.datepicker-years thead th.datepicker-switch').trigger('click');
|
||||||
target = picker.find('.datepicker-decades thead th.prev');
|
target = picker.find('.datepicker-decades thead th.prev');
|
||||||
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
||||||
target = picker.find('.datepicker-decades thead th.next');
|
target = picker.find('.datepicker-decades thead th.next');
|
||||||
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
||||||
|
|
||||||
picker.find('.datepicker-decades thead th.datepicker-switch').click();
|
picker.find('.datepicker-decades thead th.datepicker-switch').trigger('click');
|
||||||
target = picker.find('.datepicker-centuries thead th.prev');
|
target = picker.find('.datepicker-centuries thead th.prev');
|
||||||
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
||||||
target = picker.find('.datepicker-centuries thead th.next');
|
target = picker.find('.datepicker-centuries thead th.next');
|
||||||
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Visibility of the prev arrow for month/year/decade/century/millenium views with startDate eq value', function(){
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('01/01/2014')
|
||||||
|
.datepicker({
|
||||||
|
format: 'dd/mm/yyyy',
|
||||||
|
startView: 0,
|
||||||
|
startDate: '01/01/2014'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
|
||||||
|
target = picker.find('.datepicker-days thead th.prev');
|
||||||
|
ok(target.hasClass('disabled'), 'Prev switcher is not hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').trigger('click');
|
||||||
|
|
||||||
|
target = picker.find('.datepicker-months thead th.prev');
|
||||||
|
ok(target.hasClass('disabled'), 'Prev switcher is not hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').trigger('click');
|
||||||
|
target = picker.find('.datepicker-years thead th.prev');
|
||||||
|
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-years thead th.datepicker-switch').trigger('click');
|
||||||
|
target = picker.find('.datepicker-decades thead th.prev');
|
||||||
|
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-decades thead th.datepicker-switch').trigger('click');
|
||||||
|
target = picker.find('.datepicker-centuries thead th.prev');
|
||||||
|
ok(target.hasClass('disabled'), 'Prev switcher is hidden');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Visibility of the next arrow for month/year/decade/century/millenium views with endDate eq value', function(){
|
||||||
|
var input = $('<input />')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.val('31/12/1999')
|
||||||
|
.datepicker({
|
||||||
|
format: 'dd/mm/yyyy',
|
||||||
|
startView: 0,
|
||||||
|
endDate: '31/12/1999'
|
||||||
|
}),
|
||||||
|
dp = input.data('datepicker'),
|
||||||
|
picker = dp.picker,
|
||||||
|
target;
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
|
||||||
|
target = picker.find('.datepicker-days thead th.next');
|
||||||
|
ok(target.hasClass('disabled'), 'Next switcher is not hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-days thead th.datepicker-switch').trigger('click');
|
||||||
|
|
||||||
|
target = picker.find('.datepicker-months thead th.next');
|
||||||
|
ok(target.hasClass('disabled'), 'Next switcher is not hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-months thead th.datepicker-switch').trigger('click');
|
||||||
|
target = picker.find('.datepicker-years thead th.next');
|
||||||
|
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-years thead th.datepicker-switch').trigger('click');
|
||||||
|
target = picker.find('.datepicker-decades thead th.next');
|
||||||
|
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
||||||
|
|
||||||
|
picker.find('.datepicker-decades thead th.datepicker-switch').trigger('click');
|
||||||
|
target = picker.find('.datepicker-centuries thead th.next');
|
||||||
|
ok(target.hasClass('disabled'), 'Next switcher is hidden');
|
||||||
|
});
|
||||||
|
|
||||||
test('date cells (outdated)', function(){
|
test('date cells (outdated)', function(){
|
||||||
var input = $('<input />')
|
var input = $('<input />')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bootstrap-slider",
|
|
||||||
"main": [
|
|
||||||
"bootstrap-slider.js",
|
|
||||||
"slider.css"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/pammacdotnet/bootstrap-slider",
|
|
||||||
"authors": [
|
|
||||||
"pammacdotnet"
|
|
||||||
],
|
|
||||||
"description": "Eyecon Slider for Bootstrap",
|
|
||||||
"keywords": [
|
|
||||||
"slider",
|
|
||||||
"bootstrap"
|
|
||||||
],
|
|
||||||
"license": "Apache",
|
|
||||||
"ignore": [
|
|
||||||
"**/.*",
|
|
||||||
"node_modules",
|
|
||||||
"bower_components",
|
|
||||||
"test",
|
|
||||||
"tests"
|
|
||||||
],
|
|
||||||
"_release": "879a98dcd0",
|
|
||||||
"_resolution": {
|
|
||||||
"type": "branch",
|
|
||||||
"branch": "master",
|
|
||||||
"commit": "879a98dcd0923107363861e56423f3cc1c2472e7"
|
|
||||||
},
|
|
||||||
"_source": "https://github.com/pammacdotnet/bootstrap-slider.git",
|
|
||||||
"_target": "*",
|
|
||||||
"_originalSource": "bootstrap-slider"
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
Bootstrap Slider
|
|
||||||
=============
|
|
||||||
|
|
||||||
Fork of eyecon's [bootstrap-slider](http://www.eyecon.ro/bootstrap-slider/).
|
|
||||||
|
|
||||||
Specially remastered for iLIME Project @ UNIR Research. More info:
|
|
||||||
[http://blogs.unir.net/elearning/telsock-research-group/](http://)
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Changes
|
|
||||||
----------
|
|
||||||
Current changes include:
|
|
||||||
|
|
||||||
+ Better responsive support
|
|
||||||
+ Updated look and feel
|
|
||||||
+ Minor layout tweaks
|
|
||||||
+ Removed built-in handle types
|
|
||||||
+ Bower install
|
|
||||||
+ Limits and locks
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,427 +0,0 @@
|
|||||||
/* =========================================================
|
|
||||||
* bootstrap-slider.js v2.0.0
|
|
||||||
* http://www.eyecon.ro/bootstrap-slider
|
|
||||||
* =========================================================
|
|
||||||
* Copyright 2012 Stefan Petre
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* ========================================================= */
|
|
||||||
|
|
||||||
!function( $ ) {
|
|
||||||
|
|
||||||
var Slider = function(element, options) {
|
|
||||||
this.dragLocked = false;
|
|
||||||
this.limit = 100000;
|
|
||||||
this.element = $(element).hide();
|
|
||||||
this.picker = $('<div class="slider">'+
|
|
||||||
'<div class="slider-track">'+
|
|
||||||
'<div class="slider-selection"></div>'+
|
|
||||||
'<div class="slider-handle"></div>'+
|
|
||||||
'<div class="slider-handle"></div>'+
|
|
||||||
'</div>'+
|
|
||||||
'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+
|
|
||||||
'</div>')
|
|
||||||
.insertBefore(this.element)
|
|
||||||
.append(this.element);
|
|
||||||
this.id = this.element.data('slider-id')||options.id;
|
|
||||||
if (this.id) {
|
|
||||||
this.picker[0].id = this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof Modernizr !== 'undefined' && Modernizr.touch) {
|
|
||||||
this.touchCapable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var tooltip = this.element.data('slider-tooltip')||options.tooltip;
|
|
||||||
|
|
||||||
this.tooltip = this.picker.find('.tooltip');
|
|
||||||
this.tooltipInner = this.tooltip.find('div.tooltip-inner');
|
|
||||||
|
|
||||||
this.orientation = this.element.data('slider-orientation')||options.orientation;
|
|
||||||
switch(this.orientation) {
|
|
||||||
case 'vertical':
|
|
||||||
this.picker.addClass('slider-vertical');
|
|
||||||
this.stylePos = 'top';
|
|
||||||
this.mousePos = 'pageY';
|
|
||||||
this.sizePos = 'offsetHeight';
|
|
||||||
this.tooltip.addClass('right')[0].style.left = '100%';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.picker
|
|
||||||
.addClass('slider-horizontal')
|
|
||||||
.css('width', this.element.outerWidth());
|
|
||||||
this.orientation = 'horizontal';
|
|
||||||
this.stylePos = 'left';
|
|
||||||
this.mousePos = 'pageX';
|
|
||||||
this.sizePos = 'offsetWidth';
|
|
||||||
this.tooltip.addClass('top')[0].style.top = -this.tooltip.outerHeight() - 14 + 'px';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.min = this.element.data('slider-min')||options.min;
|
|
||||||
this.max = this.element.data('slider-max')||options.max;
|
|
||||||
this.step = this.element.data('slider-step')||options.step;
|
|
||||||
this.value = this.element.data('slider-value')||options.value;
|
|
||||||
if (this.value[1]) {
|
|
||||||
this.range = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selection = this.element.data('slider-selection')||options.selection;
|
|
||||||
this.selectionEl = this.picker.find('.slider-selection');
|
|
||||||
if (this.selection === 'none') {
|
|
||||||
this.selectionEl.addClass('hide');
|
|
||||||
}
|
|
||||||
this.selectionElStyle = this.selectionEl[0].style;
|
|
||||||
|
|
||||||
|
|
||||||
this.handle1 = this.picker.find('.slider-handle:first');
|
|
||||||
this.handle1Stype = this.handle1[0].style;
|
|
||||||
this.handle2 = this.picker.find('.slider-handle:last');
|
|
||||||
this.handle2Stype = this.handle2[0].style;
|
|
||||||
|
|
||||||
var handle = this.element.data('slider-handle')||options.handle;
|
|
||||||
switch(handle) {
|
|
||||||
case 'round':
|
|
||||||
this.handle1.addClass('round');
|
|
||||||
this.handle2.addClass('round');
|
|
||||||
break
|
|
||||||
case 'triangle':
|
|
||||||
this.handle1.addClass('triangle');
|
|
||||||
this.handle2.addClass('triangle');
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.range) {
|
|
||||||
this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
|
|
||||||
this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
|
|
||||||
} else {
|
|
||||||
this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
|
|
||||||
this.handle2.addClass('hide');
|
|
||||||
if (this.selection == 'after') {
|
|
||||||
this.value[1] = this.max;
|
|
||||||
} else {
|
|
||||||
this.value[1] = this.min;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.diff = this.max - this.min;
|
|
||||||
this.percentage = [
|
|
||||||
(this.value[0]-this.min)*100/this.diff,
|
|
||||||
(this.value[1]-this.min)*100/this.diff,
|
|
||||||
this.step*100/this.diff
|
|
||||||
];
|
|
||||||
|
|
||||||
this.offset = this.picker.offset();
|
|
||||||
this.size = this.picker[0][this.sizePos];
|
|
||||||
|
|
||||||
this.formater = options.formater;
|
|
||||||
this.reversed = this.element.data('slider-reversed')||options.reversed;
|
|
||||||
|
|
||||||
this.layout();
|
|
||||||
|
|
||||||
if (this.touchCapable) {
|
|
||||||
// Touch: Bind touch events:
|
|
||||||
this.picker.on({
|
|
||||||
touchstart: $.proxy(this.mousedown, this)
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.picker.on({
|
|
||||||
mousedown: $.proxy(this.mousedown, this)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tooltip === 'show') {
|
|
||||||
this.picker.on({
|
|
||||||
mouseenter: $.proxy(this.showTooltip, this),
|
|
||||||
mouseleave: $.proxy(this.hideTooltip, this)
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.tooltip.addClass('hide');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Slider.prototype = {
|
|
||||||
constructor: Slider,
|
|
||||||
|
|
||||||
over: false,
|
|
||||||
inDrag: false,
|
|
||||||
|
|
||||||
showTooltip: function(){
|
|
||||||
this.tooltip.addClass('in');
|
|
||||||
//var left = Math.round(this.percent*this.width);
|
|
||||||
//this.tooltip.css('left', left - this.tooltip.outerWidth()/2);
|
|
||||||
this.over = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
hideTooltip: function(){
|
|
||||||
if (this.inDrag === false) {
|
|
||||||
this.tooltip.removeClass('in');
|
|
||||||
}
|
|
||||||
this.over = false;
|
|
||||||
},
|
|
||||||
|
|
||||||
layout: function(){
|
|
||||||
var positionPercentages;
|
|
||||||
|
|
||||||
if(this.reversed) {
|
|
||||||
positionPercentages = [ this.percentage[1] - this.percentage[0], this.percentage[1] ];
|
|
||||||
} else {
|
|
||||||
positionPercentages = [ this.percentage[0], this.percentage[1] ];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.handle1Stype[this.stylePos] = positionPercentages[0]+'%';
|
|
||||||
this.handle2Stype[this.stylePos] = positionPercentages[1]+'%';
|
|
||||||
if (this.orientation == 'vertical') {
|
|
||||||
this.selectionElStyle.top = Math.min(positionPercentages[0], positionPercentages[1]) +'%';
|
|
||||||
this.selectionElStyle.height = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%';
|
|
||||||
} else {
|
|
||||||
this.selectionElStyle.left = Math.min(positionPercentages[0], positionPercentages[1]) +'%';
|
|
||||||
this.selectionElStyle.width = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.range) {
|
|
||||||
this.tooltipInner.text(
|
|
||||||
this.formater(this.value[0]) +
|
|
||||||
' : ' +
|
|
||||||
this.formater(this.value[1])
|
|
||||||
);
|
|
||||||
this.tooltip[0].style[this.stylePos] = this.size * (positionPercentages[0] + (positionPercentages[1] - positionPercentages[0])/2)/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
|
|
||||||
} else {
|
|
||||||
this.tooltipInner.text(
|
|
||||||
this.formater(this.value[0])
|
|
||||||
);
|
|
||||||
this.tooltip[0].style[this.stylePos] = this.size * positionPercentages[0]/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mousedown: function(ev) {
|
|
||||||
|
|
||||||
if (!this.dragLocked){
|
|
||||||
// Touch: Get the original event:
|
|
||||||
if (this.touchCapable && ev.type === 'touchstart') {
|
|
||||||
ev = ev.originalEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.offset = this.picker.offset();
|
|
||||||
this.size = this.picker[0][this.sizePos];
|
|
||||||
|
|
||||||
var percentage = this.getPercentage(ev);
|
|
||||||
|
|
||||||
if (this.range) {
|
|
||||||
var diff1 = Math.abs(this.percentage[0] - percentage);
|
|
||||||
var diff2 = Math.abs(this.percentage[1] - percentage);
|
|
||||||
this.dragged = (diff1 < diff2) ? 0 : 1;
|
|
||||||
} else {
|
|
||||||
this.dragged = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.percentage[this.dragged] = this.reversed ? this.percentage[1] - percentage : percentage;
|
|
||||||
this.layout();
|
|
||||||
|
|
||||||
if (this.touchCapable) {
|
|
||||||
// Touch: Bind touch events:
|
|
||||||
$(document).on({
|
|
||||||
touchmove: $.proxy(this.mousemove, this),
|
|
||||||
touchend: $.proxy(this.mouseup, this)
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
$(document).on({
|
|
||||||
mousemove: $.proxy(this.mousemove, this),
|
|
||||||
mouseup: $.proxy(this.mouseup, this)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.inDrag = true;
|
|
||||||
var val = this.calculateValue();
|
|
||||||
|
|
||||||
this.setValue(val);
|
|
||||||
this.element.trigger({
|
|
||||||
type: 'slideStart',
|
|
||||||
value: val
|
|
||||||
}).trigger({
|
|
||||||
type: 'slide',
|
|
||||||
value: val
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mousemove: function(ev) {
|
|
||||||
// Touch: Get the original event:
|
|
||||||
if (!this.dragLocked){
|
|
||||||
if (this.touchCapable && ev.type === 'touchmove') {
|
|
||||||
ev = ev.originalEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
var percentage = this.getPercentage(ev);
|
|
||||||
if (this.range) {
|
|
||||||
if (this.dragged === 0 && this.percentage[1] < percentage) {
|
|
||||||
this.percentage[0] = this.percentage[1];
|
|
||||||
this.dragged = 1;
|
|
||||||
} else if (this.dragged === 1 && this.percentage[0] > percentage) {
|
|
||||||
this.percentage[1] = this.percentage[0];
|
|
||||||
this.dragged = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
x = this.reversed ? this.percentage[1] - percentage : percentage;
|
|
||||||
if (x > this.limit) {
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
this.percentage[this.dragged] = x;
|
|
||||||
this.layout();
|
|
||||||
var val = this.calculateValue();
|
|
||||||
this.setValue(val);
|
|
||||||
|
|
||||||
this.element
|
|
||||||
.trigger({
|
|
||||||
type: 'slide',
|
|
||||||
value: val
|
|
||||||
})
|
|
||||||
.data('value', val)
|
|
||||||
.prop('value', val);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mouseup: function(ev) {
|
|
||||||
if (this.touchCapable) {
|
|
||||||
// Touch: Bind touch events:
|
|
||||||
$(document).off({
|
|
||||||
touchmove: this.mousemove,
|
|
||||||
touchend: this.mouseup
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
$(document).off({
|
|
||||||
mousemove: this.mousemove,
|
|
||||||
mouseup: this.mouseup
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.inDrag = false;
|
|
||||||
if (this.over == false) {
|
|
||||||
this.hideTooltip();
|
|
||||||
}
|
|
||||||
this.element;
|
|
||||||
var val = this.calculateValue();
|
|
||||||
this.layout();
|
|
||||||
this.element
|
|
||||||
.trigger({
|
|
||||||
type: 'slideStop',
|
|
||||||
value: val
|
|
||||||
})
|
|
||||||
.data('value', val)
|
|
||||||
.prop('value', val);
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
calculateValue: function() {
|
|
||||||
var val;
|
|
||||||
if (this.range) {
|
|
||||||
val = [
|
|
||||||
(this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step),
|
|
||||||
(this.min + Math.round((this.diff * this.percentage[1]/100)/this.step)*this.step)
|
|
||||||
];
|
|
||||||
this.value = val;
|
|
||||||
} else {
|
|
||||||
val = (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step);
|
|
||||||
this.value = [val, this.value[1]];
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
},
|
|
||||||
|
|
||||||
getPercentage: function(ev) {
|
|
||||||
if (this.touchCapable) {
|
|
||||||
ev = ev.touches[0];
|
|
||||||
}
|
|
||||||
var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size;
|
|
||||||
percentage = Math.round(percentage/this.percentage[2])*this.percentage[2];
|
|
||||||
return Math.max(0, Math.min(100, percentage));
|
|
||||||
},
|
|
||||||
|
|
||||||
getValue: function() {
|
|
||||||
if (this.range) {
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
return this.value[0];
|
|
||||||
},
|
|
||||||
setLimit: function(val) {
|
|
||||||
this.limit = val;
|
|
||||||
},
|
|
||||||
setDragLocked: function(val) {
|
|
||||||
this.dragLocked = val;
|
|
||||||
},
|
|
||||||
getDragLocked: function(val) {
|
|
||||||
return this.dragLocked;
|
|
||||||
},
|
|
||||||
setValue: function(val) {
|
|
||||||
this.value = val;
|
|
||||||
|
|
||||||
if (this.range) {
|
|
||||||
this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0]));
|
|
||||||
this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1]));
|
|
||||||
} else {
|
|
||||||
this.value = [ Math.max(this.min, Math.min(this.max, this.value))];
|
|
||||||
this.handle2.addClass('hide');
|
|
||||||
if (this.selection == 'after') {
|
|
||||||
this.value[1] = this.max;
|
|
||||||
} else {
|
|
||||||
this.value[1] = this.min;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.diff = this.max - this.min;
|
|
||||||
this.percentage = [
|
|
||||||
(this.value[0]-this.min)*100/this.diff,
|
|
||||||
(this.value[1]-this.min)*100/this.diff,
|
|
||||||
this.step*100/this.diff
|
|
||||||
];
|
|
||||||
this.layout();
|
|
||||||
},
|
|
||||||
destroy: function(){
|
|
||||||
this.element.show().insertBefore(this.picker);
|
|
||||||
this.picker.remove();
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
$.fn.slider = function ( option, val ) {
|
|
||||||
return this.each(function () {
|
|
||||||
var $this = $(this),
|
|
||||||
data = $this.data('slider'),
|
|
||||||
options = typeof option === 'object' && option;
|
|
||||||
if (!data) {
|
|
||||||
$this.data('slider', (data = new Slider(this, $.extend({}, $.fn.slider.defaults,options))));
|
|
||||||
}
|
|
||||||
if (typeof option == 'string') {
|
|
||||||
data[option](val);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
$.fn.slider.defaults = {
|
|
||||||
min: 0,
|
|
||||||
max: 10,
|
|
||||||
step: 1,
|
|
||||||
orientation: 'horizontal',
|
|
||||||
value: 5,
|
|
||||||
selection: 'before',
|
|
||||||
tooltip: 'show',
|
|
||||||
handle: 'round',
|
|
||||||
reversed : false,
|
|
||||||
limit: 100000,
|
|
||||||
dragLocked: false,
|
|
||||||
formater: function(value) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$.fn.slider.Constructor = Slider;
|
|
||||||
|
|
||||||
}( window.jQuery );
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bootstrap-slider",
|
|
||||||
"main": ["bootstrap-slider.js", "slider.css"],
|
|
||||||
"version": "2.0.0",
|
|
||||||
"homepage": "https://github.com/pammacdotnet/bootstrap-slider",
|
|
||||||
"authors": [
|
|
||||||
"pammacdotnet"
|
|
||||||
],
|
|
||||||
"description": "Eyecon Slider for Bootstrap",
|
|
||||||
"keywords": [
|
|
||||||
"slider",
|
|
||||||
"bootstrap"
|
|
||||||
],
|
|
||||||
"license": "Apache",
|
|
||||||
"ignore": [
|
|
||||||
"**/.*",
|
|
||||||
"node_modules",
|
|
||||||
"bower_components",
|
|
||||||
"test",
|
|
||||||
"tests"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 8.4 KiB |
@@ -1,178 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Slider for Bootstrap
|
|
||||||
*
|
|
||||||
* Copyright 2012 Stefan Petre
|
|
||||||
* Licensed under the Apache License v2.0
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.slider {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
position: relative;
|
|
||||||
margin-bottom: 10px
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider[class*="span"] {
|
|
||||||
float: none;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-horizontal {
|
|
||||||
width: 210px;
|
|
||||||
height: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-horizontal .slider-handle-container,
|
|
||||||
.slider-horizontal .slider-track {
|
|
||||||
height: 10px;
|
|
||||||
margin-top: -5px;
|
|
||||||
top: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-horizontal .slider-track {
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-horizontal .slider-handle-container {
|
|
||||||
left: 10px;
|
|
||||||
right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-horizontal .slider-selection {
|
|
||||||
height: 100%;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-horizontal .slider-handle {
|
|
||||||
margin-left: -10px;
|
|
||||||
margin-top: -5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-vertical {
|
|
||||||
height: 210px;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-vertical .slider-handle-container,
|
|
||||||
.slider-vertical .slider-track {
|
|
||||||
width: 10px;
|
|
||||||
margin-left: -5px;
|
|
||||||
left: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-vertical .slider-track {
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-vertical .slider-handle-container {
|
|
||||||
top: 10px;
|
|
||||||
bottom: 10px;
|
|
||||||
}
|
|
||||||
.slider-vertical .slider-selection {
|
|
||||||
width: 100%;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-vertical .slider-handle {
|
|
||||||
margin-left: -5px;
|
|
||||||
margin-top: -10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider input,
|
|
||||||
.slider input[class*="span"] {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider .tooltip-inner {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-handle-container {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-track {
|
|
||||||
position: absolute;
|
|
||||||
cursor: pointer;
|
|
||||||
background-color: #f7f7f7;
|
|
||||||
background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
|
|
||||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
|
|
||||||
background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
|
|
||||||
background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
|
|
||||||
background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
|
|
||||||
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
||||||
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
||||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-selection {
|
|
||||||
position: absolute;
|
|
||||||
background-color: #e6e6e6;
|
|
||||||
background-image: -moz-linear-gradient(top, #f0f0f0, #e0e0e0);
|
|
||||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f0f0f0), to(#e0e0e0));
|
|
||||||
background-image: -webkit-linear-gradient(top, #f0f0f0, #e0e0e0);
|
|
||||||
background-image: -o-linear-gradient(top, #f0f0f0, #e0e0e0);
|
|
||||||
background-image: linear-gradient(to bottom, #f0f0f0, #e0e0e0);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
|
||||||
-webkit-box-sizing: border-box;
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-webkit-border-radius: 20px;
|
|
||||||
-moz-border-radius: 20px;
|
|
||||||
border-radius: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-handle {
|
|
||||||
position: absolute;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-knob {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
background-image: -moz-linear-gradient(top, #e6e6e6, #ffffff);
|
|
||||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#ffffff));
|
|
||||||
background-image: -webkit-linear-gradient(top, #e6e6e6, #ffffff);
|
|
||||||
background-image: -o-linear-gradient(top, #e6e6e6, #ffffff);
|
|
||||||
background-image: linear-gradient(to bottom, #e6e6e6, #ffffff);
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
border: 1px solid #bbbbbb;
|
|
||||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
|
||||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
|
||||||
border-bottom-color: #a2a2a2;
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
||||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
||||||
-webkit-border-radius: 20px;
|
|
||||||
-moz-border-radius: 20px;
|
|
||||||
border-radius: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-handle:active .slider-knob,
|
|
||||||
.slider-handle:hover .slider-knob {
|
|
||||||
background-color: #e6e6e6;
|
|
||||||
background-position: 0 5px;
|
|
||||||
-webkit-transition: background-position 0.1s linear;
|
|
||||||
-moz-transition: background-position 0.1s linear;
|
|
||||||
-o-transition: background-position 0.1s linear;
|
|
||||||
transition: background-position 0.1s linear;
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bootstrap-timepicker",
|
|
||||||
"description": "A timepicker component for Twitter Bootstrap",
|
|
||||||
"version": "0.5.2",
|
|
||||||
"main": "js/bootstrap-timepicker.js",
|
|
||||||
"license": "MIT",
|
|
||||||
"ignore": [
|
|
||||||
"**/.*",
|
|
||||||
"_layouts",
|
|
||||||
"node_modules",
|
|
||||||
"_config.yml",
|
|
||||||
"assets",
|
|
||||||
"spec",
|
|
||||||
"index.html",
|
|
||||||
"Gruntfile.js",
|
|
||||||
"package.json",
|
|
||||||
"composer.json"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/jdewit/bootstrap-timepicker"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "^3.0",
|
|
||||||
"jquery": "^2.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"autotype": "https://raw.github.com/mmonteleone/jquery.autotype/master/jquery.autotype.js"
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"widget",
|
|
||||||
"timepicker",
|
|
||||||
"time"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/jdewit/bootstrap-timepicker",
|
|
||||||
"_release": "0.5.2",
|
|
||||||
"_resolution": {
|
|
||||||
"type": "version",
|
|
||||||
"tag": "v0.5.2",
|
|
||||||
"commit": "5ac75ccbe2f53a7357fd97ca9afdebe014b4c027"
|
|
||||||
},
|
|
||||||
"_source": "https://github.com/jdewit/bootstrap-timepicker.git",
|
|
||||||
"_target": "^0.5.2",
|
|
||||||
"_originalSource": "bootstrap-timepicker"
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes will be documented in this file. This project
|
|
||||||
sort of conforms to Semantic Versioning. Since we're still pre-1.0,
|
|
||||||
it's like the Wild West up in here!
|
|
||||||
|
|
||||||
## Unreleased
|
|
||||||
### Added (not started)
|
|
||||||
- Still planning out how to include i18n data and functionality.
|
|
||||||
|
|
||||||
### Deprecated (not started)
|
|
||||||
- Incorrect usage of the word "meridian" will be deprecated. It should
|
|
||||||
be "meridiem".
|
|
||||||
- `showWidgetOnAddonClick`'s current behavior is not intuitive. Clicking
|
|
||||||
the input addon should _toggle_ the widget instead of showing it.
|
|
||||||
|
|
||||||
## 0.5.2 - 2016-01-02
|
|
||||||
### Added
|
|
||||||
- Tabbing out of the timepicker widget will now close it.
|
|
||||||
- You can specify your own icon classes. See docs for the option.
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Cleaned up `package.json` and `bower.json` files. The npm/bower package
|
|
||||||
should be cleaner now.
|
|
||||||
- `timepicker.less` now lives in the `css/` directory of the package.
|
|
||||||
- bootstrap-timepicker now uses the latest minor releases for jQuery 2 and
|
|
||||||
Bootstrap 3
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- Fixed bad interaction between `setTime("12:00 AM")` and `showMeridian`
|
|
||||||
- Various documentation issues were fixed.
|
|
||||||
|
|
||||||
## 0.5.1 - 2015-08-06
|
|
||||||
### Changed
|
|
||||||
- Critical fix (#279) for bootstrap initialization. If you happened to
|
|
||||||
list your timepicker's classes in an order other than "input-group
|
|
||||||
bootstrap-timepicker", you'd be out of luck. Now we use jQuery's
|
|
||||||
`hasClass` method correctly. Yay!
|
|
||||||
|
|
||||||
## 0.5 - 2015-07-31
|
|
||||||
### Changed
|
|
||||||
- Bootstrap 3 support. No more Bootstrap 2 support.
|
|
||||||
- setTime sets time better
|
|
||||||
- more tests, and they exercise Bootstrap 3 support!
|
|
||||||
- snapToStep is a new option, off by default, which snaps times to the
|
|
||||||
nearest step or overflows to 0 if it would otherwise snap to 60 or
|
|
||||||
more.
|
|
||||||
- explicitMode is a new option, off by default, which lets you leave
|
|
||||||
out colons when typing times.
|
|
||||||
- shift+tab now correctly moves the cursor to the previously
|
|
||||||
highlighted unit, and blurs the timepicker when expected.
|
|
||||||
- We have cut out significant amounts of old cruft from the
|
|
||||||
repository.
|
|
||||||
- Minified/Uglified code is no longer kept in the repo. Please
|
|
||||||
download a release tarball or zip file to get the compiled and
|
|
||||||
minified CSS and Javascript files.
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
The MIT license
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
Timepicker for Twitter Bootstrap
|
|
||||||
=======
|
|
||||||
[](https://travis-ci.org/jdewit/bootstrap-timepicker)
|
|
||||||
|
|
||||||
A simple timepicker component for Twitter Bootstrap.
|
|
||||||
|
|
||||||
Status
|
|
||||||
======
|
|
||||||
Please take a look at the `CHANGELOG.md` and the issues tab for issues we're
|
|
||||||
working on and their relative priorities.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
This project is registered as a <a href="http://bower.io">Bower</a> package,
|
|
||||||
and can be installed with the following command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bower install bootstrap-timepicker
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also download our latest release (and any previous release)
|
|
||||||
<a href="https://github.com/jdewit/bootstrap-timepicker/releases">here</a>.
|
|
||||||
|
|
||||||
Demos & Documentation
|
|
||||||
=====================
|
|
||||||
|
|
||||||
View <a href="http://jdewit.github.com/bootstrap-timepicker">demos & documentation</a>.
|
|
||||||
|
|
||||||
Support
|
|
||||||
=======
|
|
||||||
|
|
||||||
If you make money using this timepicker, please consider
|
|
||||||
supporting its development.
|
|
||||||
|
|
||||||
<a href="http://www.pledgie.com/campaigns/19125"><img alt="Click here to support bootstrap-timepicker!" src="http://www.pledgie.com/campaigns/19125.png?skin_name=chrome" border="0" target="_blank"/></a> <a class="FlattrButton" style="display:none;" rev="flattr;button:compact;" href="http://jdewit.github.com/bootstrap-timepicker"></a> <noscript><a href="http://flattr.com/thing/1116513/Bootstrap-Timepicker" target="_blank"> <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a></noscript>
|
|
||||||
|
|
||||||
Contributing
|
|
||||||
============
|
|
||||||
|
|
||||||
1. Install <a href="www.nodejs.org">NodeJS</a> and <a href="www.npmjs.org">Node Package Manager</a>.
|
|
||||||
|
|
||||||
2. Install packages
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Use <a href="https://github.com/twitter/bower">Bower</a> to get the dev dependencies.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bower install
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Use <a href="www.gruntjs.com">Grunt</a> to run tests, compress assets, etc.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grunt test // run jshint and jasmine tests
|
|
||||||
grunt watch // run jsHint and Jasmine tests whenever a file is changed
|
|
||||||
grunt compile // minify the js and css files
|
|
||||||
```
|
|
||||||
|
|
||||||
- Please make it easy on me by covering any new features or issues
|
|
||||||
with <a href="http://pivotal.github.com/jasmine">Jasmine</a> tests.
|
|
||||||
- If your changes need documentation, please take the time to update the docs.
|
|
||||||
|
|
||||||
Acknowledgements
|
|
||||||
================
|
|
||||||
|
|
||||||
Thanks to everyone who have given feedback and submitted pull requests. A
|
|
||||||
list of all the contributors can be found <a href="https://github.com/jdewit/bootstrap-timepicker/graphs/contributors">here</a>.
|
|
||||||
|
|
||||||
Special thanks to @eternicode and his <a href="https://github.com/eternicode/bootstrap-datepicker">Twitter Datepicker</a> for inspiration.
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bootstrap-timepicker",
|
|
||||||
"description": "A timepicker component for Twitter Bootstrap",
|
|
||||||
"version": "0.5.2",
|
|
||||||
"main": "js/bootstrap-timepicker.js",
|
|
||||||
"license": "MIT",
|
|
||||||
"ignore": [
|
|
||||||
"**/.*",
|
|
||||||
"_layouts",
|
|
||||||
"node_modules",
|
|
||||||
"_config.yml",
|
|
||||||
"assets",
|
|
||||||
"spec",
|
|
||||||
"index.html",
|
|
||||||
"Gruntfile.js",
|
|
||||||
"package.json",
|
|
||||||
"composer.json"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/jdewit/bootstrap-timepicker"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "^3.0",
|
|
||||||
"jquery": "^2.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"autotype": "https://raw.github.com/mmonteleone/jquery.autotype/master/jquery.autotype.js"
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"widget",
|
|
||||||
"timepicker",
|
|
||||||
"time"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Timepicker Component for Twitter Bootstrap
|
|
||||||
*
|
|
||||||
* Copyright 2013 Joris de Wit
|
|
||||||
*
|
|
||||||
* Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
.bootstrap-timepicker {
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&.pull-right {
|
|
||||||
.bootstrap-timepicker-widget {
|
|
||||||
&.dropdown-menu {
|
|
||||||
left: auto;
|
|
||||||
right: 0;
|
|
||||||
|
|
||||||
&:before {
|
|
||||||
left: auto;
|
|
||||||
right: 12px;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
left: auto;
|
|
||||||
right: 13px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-group-addon {
|
|
||||||
cursor: pointer;
|
|
||||||
i {
|
|
||||||
display: inline-block;
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.bootstrap-timepicker-widget {
|
|
||||||
&.dropdown-menu {
|
|
||||||
padding: 4px;
|
|
||||||
&.open {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
&:before {
|
|
||||||
border-bottom: 7px solid rgba(0, 0, 0, 0.2);
|
|
||||||
border-left: 7px solid transparent;
|
|
||||||
border-right: 7px solid transparent;
|
|
||||||
content: "";
|
|
||||||
display: inline-block;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
border-bottom: 6px solid #FFFFFF;
|
|
||||||
border-left: 6px solid transparent;
|
|
||||||
border-right: 6px solid transparent;
|
|
||||||
content: "";
|
|
||||||
display: inline-block;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.timepicker-orient-left {
|
|
||||||
&:before {
|
|
||||||
left: 6px;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
left: 7px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.timepicker-orient-right {
|
|
||||||
&:before {
|
|
||||||
right: 6px;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
right: 7px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.timepicker-orient-top {
|
|
||||||
&:before {
|
|
||||||
top: -7px;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
top: -6px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.timepicker-orient-bottom {
|
|
||||||
&:before {
|
|
||||||
bottom: -7px;
|
|
||||||
border-bottom: 0;
|
|
||||||
border-top: 7px solid #999;
|
|
||||||
}
|
|
||||||
&:after {
|
|
||||||
bottom: -6px;
|
|
||||||
border-bottom: 0;
|
|
||||||
border-top: 6px solid #ffffff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
a.btn, input {
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
|
|
||||||
td {
|
|
||||||
text-align: center;
|
|
||||||
height: 30px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 2px;
|
|
||||||
|
|
||||||
&:not(.separator) {
|
|
||||||
min-width: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
border: 1px transparent solid;
|
|
||||||
width: 100%;
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0;
|
|
||||||
padding: 8px 0;
|
|
||||||
outline: 0;
|
|
||||||
color: #333;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: #eee;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
border-color: #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
i {
|
|
||||||
margin-top: 2px;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
input {
|
|
||||||
width: 25px;
|
|
||||||
margin: 0;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.bootstrap-timepicker-widget .modal-content {
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 767px) {
|
|
||||||
.bootstrap-timepicker-widget.modal {
|
|
||||||
width: 200px;
|
|
||||||
margin-left: -100px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.bootstrap-timepicker {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
.dropdown-menu {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@
|
|||||||
"framework",
|
"framework",
|
||||||
"web"
|
"web"
|
||||||
],
|
],
|
||||||
"homepage": "http://getbootstrap.com",
|
"homepage": "https://getbootstrap.com/",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"moduleType": "globals",
|
"moduleType": "globals",
|
||||||
"main": [
|
"main": [
|
||||||
@@ -31,14 +31,14 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jquery": "1.9.1 - 3"
|
"jquery": "1.9.1 - 3"
|
||||||
},
|
},
|
||||||
"version": "3.3.7",
|
"version": "3.4.1",
|
||||||
"_release": "3.3.7",
|
"_release": "3.4.1",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "v3.3.7",
|
"tag": "v3.4.1",
|
||||||
"commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
|
"commit": "68b0d231a13201eb14acd3dc84e51543d16e5f7e"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/twbs/bootstrap.git",
|
"_source": "https://github.com/twbs/bootstrap.git",
|
||||||
"_target": "^3.3.7",
|
"_target": "^3.4",
|
||||||
"_originalSource": "bootstrap"
|
"_originalSource": "bootstrap"
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs.
|
Bootstrap uses [GitHub's Releases feature](https://blog.github.com/2013-07-02-release-your-software/) for its changelogs.
|
||||||
|
|
||||||
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
|
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
|
||||||
|
|
||||||
Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
|
Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release.
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
gem 'jekyll', '~> 3.1.2'
|
gem 'jekyll', '~> 3.8.5'
|
||||||
gem 'jekyll-sitemap', '~> 0.11.0'
|
gem 'jekyll-redirect-from', '~> 0.14.0'
|
||||||
|
gem 'jekyll-sitemap', '~> 1.2.0'
|
||||||
|
gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform?
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,43 +1,74 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
addressable (2.4.0)
|
addressable (2.6.0)
|
||||||
colorator (0.1)
|
public_suffix (>= 2.0.2, < 4.0)
|
||||||
ffi (1.9.14-x64-mingw32)
|
colorator (1.1.0)
|
||||||
jekyll (3.1.6)
|
concurrent-ruby (1.1.4)
|
||||||
colorator (~> 0.1)
|
em-websocket (0.5.1)
|
||||||
|
eventmachine (>= 0.12.9)
|
||||||
|
http_parser.rb (~> 0.6.0)
|
||||||
|
eventmachine (1.2.7)
|
||||||
|
eventmachine (1.2.7-x64-mingw32)
|
||||||
|
ffi (1.10.0)
|
||||||
|
ffi (1.10.0-x64-mingw32)
|
||||||
|
forwardable-extended (2.6.0)
|
||||||
|
http_parser.rb (0.6.0)
|
||||||
|
i18n (0.9.5)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
jekyll (3.8.5)
|
||||||
|
addressable (~> 2.4)
|
||||||
|
colorator (~> 1.0)
|
||||||
|
em-websocket (~> 0.5)
|
||||||
|
i18n (~> 0.7)
|
||||||
jekyll-sass-converter (~> 1.0)
|
jekyll-sass-converter (~> 1.0)
|
||||||
jekyll-watch (~> 1.1)
|
jekyll-watch (~> 2.0)
|
||||||
kramdown (~> 1.3)
|
kramdown (~> 1.14)
|
||||||
liquid (~> 3.0)
|
liquid (~> 4.0)
|
||||||
mercenary (~> 0.3.3)
|
mercenary (~> 0.3.3)
|
||||||
rouge (~> 1.7)
|
pathutil (~> 0.9)
|
||||||
|
rouge (>= 1.7, < 4)
|
||||||
safe_yaml (~> 1.0)
|
safe_yaml (~> 1.0)
|
||||||
jekyll-sass-converter (1.4.0)
|
jekyll-redirect-from (0.14.0)
|
||||||
|
jekyll (~> 3.3)
|
||||||
|
jekyll-sass-converter (1.5.2)
|
||||||
sass (~> 3.4)
|
sass (~> 3.4)
|
||||||
jekyll-sitemap (0.11.0)
|
jekyll-sitemap (1.2.0)
|
||||||
addressable (~> 2.4.0)
|
jekyll (~> 3.3)
|
||||||
jekyll-watch (1.4.0)
|
jekyll-watch (2.1.2)
|
||||||
listen (~> 3.0, < 3.1)
|
listen (~> 3.0)
|
||||||
kramdown (1.11.1)
|
kramdown (1.17.0)
|
||||||
liquid (3.0.6)
|
liquid (4.0.1)
|
||||||
listen (3.0.8)
|
listen (3.1.5)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
rb-inotify (~> 0.9, >= 0.9.7)
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
|
ruby_dep (~> 1.2)
|
||||||
mercenary (0.3.6)
|
mercenary (0.3.6)
|
||||||
rb-fsevent (0.9.7)
|
pathutil (0.16.2)
|
||||||
rb-inotify (0.9.7)
|
forwardable-extended (~> 2.6)
|
||||||
ffi (>= 0.5.0)
|
public_suffix (3.0.3)
|
||||||
rouge (1.11.1)
|
rb-fsevent (0.10.3)
|
||||||
|
rb-inotify (0.10.0)
|
||||||
|
ffi (~> 1.0)
|
||||||
|
rouge (3.3.0)
|
||||||
|
ruby_dep (1.5.0)
|
||||||
safe_yaml (1.0.4)
|
safe_yaml (1.0.4)
|
||||||
sass (3.4.22)
|
sass (3.7.3)
|
||||||
|
sass-listen (~> 4.0.0)
|
||||||
|
sass-listen (4.0.0)
|
||||||
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
|
wdm (0.1.1)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
|
ruby
|
||||||
x64-mingw32
|
x64-mingw32
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
jekyll (~> 3.1.2)
|
jekyll (~> 3.8.5)
|
||||||
jekyll-sitemap (~> 0.11.0)
|
jekyll-redirect-from (~> 0.14.0)
|
||||||
|
jekyll-sitemap (~> 1.2.0)
|
||||||
|
wdm (~> 0.1.1)
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
1.12.5
|
1.17.3
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*!
|
/*!
|
||||||
* Bootstrap's Gruntfile
|
* Bootstrap's Gruntfile
|
||||||
* http://getbootstrap.com
|
* https://getbootstrap.com/
|
||||||
* Copyright 2013-2016 Twitter, Inc.
|
* Copyright 2013-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ module.exports = function (grunt) {
|
|||||||
banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
|
banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
|
||||||
stripBanners: false
|
stripBanners: false
|
||||||
},
|
},
|
||||||
bootstrap: {
|
core: {
|
||||||
src: [
|
src: [
|
||||||
'js/transition.js',
|
'js/transition.js',
|
||||||
'js/alert.js',
|
'js/alert.js',
|
||||||
@@ -125,78 +125,90 @@ module.exports = function (grunt) {
|
|||||||
|
|
||||||
uglify: {
|
uglify: {
|
||||||
options: {
|
options: {
|
||||||
compress: {
|
compress: true,
|
||||||
warnings: false
|
|
||||||
},
|
|
||||||
mangle: true,
|
mangle: true,
|
||||||
preserveComments: /^!|@preserve|@license|@cc_on/i
|
ie8: true,
|
||||||
|
output: {
|
||||||
|
comments: /^!|@preserve|@license|@cc_on/i
|
||||||
|
}
|
||||||
},
|
},
|
||||||
core: {
|
core: {
|
||||||
src: '<%= concat.bootstrap.dest %>',
|
src: '<%= concat.core.dest %>',
|
||||||
dest: 'dist/js/<%= pkg.name %>.min.js'
|
dest: 'dist/js/<%= pkg.name %>.min.js'
|
||||||
},
|
},
|
||||||
customize: {
|
customize: {
|
||||||
src: configBridge.paths.customizerJs,
|
src: configBridge.paths.customizerJs,
|
||||||
dest: 'docs/assets/js/customize.min.js'
|
dest: 'docs/assets/js/customize.min.js'
|
||||||
},
|
},
|
||||||
docsJs: {
|
docs: {
|
||||||
src: configBridge.paths.docsJs,
|
src: configBridge.paths.docsJs,
|
||||||
dest: 'docs/assets/js/docs.min.js'
|
dest: 'docs/assets/js/docs.min.js'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
qunit: {
|
|
||||||
options: {
|
|
||||||
inject: 'js/tests/unit/phantom.js'
|
|
||||||
},
|
|
||||||
files: 'js/tests/index.html'
|
|
||||||
},
|
|
||||||
|
|
||||||
less: {
|
less: {
|
||||||
compileCore: {
|
|
||||||
options: {
|
options: {
|
||||||
|
ieCompat: true,
|
||||||
strictMath: true,
|
strictMath: true,
|
||||||
sourceMap: true,
|
sourceMap: true,
|
||||||
outputSourceFiles: true,
|
outputSourceFiles: true
|
||||||
|
},
|
||||||
|
core: {
|
||||||
|
options: {
|
||||||
sourceMapURL: '<%= pkg.name %>.css.map',
|
sourceMapURL: '<%= pkg.name %>.css.map',
|
||||||
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
|
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
|
||||||
},
|
},
|
||||||
src: 'less/bootstrap.less',
|
src: 'less/bootstrap.less',
|
||||||
dest: 'dist/css/<%= pkg.name %>.css'
|
dest: 'dist/css/<%= pkg.name %>.css'
|
||||||
},
|
},
|
||||||
compileTheme: {
|
theme: {
|
||||||
options: {
|
options: {
|
||||||
strictMath: true,
|
|
||||||
sourceMap: true,
|
|
||||||
outputSourceFiles: true,
|
|
||||||
sourceMapURL: '<%= pkg.name %>-theme.css.map',
|
sourceMapURL: '<%= pkg.name %>-theme.css.map',
|
||||||
sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
|
sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
|
||||||
},
|
},
|
||||||
src: 'less/theme.less',
|
src: 'less/theme.less',
|
||||||
dest: 'dist/css/<%= pkg.name %>-theme.css'
|
dest: 'dist/css/<%= pkg.name %>-theme.css'
|
||||||
|
},
|
||||||
|
docs: {
|
||||||
|
options: {
|
||||||
|
sourceMapURL: 'docs.css.map',
|
||||||
|
sourceMapFilename: 'docs/assets/css/docs.css.map'
|
||||||
|
},
|
||||||
|
src: 'docs/assets/less/docs.less',
|
||||||
|
dest: 'docs/assets/css/docs.css'
|
||||||
|
},
|
||||||
|
docsIe: {
|
||||||
|
options: {
|
||||||
|
sourceMap: false
|
||||||
|
},
|
||||||
|
src: 'docs/assets/less/ie10-viewport-bug-workaround.less',
|
||||||
|
dest: 'docs/assets/css/ie10-viewport-bug-workaround.css'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
autoprefixer: {
|
postcss: {
|
||||||
options: {
|
options: {
|
||||||
browsers: configBridge.config.autoprefixerBrowsers
|
map: {
|
||||||
|
inline: false,
|
||||||
|
sourcesContent: true
|
||||||
|
},
|
||||||
|
processors: [
|
||||||
|
require('autoprefixer')(configBridge.config.autoprefixer)
|
||||||
|
]
|
||||||
},
|
},
|
||||||
core: {
|
core: {
|
||||||
options: {
|
|
||||||
map: true
|
|
||||||
},
|
|
||||||
src: 'dist/css/<%= pkg.name %>.css'
|
src: 'dist/css/<%= pkg.name %>.css'
|
||||||
},
|
},
|
||||||
theme: {
|
theme: {
|
||||||
options: {
|
|
||||||
map: true
|
|
||||||
},
|
|
||||||
src: 'dist/css/<%= pkg.name %>-theme.css'
|
src: 'dist/css/<%= pkg.name %>-theme.css'
|
||||||
},
|
},
|
||||||
docs: {
|
docs: {
|
||||||
src: ['docs/assets/css/src/docs.css']
|
src: 'docs/assets/css/docs.css'
|
||||||
},
|
},
|
||||||
examples: {
|
examples: {
|
||||||
|
options: {
|
||||||
|
map: false
|
||||||
|
},
|
||||||
expand: true,
|
expand: true,
|
||||||
cwd: 'docs/examples/',
|
cwd: 'docs/examples/',
|
||||||
src: ['**/*.css'],
|
src: ['**/*.css'],
|
||||||
@@ -204,76 +216,47 @@ module.exports = function (grunt) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
csslint: {
|
stylelint: {
|
||||||
options: {
|
options: {
|
||||||
csslintrc: 'less/.csslintrc'
|
configFile: 'grunt/.stylelintrc',
|
||||||
|
reportNeedlessDisables: false
|
||||||
},
|
},
|
||||||
dist: [
|
dist: [
|
||||||
'dist/css/bootstrap.css',
|
'less/**/*.less'
|
||||||
'dist/css/bootstrap-theme.css'
|
],
|
||||||
|
docs: [
|
||||||
|
'docs/assets/less/**/*.less'
|
||||||
],
|
],
|
||||||
examples: [
|
examples: [
|
||||||
'docs/examples/**/*.css'
|
'docs/examples/**/*.css'
|
||||||
],
|
]
|
||||||
docs: {
|
|
||||||
options: {
|
|
||||||
ids: false,
|
|
||||||
'overqualified-elements': false
|
|
||||||
},
|
|
||||||
src: 'docs/assets/css/src/docs.css'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
cssmin: {
|
cssmin: {
|
||||||
options: {
|
options: {
|
||||||
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
|
|
||||||
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
|
|
||||||
compatibility: 'ie8',
|
compatibility: 'ie8',
|
||||||
keepSpecialComments: '*',
|
|
||||||
sourceMap: true,
|
sourceMap: true,
|
||||||
sourceMapInlineSources: true,
|
sourceMapInlineSources: true,
|
||||||
advanced: false
|
level: {
|
||||||
|
1: {
|
||||||
|
specialComments: 'all'
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
minifyCore: {
|
core: {
|
||||||
src: 'dist/css/<%= pkg.name %>.css',
|
src: 'dist/css/<%= pkg.name %>.css',
|
||||||
dest: 'dist/css/<%= pkg.name %>.min.css'
|
dest: 'dist/css/<%= pkg.name %>.min.css'
|
||||||
},
|
},
|
||||||
minifyTheme: {
|
theme: {
|
||||||
src: 'dist/css/<%= pkg.name %>-theme.css',
|
src: 'dist/css/<%= pkg.name %>-theme.css',
|
||||||
dest: 'dist/css/<%= pkg.name %>-theme.min.css'
|
dest: 'dist/css/<%= pkg.name %>-theme.min.css'
|
||||||
},
|
},
|
||||||
docs: {
|
docs: {
|
||||||
src: [
|
src: 'docs/assets/css/docs.css',
|
||||||
'docs/assets/css/ie10-viewport-bug-workaround.css',
|
|
||||||
'docs/assets/css/src/pygments-manni.css',
|
|
||||||
'docs/assets/css/src/docs.css'
|
|
||||||
],
|
|
||||||
dest: 'docs/assets/css/docs.min.css'
|
dest: 'docs/assets/css/docs.min.css'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
csscomb: {
|
|
||||||
options: {
|
|
||||||
config: 'less/.csscomb.json'
|
|
||||||
},
|
|
||||||
dist: {
|
|
||||||
expand: true,
|
|
||||||
cwd: 'dist/css/',
|
|
||||||
src: ['*.css', '!*.min.css'],
|
|
||||||
dest: 'dist/css/'
|
|
||||||
},
|
|
||||||
examples: {
|
|
||||||
expand: true,
|
|
||||||
cwd: 'docs/examples/',
|
|
||||||
src: '**/*.css',
|
|
||||||
dest: 'docs/examples/'
|
|
||||||
},
|
|
||||||
docs: {
|
|
||||||
src: 'docs/assets/css/src/docs.css',
|
|
||||||
dest: 'docs/assets/css/src/docs.css'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
copy: {
|
copy: {
|
||||||
fonts: {
|
fonts: {
|
||||||
expand: true,
|
expand: true,
|
||||||
@@ -313,41 +296,6 @@ module.exports = function (grunt) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
htmlmin: {
|
|
||||||
dist: {
|
|
||||||
options: {
|
|
||||||
collapseBooleanAttributes: true,
|
|
||||||
collapseWhitespace: true,
|
|
||||||
conservativeCollapse: true,
|
|
||||||
decodeEntities: false,
|
|
||||||
minifyCSS: {
|
|
||||||
compatibility: 'ie8',
|
|
||||||
keepSpecialComments: 0
|
|
||||||
},
|
|
||||||
minifyJS: true,
|
|
||||||
minifyURLs: false,
|
|
||||||
processConditionalComments: true,
|
|
||||||
removeAttributeQuotes: true,
|
|
||||||
removeComments: true,
|
|
||||||
removeOptionalAttributes: true,
|
|
||||||
removeOptionalTags: true,
|
|
||||||
removeRedundantAttributes: true,
|
|
||||||
removeScriptTypeAttributes: true,
|
|
||||||
removeStyleLinkTypeAttributes: true,
|
|
||||||
removeTagWhitespace: false,
|
|
||||||
sortAttributes: true,
|
|
||||||
sortClassName: true
|
|
||||||
},
|
|
||||||
expand: true,
|
|
||||||
cwd: '_gh_pages',
|
|
||||||
dest: '_gh_pages',
|
|
||||||
src: [
|
|
||||||
'**/*.html',
|
|
||||||
'!examples/**/*.html'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
pug: {
|
pug: {
|
||||||
options: {
|
options: {
|
||||||
pretty: true,
|
pretty: true,
|
||||||
@@ -366,67 +314,40 @@ module.exports = function (grunt) {
|
|||||||
htmllint: {
|
htmllint: {
|
||||||
options: {
|
options: {
|
||||||
ignore: [
|
ignore: [
|
||||||
'Attribute "autocomplete" not allowed on element "button" at this point.',
|
|
||||||
'Attribute "autocomplete" is only allowed when the input type is "color", "date", "datetime", "datetime-local", "email", "hidden", "month", "number", "password", "range", "search", "tel", "text", "time", "url", or "week".',
|
|
||||||
'Element "img" is missing required attribute "src".'
|
'Element "img" is missing required attribute "src".'
|
||||||
]
|
],
|
||||||
|
noLangDetect: true
|
||||||
},
|
},
|
||||||
src: '_gh_pages/**/*.html'
|
src: ['_gh_pages/**/*.html', 'js/tests/**/*.html']
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
src: {
|
src: {
|
||||||
files: '<%= jshint.core.src %>',
|
files: '<%= jshint.core.src %>',
|
||||||
tasks: ['jshint:core', 'qunit', 'concat']
|
tasks: ['jshint:core', 'exec:karma', 'concat']
|
||||||
},
|
},
|
||||||
test: {
|
test: {
|
||||||
files: '<%= jshint.test.src %>',
|
files: '<%= jshint.test.src %>',
|
||||||
tasks: ['jshint:test', 'qunit']
|
tasks: ['jshint:test', 'exec:karma']
|
||||||
},
|
},
|
||||||
less: {
|
less: {
|
||||||
files: 'less/**/*.less',
|
files: 'less/**/*.less',
|
||||||
tasks: 'less'
|
tasks: ['less', 'copy']
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
docs: {
|
||||||
'saucelabs-qunit': {
|
files: 'docs/assets/less/**/*.less',
|
||||||
all: {
|
tasks: ['less']
|
||||||
options: {
|
|
||||||
build: process.env.TRAVIS_JOB_ID,
|
|
||||||
throttled: 10,
|
|
||||||
maxRetries: 3,
|
|
||||||
maxPollRetries: 4,
|
|
||||||
urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
|
|
||||||
browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
exec: {
|
exec: {
|
||||||
npmUpdate: {
|
browserstack: {
|
||||||
command: 'npm update'
|
command: 'cross-env BROWSER=true karma start grunt/karma.conf.js'
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
karma: {
|
||||||
compress: {
|
command: 'karma start grunt/karma.conf.js'
|
||||||
main: {
|
|
||||||
options: {
|
|
||||||
archive: 'bootstrap-<%= pkg.version %>-dist.zip',
|
|
||||||
mode: 'zip',
|
|
||||||
level: 9,
|
|
||||||
pretty: true
|
|
||||||
},
|
|
||||||
files: [
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'dist/',
|
|
||||||
src: ['**'],
|
|
||||||
dest: 'bootstrap-<%= pkg.version %>-dist'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -441,16 +362,14 @@ module.exports = function (grunt) {
|
|||||||
return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
|
return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
|
||||||
};
|
};
|
||||||
var isUndefOrNonZero = function (val) {
|
var isUndefOrNonZero = function (val) {
|
||||||
return val === undefined || val !== '0';
|
return typeof val === 'undefined' || val !== '0';
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test task.
|
// Test task.
|
||||||
var testSubtasks = [];
|
var testSubtasks = [];
|
||||||
// Skip core tests if running a different subset of the test suite
|
// Skip core tests if running a different subset of the test suite
|
||||||
if (runSubset('core') &&
|
if (runSubset('core')) {
|
||||||
// Skip core tests if this is a Savage build
|
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'stylelint:dist', 'test-js', 'docs']);
|
||||||
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
|
|
||||||
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
|
|
||||||
}
|
}
|
||||||
// Skip HTML validation if running a different subset of the test suite
|
// Skip HTML validation if running a different subset of the test suite
|
||||||
if (runSubset('validate-html') &&
|
if (runSubset('validate-html') &&
|
||||||
@@ -458,24 +377,23 @@ module.exports = function (grunt) {
|
|||||||
isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
|
isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
|
||||||
testSubtasks.push('validate-html');
|
testSubtasks.push('validate-html');
|
||||||
}
|
}
|
||||||
// Only run Sauce Labs tests if there's a Sauce access key
|
// Only run BrowserStack tests if there's a BrowserStack access key
|
||||||
if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
|
if (typeof process.env.BROWSER_STACK_USERNAME !== 'undefined' &&
|
||||||
// Skip Sauce if running a different subset of the test suite
|
// Skip BrowserStack if running a different subset of the test suite
|
||||||
runSubset('sauce-js-unit') &&
|
runSubset('browserstack') &&
|
||||||
// Skip Sauce on Travis when [skip sauce] is in the commit message
|
// Skip BrowserStack on Travis when [skip browserstack] is in the commit message
|
||||||
isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
|
isUndefOrNonZero(process.env.TWBS_DO_BROWSERSTACK)) {
|
||||||
testSubtasks.push('connect');
|
testSubtasks.push('exec:browserstack');
|
||||||
testSubtasks.push('saucelabs-qunit');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grunt.registerTask('test', testSubtasks);
|
grunt.registerTask('test', testSubtasks);
|
||||||
grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
|
grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'exec:karma']);
|
||||||
|
|
||||||
// JS distribution task.
|
// JS distribution task.
|
||||||
grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
|
grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
|
||||||
|
|
||||||
// CSS distribution task.
|
// CSS distribution task.
|
||||||
grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']);
|
grunt.registerTask('dist-css', ['less:core', 'less:theme', 'postcss:core', 'postcss:theme', 'cssmin:core', 'cssmin:theme']);
|
||||||
grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
|
|
||||||
|
|
||||||
// Full distribution task.
|
// Full distribution task.
|
||||||
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
|
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
|
||||||
@@ -483,7 +401,9 @@ module.exports = function (grunt) {
|
|||||||
// Default task.
|
// Default task.
|
||||||
grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
|
grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
|
||||||
|
|
||||||
grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });
|
grunt.registerTask('build-glyphicons-data', function () {
|
||||||
|
generateGlyphiconsData.call(this, grunt);
|
||||||
|
});
|
||||||
|
|
||||||
// task for building customizer
|
// task for building customizer
|
||||||
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
|
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
|
||||||
@@ -494,18 +414,17 @@ module.exports = function (grunt) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
|
grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
|
||||||
var srcFiles = grunt.config.get('concat.bootstrap.src');
|
var srcFiles = grunt.config.get('concat.core.src');
|
||||||
var destFilepath = 'dist/js/npm.js';
|
var destFilepath = 'dist/js/npm.js';
|
||||||
generateCommonJSModule(grunt, srcFiles, destFilepath);
|
generateCommonJSModule(grunt, srcFiles, destFilepath);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Docs task.
|
// Docs task.
|
||||||
grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
|
grunt.registerTask('docs-css', ['less:docs', 'less:docsIe', 'postcss:docs', 'postcss:examples', 'cssmin:docs']);
|
||||||
grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
|
grunt.registerTask('lint-docs-css', ['stylelint:docs', 'stylelint:examples']);
|
||||||
grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
|
grunt.registerTask('docs-js', ['uglify:docs', 'uglify:customize']);
|
||||||
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
|
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
|
||||||
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
|
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
|
||||||
grunt.registerTask('docs-github', ['jekyll:github', 'htmlmin']);
|
|
||||||
|
|
||||||
grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress']);
|
grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github']);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Before opening an issue:
|
Before opening an issue:
|
||||||
|
|
||||||
- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue)
|
- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue)
|
||||||
- [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems
|
- [Validate](https://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems
|
||||||
- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
|
- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
|
||||||
- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
|
- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ When reporting a bug, include:
|
|||||||
|
|
||||||
- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
|
- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
|
||||||
- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
|
- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
|
||||||
- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com)
|
- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com/)
|
||||||
|
|
||||||
When suggesting a feature, include:
|
When suggesting a feature, include:
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2011-2016 Twitter, Inc.
|
Copyright (c) 2011-2019 Twitter, Inc.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
# [Bootstrap](http://getbootstrap.com)
|
# [Bootstrap](https://getbootstrap.com/)
|
||||||
|
|
||||||
[](https://bootstrap-slack.herokuapp.com)
|
[](https://bootstrap-slack.herokuapp.com/)
|
||||||

|

|
||||||
[](https://www.npmjs.com/package/bootstrap)
|
[](https://www.npmjs.com/package/bootstrap)
|
||||||
[](https://travis-ci.org/twbs/bootstrap)
|
[](https://travis-ci.org/twbs/bootstrap)
|
||||||
[](https://david-dm.org/twbs/bootstrap#info=devDependencies)
|
[](https://david-dm.org/twbs/bootstrap#info=devDependencies)
|
||||||
[](https://www.nuget.org/packages/Bootstrap)
|
[](https://www.nuget.org/packages/Bootstrap)
|
||||||
[](https://saucelabs.com/u/bootstrap)
|
|
||||||
|
|
||||||
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community.
|
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community.
|
||||||
|
|
||||||
To get started, check out <http://getbootstrap.com>!
|
To get started, check out <https://getbootstrap.com/>!
|
||||||
|
|
||||||
|
|
||||||
## Table of contents
|
## Table of contents
|
||||||
@@ -22,6 +21,7 @@ To get started, check out <http://getbootstrap.com>!
|
|||||||
* [Community](#community)
|
* [Community](#community)
|
||||||
* [Versioning](#versioning)
|
* [Versioning](#versioning)
|
||||||
* [Creators](#creators)
|
* [Creators](#creators)
|
||||||
|
* [Thanks](#thanks)
|
||||||
* [Copyright and license](#copyright-and-license)
|
* [Copyright and license](#copyright-and-license)
|
||||||
|
|
||||||
|
|
||||||
@@ -29,14 +29,14 @@ To get started, check out <http://getbootstrap.com>!
|
|||||||
|
|
||||||
Several quick start options are available:
|
Several quick start options are available:
|
||||||
|
|
||||||
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.7.zip).
|
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.4.1.zip).
|
||||||
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
|
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
|
||||||
* Install with [Bower](http://bower.io): `bower install bootstrap`.
|
* Install with [Bower](https://bower.io/): `bower install bootstrap`.
|
||||||
* Install with [npm](https://www.npmjs.com): `npm install bootstrap@3`.
|
* Install with [npm](https://www.npmjs.com/): `npm install bootstrap@3`.
|
||||||
* Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`.
|
* Install with [Meteor](https://www.meteor.com/): `meteor add twbs:bootstrap`.
|
||||||
* Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`.
|
* Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap`.
|
||||||
|
|
||||||
Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
|
Read the [Getting started page](https://getbootstrap.com/docs/3.4/getting-started/) for information on the framework contents, templates and examples, and more.
|
||||||
|
|
||||||
### What's included
|
### What's included
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ bootstrap/
|
|||||||
└── glyphicons-halflings-regular.woff2
|
└── glyphicons-halflings-regular.woff2
|
||||||
```
|
```
|
||||||
|
|
||||||
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developer.chrome.com/devtools/docs/css-preprocessors) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.
|
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.
|
||||||
|
|
||||||
|
|
||||||
## Bugs and feature requests
|
## Bugs and feature requests
|
||||||
@@ -76,20 +76,20 @@ Note that **feature requests must target [Bootstrap v4](https://github.com/twbs/
|
|||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://getbootstrap.com>. The docs may also be run locally.
|
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally.
|
||||||
|
|
||||||
### Running documentation locally
|
### Running documentation locally
|
||||||
|
|
||||||
1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) and other Ruby dependencies with `bundle install`.
|
1. If necessary, [install Jekyll](https://jekyllrb.com/docs/installation/) and other Ruby dependencies with `bundle install`.
|
||||||
**Note for Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems.
|
**Note for Windows users:** Read [this guide](https://jekyllrb.com/docs/installation/windows/) to get Jekyll up and running without problems.
|
||||||
2. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line.
|
2. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line.
|
||||||
4. Open `http://localhost:9001` in your browser, and voilà.
|
4. Open `http://localhost:9001` in your browser, and voilà.
|
||||||
|
|
||||||
Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).
|
Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/).
|
||||||
|
|
||||||
### Documentation for previous releases
|
### Documentation for previous releases
|
||||||
|
|
||||||
Documentation for v2.3.2 has been made available for the time being at <http://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3.
|
Documentation for v2.3.2 has been made available for the time being at <https://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3.
|
||||||
|
|
||||||
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
|
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ Moreover, if your pull request contains JavaScript patches or features, you must
|
|||||||
|
|
||||||
**Bootstrap v3 is now closed off to new features.** It has gone into maintenance mode so that we can focus our efforts on [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev), the future of the framework. Pull requests which add new features (rather than fix bugs) should target [Bootstrap v4 (the `v4-dev` git branch)](https://github.com/twbs/bootstrap/tree/v4-dev) instead.
|
**Bootstrap v3 is now closed off to new features.** It has gone into maintenance mode so that we can focus our efforts on [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev), the future of the framework. Pull requests which add new features (rather than fix bugs) should target [Bootstrap v4 (the `v4-dev` git branch)](https://github.com/twbs/bootstrap/tree/v4-dev) instead.
|
||||||
|
|
||||||
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
|
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <https://editorconfig.org/>.
|
||||||
|
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
@@ -110,18 +110,25 @@ Editor preferences are available in the [editor config](https://github.com/twbs/
|
|||||||
Get updates on Bootstrap's development and chat with the project maintainers and community members.
|
Get updates on Bootstrap's development and chat with the project maintainers and community members.
|
||||||
|
|
||||||
* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
||||||
* Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
|
* Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/).
|
||||||
* Join [the official Slack room](https://bootstrap-slack.herokuapp.com).
|
* Join [the official Slack room](https://bootstrap-slack.herokuapp.com/).
|
||||||
* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
|
* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
|
||||||
* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
|
* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
|
||||||
* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
|
* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability.
|
||||||
|
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
|
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
|
||||||
|
|
||||||
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
|
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release.
|
||||||
|
|
||||||
|
|
||||||
|
## Thanks
|
||||||
|
|
||||||
|
<img src="https://live.browserstack.com/images/opensource/browserstack-logo.svg" alt="BrowserStack Logo" width="490" height="106">
|
||||||
|
|
||||||
|
Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers!
|
||||||
|
|
||||||
|
|
||||||
## Creators
|
## Creators
|
||||||
@@ -139,4 +146,4 @@ See [the Releases section of our GitHub project](https://github.com/twbs/bootstr
|
|||||||
|
|
||||||
## Copyright and license
|
## Copyright and license
|
||||||
|
|
||||||
Code and documentation copyright 2011-2016 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).
|
Code and documentation copyright 2011-2019 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"framework",
|
"framework",
|
||||||
"web"
|
"web"
|
||||||
],
|
],
|
||||||
"homepage": "http://getbootstrap.com",
|
"homepage": "https://getbootstrap.com/",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"moduleType": "globals",
|
"moduleType": "globals",
|
||||||
"main": [
|
"main": [
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*!
|
/*!
|
||||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
* Bootstrap v3.4.1 (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
*/
|
*/
|
||||||
.btn-default,
|
.btn-default,
|
||||||
@@ -9,9 +9,9 @@
|
|||||||
.btn-info,
|
.btn-info,
|
||||||
.btn-warning,
|
.btn-warning,
|
||||||
.btn-danger {
|
.btn-danger {
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||||
}
|
}
|
||||||
.btn-default:active,
|
.btn-default:active,
|
||||||
.btn-primary:active,
|
.btn-primary:active,
|
||||||
@@ -25,8 +25,8 @@
|
|||||||
.btn-info.active,
|
.btn-info.active,
|
||||||
.btn-warning.active,
|
.btn-warning.active,
|
||||||
.btn-danger.active {
|
.btn-danger.active {
|
||||||
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||||
}
|
}
|
||||||
.btn-default.disabled,
|
.btn-default.disabled,
|
||||||
.btn-primary.disabled,
|
.btn-primary.disabled,
|
||||||
@@ -62,7 +62,6 @@ fieldset[disabled] .btn-danger {
|
|||||||
background-image: none;
|
background-image: none;
|
||||||
}
|
}
|
||||||
.btn-default {
|
.btn-default {
|
||||||
text-shadow: 0 1px 0 #fff;
|
|
||||||
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||||
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
||||||
@@ -71,6 +70,7 @@ fieldset[disabled] .btn-danger {
|
|||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
border-color: #dbdbdb;
|
border-color: #dbdbdb;
|
||||||
|
text-shadow: 0 1px 0 #fff;
|
||||||
border-color: #ccc;
|
border-color: #ccc;
|
||||||
}
|
}
|
||||||
.btn-default:hover,
|
.btn-default:hover,
|
||||||
@@ -311,41 +311,41 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
}
|
}
|
||||||
.thumbnail,
|
.thumbnail,
|
||||||
.img-thumbnail {
|
.img-thumbnail {
|
||||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||||
}
|
}
|
||||||
.dropdown-menu > li > a:hover,
|
.dropdown-menu > li > a:hover,
|
||||||
.dropdown-menu > li > a:focus {
|
.dropdown-menu > li > a:focus {
|
||||||
background-color: #e8e8e8;
|
|
||||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
|
background-color: #e8e8e8;
|
||||||
}
|
}
|
||||||
.dropdown-menu > .active > a,
|
.dropdown-menu > .active > a,
|
||||||
.dropdown-menu > .active > a:hover,
|
.dropdown-menu > .active > a:hover,
|
||||||
.dropdown-menu > .active > a:focus {
|
.dropdown-menu > .active > a:focus {
|
||||||
background-color: #2e6da4;
|
|
||||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
|
background-color: #2e6da4;
|
||||||
}
|
}
|
||||||
.navbar-default {
|
.navbar-default {
|
||||||
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
|
||||||
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
|
||||||
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
|
background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
||||||
}
|
}
|
||||||
.navbar-default .navbar-nav > .open > a,
|
.navbar-default .navbar-nav > .open > a,
|
||||||
.navbar-default .navbar-nav > .active > a {
|
.navbar-default .navbar-nav > .active > a {
|
||||||
@@ -355,12 +355,12 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
|
||||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
|
||||||
}
|
}
|
||||||
.navbar-brand,
|
.navbar-brand,
|
||||||
.navbar-nav > li > a {
|
.navbar-nav > li > a {
|
||||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
|
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
|
||||||
}
|
}
|
||||||
.navbar-inverse {
|
.navbar-inverse {
|
||||||
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||||
@@ -368,8 +368,8 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
||||||
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
.navbar-inverse .navbar-nav > .open > a,
|
.navbar-inverse .navbar-nav > .open > a,
|
||||||
@@ -380,12 +380,12 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
|
||||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
|
||||||
}
|
}
|
||||||
.navbar-inverse .navbar-brand,
|
.navbar-inverse .navbar-brand,
|
||||||
.navbar-inverse .navbar-nav > li > a {
|
.navbar-inverse .navbar-nav > li > a {
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
|
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||||
}
|
}
|
||||||
.navbar-static-top,
|
.navbar-static-top,
|
||||||
.navbar-fixed-top,
|
.navbar-fixed-top,
|
||||||
@@ -406,9 +406,9 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.alert {
|
.alert {
|
||||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
|
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
|
||||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
}
|
}
|
||||||
.alert-success {
|
.alert-success {
|
||||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||||
@@ -495,14 +495,14 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
}
|
}
|
||||||
.progress-bar-striped {
|
.progress-bar-striped {
|
||||||
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
||||||
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
||||||
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
||||||
}
|
}
|
||||||
.list-group {
|
.list-group {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||||
}
|
}
|
||||||
.list-group-item.active,
|
.list-group-item.active,
|
||||||
.list-group-item.active:hover,
|
.list-group-item.active:hover,
|
||||||
@@ -522,8 +522,8 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
}
|
}
|
||||||
.panel {
|
.panel {
|
||||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
}
|
}
|
||||||
.panel-default > .panel-heading {
|
.panel-default > .panel-heading {
|
||||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||||
@@ -581,7 +581,7 @@ fieldset[disabled] .btn-danger.active {
|
|||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
border-color: #dcdcdc;
|
border-color: #dcdcdc;
|
||||||
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
/*# sourceMappingURL=bootstrap-theme.css.map */
|
/*# sourceMappingURL=bootstrap-theme.css.map */
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
|||||||
/*!
|
/*!
|
||||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
* Bootstrap v3.4.1 (https://getbootstrap.com/)
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under the MIT license
|
* Licensed under the MIT license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -17,10 +17,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: transition.js v3.3.7
|
* Bootstrap: transition.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#transitions
|
* https://getbootstrap.com/docs/3.4/javascript/#transitions
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
+function ($) {
|
+function ($) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
// CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
function transitionEnd() {
|
function transitionEnd() {
|
||||||
@@ -50,7 +50,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
return false // explicit for ie8 ( ._.)
|
return false // explicit for ie8 ( ._.)
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://blog.alexmaccaw.com/css-transitions
|
// https://blog.alexmaccaw.com/css-transitions
|
||||||
$.fn.emulateTransitionEnd = function (duration) {
|
$.fn.emulateTransitionEnd = function (duration) {
|
||||||
var called = false
|
var called = false
|
||||||
var $el = this
|
var $el = this
|
||||||
@@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: alert.js v3.3.7
|
* Bootstrap: alert.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#alerts
|
* https://getbootstrap.com/docs/3.4/javascript/#alerts
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
$(el).on('click', dismiss, this.close)
|
$(el).on('click', dismiss, this.close)
|
||||||
}
|
}
|
||||||
|
|
||||||
Alert.VERSION = '3.3.7'
|
Alert.VERSION = '3.4.1'
|
||||||
|
|
||||||
Alert.TRANSITION_DURATION = 150
|
Alert.TRANSITION_DURATION = 150
|
||||||
|
|
||||||
@@ -109,7 +109,8 @@ if (typeof jQuery === 'undefined') {
|
|||||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
||||||
}
|
}
|
||||||
|
|
||||||
var $parent = $(selector === '#' ? [] : selector)
|
selector = selector === '#' ? [] : selector
|
||||||
|
var $parent = $(document).find(selector)
|
||||||
|
|
||||||
if (e) e.preventDefault()
|
if (e) e.preventDefault()
|
||||||
|
|
||||||
@@ -172,10 +173,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: button.js v3.3.7
|
* Bootstrap: button.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#buttons
|
* https://getbootstrap.com/docs/3.4/javascript/#buttons
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -192,7 +193,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
}
|
}
|
||||||
|
|
||||||
Button.VERSION = '3.3.7'
|
Button.VERSION = '3.4.1'
|
||||||
|
|
||||||
Button.DEFAULTS = {
|
Button.DEFAULTS = {
|
||||||
loadingText: 'loading...'
|
loadingText: 'loading...'
|
||||||
@@ -298,10 +299,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: carousel.js v3.3.7
|
* Bootstrap: carousel.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#carousel
|
* https://getbootstrap.com/docs/3.4/javascript/#carousel
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -329,7 +330,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.VERSION = '3.3.7'
|
Carousel.VERSION = '3.4.1'
|
||||||
|
|
||||||
Carousel.TRANSITION_DURATION = 600
|
Carousel.TRANSITION_DURATION = 600
|
||||||
|
|
||||||
@@ -443,7 +444,9 @@ if (typeof jQuery === 'undefined') {
|
|||||||
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
|
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
|
||||||
if ($.support.transition && this.$element.hasClass('slide')) {
|
if ($.support.transition && this.$element.hasClass('slide')) {
|
||||||
$next.addClass(type)
|
$next.addClass(type)
|
||||||
|
if (typeof $next === 'object' && $next.length) {
|
||||||
$next[0].offsetWidth // force reflow
|
$next[0].offsetWidth // force reflow
|
||||||
|
}
|
||||||
$active.addClass(direction)
|
$active.addClass(direction)
|
||||||
$next.addClass(direction)
|
$next.addClass(direction)
|
||||||
$active
|
$active
|
||||||
@@ -505,10 +508,17 @@ if (typeof jQuery === 'undefined') {
|
|||||||
// =================
|
// =================
|
||||||
|
|
||||||
var clickHandler = function (e) {
|
var clickHandler = function (e) {
|
||||||
var href
|
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
var href = $this.attr('href')
|
||||||
|
if (href) {
|
||||||
|
href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
|
||||||
|
}
|
||||||
|
|
||||||
|
var target = $this.attr('data-target') || href
|
||||||
|
var $target = $(document).find(target)
|
||||||
|
|
||||||
if (!$target.hasClass('carousel')) return
|
if (!$target.hasClass('carousel')) return
|
||||||
|
|
||||||
var options = $.extend({}, $target.data(), $this.data())
|
var options = $.extend({}, $target.data(), $this.data())
|
||||||
var slideIndex = $this.attr('data-slide-to')
|
var slideIndex = $this.attr('data-slide-to')
|
||||||
if (slideIndex) options.interval = false
|
if (slideIndex) options.interval = false
|
||||||
@@ -536,10 +546,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: collapse.js v3.3.7
|
* Bootstrap: collapse.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#collapse
|
* https://getbootstrap.com/docs/3.4/javascript/#collapse
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -567,7 +577,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
if (this.options.toggle) this.toggle()
|
if (this.options.toggle) this.toggle()
|
||||||
}
|
}
|
||||||
|
|
||||||
Collapse.VERSION = '3.3.7'
|
Collapse.VERSION = '3.4.1'
|
||||||
|
|
||||||
Collapse.TRANSITION_DURATION = 350
|
Collapse.TRANSITION_DURATION = 350
|
||||||
|
|
||||||
@@ -674,7 +684,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Collapse.prototype.getParent = function () {
|
Collapse.prototype.getParent = function () {
|
||||||
return $(this.options.parent)
|
return $(document).find(this.options.parent)
|
||||||
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
|
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
|
||||||
.each($.proxy(function (i, element) {
|
.each($.proxy(function (i, element) {
|
||||||
var $element = $(element)
|
var $element = $(element)
|
||||||
@@ -697,7 +707,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
var target = $trigger.attr('data-target')
|
var target = $trigger.attr('data-target')
|
||||||
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
|
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
|
||||||
|
|
||||||
return $(target)
|
return $(document).find(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -749,10 +759,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: dropdown.js v3.3.7
|
* Bootstrap: dropdown.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#dropdowns
|
* https://getbootstrap.com/docs/3.4/javascript/#dropdowns
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -769,7 +779,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
$(element).on('click.bs.dropdown', this.toggle)
|
$(element).on('click.bs.dropdown', this.toggle)
|
||||||
}
|
}
|
||||||
|
|
||||||
Dropdown.VERSION = '3.3.7'
|
Dropdown.VERSION = '3.4.1'
|
||||||
|
|
||||||
function getParent($this) {
|
function getParent($this) {
|
||||||
var selector = $this.attr('data-target')
|
var selector = $this.attr('data-target')
|
||||||
@@ -779,7 +789,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
||||||
}
|
}
|
||||||
|
|
||||||
var $parent = selector && $(selector)
|
var $parent = selector !== '#' ? $(document).find(selector) : null
|
||||||
|
|
||||||
return $parent && $parent.length ? $parent : $this.parent()
|
return $parent && $parent.length ? $parent : $this.parent()
|
||||||
}
|
}
|
||||||
@@ -915,10 +925,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: modal.js v3.3.7
|
* Bootstrap: modal.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#modals
|
* https://getbootstrap.com/docs/3.4/javascript/#modals
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -939,6 +949,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
this.originalBodyPad = null
|
this.originalBodyPad = null
|
||||||
this.scrollbarWidth = 0
|
this.scrollbarWidth = 0
|
||||||
this.ignoreBackdropClick = false
|
this.ignoreBackdropClick = false
|
||||||
|
this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
|
||||||
|
|
||||||
if (this.options.remote) {
|
if (this.options.remote) {
|
||||||
this.$element
|
this.$element
|
||||||
@@ -949,7 +960,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.VERSION = '3.3.7'
|
Modal.VERSION = '3.4.1'
|
||||||
|
|
||||||
Modal.TRANSITION_DURATION = 300
|
Modal.TRANSITION_DURATION = 300
|
||||||
Modal.BACKDROP_TRANSITION_DURATION = 150
|
Modal.BACKDROP_TRANSITION_DURATION = 150
|
||||||
@@ -1185,11 +1196,26 @@ if (typeof jQuery === 'undefined') {
|
|||||||
Modal.prototype.setScrollbar = function () {
|
Modal.prototype.setScrollbar = function () {
|
||||||
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
||||||
this.originalBodyPad = document.body.style.paddingRight || ''
|
this.originalBodyPad = document.body.style.paddingRight || ''
|
||||||
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
var scrollbarWidth = this.scrollbarWidth
|
||||||
|
if (this.bodyIsOverflowing) {
|
||||||
|
this.$body.css('padding-right', bodyPad + scrollbarWidth)
|
||||||
|
$(this.fixedContent).each(function (index, element) {
|
||||||
|
var actualPadding = element.style.paddingRight
|
||||||
|
var calculatedPadding = $(element).css('padding-right')
|
||||||
|
$(element)
|
||||||
|
.data('padding-right', actualPadding)
|
||||||
|
.css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.resetScrollbar = function () {
|
Modal.prototype.resetScrollbar = function () {
|
||||||
this.$body.css('padding-right', this.originalBodyPad)
|
this.$body.css('padding-right', this.originalBodyPad)
|
||||||
|
$(this.fixedContent).each(function (index, element) {
|
||||||
|
var padding = $(element).data('padding-right')
|
||||||
|
$(element).removeData('padding-right')
|
||||||
|
element.style.paddingRight = padding ? padding : ''
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.measureScrollbar = function () { // thx walsh
|
Modal.prototype.measureScrollbar = function () { // thx walsh
|
||||||
@@ -1238,7 +1264,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var href = $this.attr('href')
|
var href = $this.attr('href')
|
||||||
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
|
var target = $this.attr('data-target') ||
|
||||||
|
(href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
||||||
|
|
||||||
|
var $target = $(document).find(target)
|
||||||
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
|
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
|
||||||
|
|
||||||
if ($this.is('a')) e.preventDefault()
|
if ($this.is('a')) e.preventDefault()
|
||||||
@@ -1255,18 +1284,148 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: tooltip.js v3.3.7
|
* Bootstrap: tooltip.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#tooltip
|
* https://getbootstrap.com/docs/3.4/javascript/#tooltip
|
||||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
|
|
||||||
+function ($) {
|
+function ($) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
|
||||||
|
|
||||||
|
var uriAttrs = [
|
||||||
|
'background',
|
||||||
|
'cite',
|
||||||
|
'href',
|
||||||
|
'itemtype',
|
||||||
|
'longdesc',
|
||||||
|
'poster',
|
||||||
|
'src',
|
||||||
|
'xlink:href'
|
||||||
|
]
|
||||||
|
|
||||||
|
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
|
||||||
|
|
||||||
|
var DefaultWhitelist = {
|
||||||
|
// Global attributes allowed on any supplied element below.
|
||||||
|
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
|
||||||
|
a: ['target', 'href', 'title', 'rel'],
|
||||||
|
area: [],
|
||||||
|
b: [],
|
||||||
|
br: [],
|
||||||
|
col: [],
|
||||||
|
code: [],
|
||||||
|
div: [],
|
||||||
|
em: [],
|
||||||
|
hr: [],
|
||||||
|
h1: [],
|
||||||
|
h2: [],
|
||||||
|
h3: [],
|
||||||
|
h4: [],
|
||||||
|
h5: [],
|
||||||
|
h6: [],
|
||||||
|
i: [],
|
||||||
|
img: ['src', 'alt', 'title', 'width', 'height'],
|
||||||
|
li: [],
|
||||||
|
ol: [],
|
||||||
|
p: [],
|
||||||
|
pre: [],
|
||||||
|
s: [],
|
||||||
|
small: [],
|
||||||
|
span: [],
|
||||||
|
sub: [],
|
||||||
|
sup: [],
|
||||||
|
strong: [],
|
||||||
|
u: [],
|
||||||
|
ul: []
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A pattern that recognizes a commonly useful subset of URLs that are safe.
|
||||||
|
*
|
||||||
|
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
||||||
|
*/
|
||||||
|
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
||||||
|
*
|
||||||
|
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
||||||
|
*/
|
||||||
|
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
|
||||||
|
|
||||||
|
function allowedAttribute(attr, allowedAttributeList) {
|
||||||
|
var attrName = attr.nodeName.toLowerCase()
|
||||||
|
|
||||||
|
if ($.inArray(attrName, allowedAttributeList) !== -1) {
|
||||||
|
if ($.inArray(attrName, uriAttrs) !== -1) {
|
||||||
|
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var regExp = $(allowedAttributeList).filter(function (index, value) {
|
||||||
|
return value instanceof RegExp
|
||||||
|
})
|
||||||
|
|
||||||
|
// Check if a regular expression validates the attribute.
|
||||||
|
for (var i = 0, l = regExp.length; i < l; i++) {
|
||||||
|
if (attrName.match(regExp[i])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
|
||||||
|
if (unsafeHtml.length === 0) {
|
||||||
|
return unsafeHtml
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sanitizeFn && typeof sanitizeFn === 'function') {
|
||||||
|
return sanitizeFn(unsafeHtml)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE 8 and below don't support createHTMLDocument
|
||||||
|
if (!document.implementation || !document.implementation.createHTMLDocument) {
|
||||||
|
return unsafeHtml
|
||||||
|
}
|
||||||
|
|
||||||
|
var createdDocument = document.implementation.createHTMLDocument('sanitization')
|
||||||
|
createdDocument.body.innerHTML = unsafeHtml
|
||||||
|
|
||||||
|
var whitelistKeys = $.map(whiteList, function (el, i) { return i })
|
||||||
|
var elements = $(createdDocument.body).find('*')
|
||||||
|
|
||||||
|
for (var i = 0, len = elements.length; i < len; i++) {
|
||||||
|
var el = elements[i]
|
||||||
|
var elName = el.nodeName.toLowerCase()
|
||||||
|
|
||||||
|
if ($.inArray(elName, whitelistKeys) === -1) {
|
||||||
|
el.parentNode.removeChild(el)
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var attributeList = $.map(el.attributes, function (el) { return el })
|
||||||
|
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
|
||||||
|
|
||||||
|
for (var j = 0, len2 = attributeList.length; j < len2; j++) {
|
||||||
|
if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
|
||||||
|
el.removeAttribute(attributeList[j].nodeName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return createdDocument.body.innerHTML
|
||||||
|
}
|
||||||
|
|
||||||
// TOOLTIP PUBLIC CLASS DEFINITION
|
// TOOLTIP PUBLIC CLASS DEFINITION
|
||||||
// ===============================
|
// ===============================
|
||||||
|
|
||||||
@@ -1282,7 +1441,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
this.init('tooltip', element, options)
|
this.init('tooltip', element, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.VERSION = '3.3.7'
|
Tooltip.VERSION = '3.4.1'
|
||||||
|
|
||||||
Tooltip.TRANSITION_DURATION = 150
|
Tooltip.TRANSITION_DURATION = 150
|
||||||
|
|
||||||
@@ -1299,7 +1458,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
viewport: {
|
viewport: {
|
||||||
selector: 'body',
|
selector: 'body',
|
||||||
padding: 0
|
padding: 0
|
||||||
}
|
},
|
||||||
|
sanitize : true,
|
||||||
|
sanitizeFn : null,
|
||||||
|
whiteList : DefaultWhitelist
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.init = function (type, element, options) {
|
Tooltip.prototype.init = function (type, element, options) {
|
||||||
@@ -1307,7 +1469,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
this.type = type
|
this.type = type
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.options = this.getOptions(options)
|
this.options = this.getOptions(options)
|
||||||
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
|
this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
|
||||||
this.inState = { click: false, hover: false, focus: false }
|
this.inState = { click: false, hover: false, focus: false }
|
||||||
|
|
||||||
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
|
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
|
||||||
@@ -1340,7 +1502,15 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.getOptions = function (options) {
|
Tooltip.prototype.getOptions = function (options) {
|
||||||
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
|
var dataAttributes = this.$element.data()
|
||||||
|
|
||||||
|
for (var dataAttr in dataAttributes) {
|
||||||
|
if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
|
||||||
|
delete dataAttributes[dataAttr]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
options = $.extend({}, this.getDefaults(), dataAttributes, options)
|
||||||
|
|
||||||
if (options.delay && typeof options.delay == 'number') {
|
if (options.delay && typeof options.delay == 'number') {
|
||||||
options.delay = {
|
options.delay = {
|
||||||
@@ -1349,6 +1519,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.sanitize) {
|
||||||
|
options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
|
||||||
|
}
|
||||||
|
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1460,7 +1634,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
.addClass(placement)
|
.addClass(placement)
|
||||||
.data('bs.' + this.type, this)
|
.data('bs.' + this.type, this)
|
||||||
|
|
||||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
|
||||||
this.$element.trigger('inserted.bs.' + this.type)
|
this.$element.trigger('inserted.bs.' + this.type)
|
||||||
|
|
||||||
var pos = this.getPosition()
|
var pos = this.getPosition()
|
||||||
@@ -1562,7 +1736,16 @@ if (typeof jQuery === 'undefined') {
|
|||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
var title = this.getTitle()
|
var title = this.getTitle()
|
||||||
|
|
||||||
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
if (this.options.html) {
|
||||||
|
if (this.options.sanitize) {
|
||||||
|
title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
|
||||||
|
}
|
||||||
|
|
||||||
|
$tip.find('.tooltip-inner').html(title)
|
||||||
|
} else {
|
||||||
|
$tip.find('.tooltip-inner').text(title)
|
||||||
|
}
|
||||||
|
|
||||||
$tip.removeClass('fade in top bottom left right')
|
$tip.removeClass('fade in top bottom left right')
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1743,6 +1926,9 @@ if (typeof jQuery === 'undefined') {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
|
||||||
|
return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
|
||||||
|
}
|
||||||
|
|
||||||
// TOOLTIP PLUGIN DEFINITION
|
// TOOLTIP PLUGIN DEFINITION
|
||||||
// =========================
|
// =========================
|
||||||
@@ -1776,10 +1962,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: popover.js v3.3.7
|
* Bootstrap: popover.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#popovers
|
* https://getbootstrap.com/docs/3.4/javascript/#popovers
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -1796,7 +1982,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
|
|
||||||
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
||||||
|
|
||||||
Popover.VERSION = '3.3.7'
|
Popover.VERSION = '3.4.1'
|
||||||
|
|
||||||
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
||||||
placement: 'right',
|
placement: 'right',
|
||||||
@@ -1822,10 +2008,25 @@ if (typeof jQuery === 'undefined') {
|
|||||||
var title = this.getTitle()
|
var title = this.getTitle()
|
||||||
var content = this.getContent()
|
var content = this.getContent()
|
||||||
|
|
||||||
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
if (this.options.html) {
|
||||||
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
|
var typeContent = typeof content
|
||||||
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
|
||||||
|
if (this.options.sanitize) {
|
||||||
|
title = this.sanitizeHtml(title)
|
||||||
|
|
||||||
|
if (typeContent === 'string') {
|
||||||
|
content = this.sanitizeHtml(content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tip.find('.popover-title').html(title)
|
||||||
|
$tip.find('.popover-content').children().detach().end()[
|
||||||
|
typeContent === 'string' ? 'html' : 'append'
|
||||||
](content)
|
](content)
|
||||||
|
} else {
|
||||||
|
$tip.find('.popover-title').text(title)
|
||||||
|
$tip.find('.popover-content').children().detach().end().text(content)
|
||||||
|
}
|
||||||
|
|
||||||
$tip.removeClass('fade top bottom left right in')
|
$tip.removeClass('fade top bottom left right in')
|
||||||
|
|
||||||
@@ -1885,10 +2086,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: scrollspy.js v3.3.7
|
* Bootstrap: scrollspy.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#scrollspy
|
* https://getbootstrap.com/docs/3.4/javascript/#scrollspy
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -1914,7 +2115,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
this.process()
|
this.process()
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollSpy.VERSION = '3.3.7'
|
ScrollSpy.VERSION = '3.4.1'
|
||||||
|
|
||||||
ScrollSpy.DEFAULTS = {
|
ScrollSpy.DEFAULTS = {
|
||||||
offset: 10
|
offset: 10
|
||||||
@@ -2058,10 +2259,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: tab.js v3.3.7
|
* Bootstrap: tab.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#tabs
|
* https://getbootstrap.com/docs/3.4/javascript/#tabs
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -2078,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
// jscs:enable requireDollarBeforejQueryAssignment
|
// jscs:enable requireDollarBeforejQueryAssignment
|
||||||
}
|
}
|
||||||
|
|
||||||
Tab.VERSION = '3.3.7'
|
Tab.VERSION = '3.4.1'
|
||||||
|
|
||||||
Tab.TRANSITION_DURATION = 150
|
Tab.TRANSITION_DURATION = 150
|
||||||
|
|
||||||
@@ -2107,7 +2308,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
|
|
||||||
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
|
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
var $target = $(selector)
|
var $target = $(document).find(selector)
|
||||||
|
|
||||||
this.activate($this.closest('li'), $ul)
|
this.activate($this.closest('li'), $ul)
|
||||||
this.activate($target, $target.parent(), function () {
|
this.activate($target, $target.parent(), function () {
|
||||||
@@ -2214,10 +2415,10 @@ if (typeof jQuery === 'undefined') {
|
|||||||
}(jQuery);
|
}(jQuery);
|
||||||
|
|
||||||
/* ========================================================================
|
/* ========================================================================
|
||||||
* Bootstrap: affix.js v3.3.7
|
* Bootstrap: affix.js v3.4.1
|
||||||
* http://getbootstrap.com/javascript/#affix
|
* https://getbootstrap.com/docs/3.4/javascript/#affix
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
* Copyright 2011-2016 Twitter, Inc.
|
* Copyright 2011-2019 Twitter, Inc.
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* ======================================================================== */
|
* ======================================================================== */
|
||||||
|
|
||||||
@@ -2231,7 +2432,9 @@ if (typeof jQuery === 'undefined') {
|
|||||||
var Affix = function (element, options) {
|
var Affix = function (element, options) {
|
||||||
this.options = $.extend({}, Affix.DEFAULTS, options)
|
this.options = $.extend({}, Affix.DEFAULTS, options)
|
||||||
|
|
||||||
this.$target = $(this.options.target)
|
var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
|
||||||
|
|
||||||
|
this.$target = target
|
||||||
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
||||||
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
||||||
|
|
||||||
@@ -2243,7 +2446,7 @@ if (typeof jQuery === 'undefined') {
|
|||||||
this.checkPosition()
|
this.checkPosition()
|
||||||
}
|
}
|
||||||
|
|
||||||
Affix.VERSION = '3.3.7'
|
Affix.VERSION = '3.4.1'
|
||||||
|
|
||||||
Affix.RESET = 'affix affix-top affix-bottom'
|
Affix.RESET = 'affix affix-top affix-bottom'
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user