diff options
author | Thomas ZILLIOX <thomas@zilliox.me> | 2013-05-08 20:42:09 +0400 |
---|---|---|
committer | Thomas ZILLIOX <thomas@zilliox.me> | 2013-05-08 20:42:09 +0400 |
commit | b830387b839f6a1732d310e26fa81de27e19ff95 (patch) | |
tree | a6cf18412a42b0db34b9941de89724bb2f7dadd9 /plugins/SegmentEditor/templates | |
parent | eeb6be9d1e4bb54a05b78537a080622dc764e72e (diff) |
Reorganizing the stylesheets & javascripts folders for every plugins
Diffstat (limited to 'plugins/SegmentEditor/templates')
-rw-r--r-- | plugins/SegmentEditor/templates/Segmentation.css | 559 | ||||
-rw-r--r-- | plugins/SegmentEditor/templates/Segmentation.js | 1035 | ||||
-rw-r--r-- | plugins/SegmentEditor/templates/jquery.jscrollpane.css | 119 | ||||
-rw-r--r-- | plugins/SegmentEditor/templates/jquery.jscrollpane.js | 1342 | ||||
-rw-r--r-- | plugins/SegmentEditor/templates/jquery.mousewheel.js | 117 | ||||
-rw-r--r-- | plugins/SegmentEditor/templates/mwheelIntent.js | 76 | ||||
-rw-r--r-- | plugins/SegmentEditor/templates/scroll.css | 140 |
7 files changed, 0 insertions, 3388 deletions
diff --git a/plugins/SegmentEditor/templates/Segmentation.css b/plugins/SegmentEditor/templates/Segmentation.css deleted file mode 100644 index f9d5d17c93..0000000000 --- a/plugins/SegmentEditor/templates/Segmentation.css +++ /dev/null @@ -1,559 +0,0 @@ -/* ADDITIONAL STYLES*/ -.searchFound { - border: 0px solid red; -} -.others { - border: 0px solid green; -} -.clear { - clear: both; -} -.segment-row-inputs { - margin-bottom: 5px; -} -.hovered { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border: 2px dashed #000 !important; - padding: 0px; -} -.metricListBlock { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - width: 292px; - margin-right: 11px; - border: 2px dashed #EFEFEB; -} -.metricListBlock > select { - margin: 0 !important; - width: 98% !important; - margin-left: 2px !important; -} -.metricMatchBlock { - width: 120px; - margin-right: 11px; -} -.metricValueBlock { - width: 352px; -} -div.scrollable { - height: 100%; - overflow: hidden; - overflow-y: auto; -} -.no_results { - position: absolute; - margin: -225px 0 0 10px; -} -.segment-element { - border: 1px solid #a9a399; - background-color: #f1f0eb; - padding: 6px 4px; - border-radius: 3px 3px 3px 3px; -} -.segment-element .custom_select_search { - width: 146px; - height: 21px; - background: url(../images/bg-segment-search.png) 0 10px no-repeat; - padding: 10px 0 0 0; - margin: 10px 0 10px 15px; - border-top: 1px solid #dcdacf; - position: relative; -} -.segment-element .custom_select_search input[type="text"] { - font: 11px Arial; - color: #454545; - width: 125px; - padding: 3px 0px 3px 5px; - border: none; - background: none; -} -.segment-element .custom_select_search a { - position: absolute; - width: 13px; - height: 13px; - right: 5px; - top: 14px; - background: url(../images/reset_search.png); -} -.segment-element .segment-nav { - width: 180px; - position: absolute; - top: 7px; - left: 5px; - bottom: 135px; - float: left; - width: 170px; -} -.segment-element .segment-nav h4 { - font: bold 14px Arial; - padding: 0 0 8px 0; -} -.segment-element .segment-nav h4.visits { - padding-left: 28px; - background: url(../images/icon-users.png) 0 0 no-repeat; -} -.segment-element .segment-nav h4 a { - color: #255792; - text-decoration: none; -} -.segment-element .segment-nav div > ul { - padding: 0 0 0 15px; -} -.segment-element .segment-nav div > ul > li { - padding: 2px 0; - line-height: 14px; -} -.segment-element .segment-nav div > ul > li li { - padding: 1px; - border-radius: 3px 3px 3px 3px; -} -.segment-element .segment-nav div > ul > li li:hover { - padding: 0; - border: 1px solid #cfccbd; - border-bottom: 1px solid #7c7a72; - background-color: #e9e7e3; -} -.segment-element .segment-nav div > ul > li li:hover a { - cursor: move; - padding: 1px 0 2px 8px; - border-top: 1px solid #fff; - background: #eae8e3 url(../images/segment-move.png) 100% 50% no-repeat; -} -.segment-element .segment-nav div > ul > li li a { - padding: 2px 0 2px 8px; - font-weight: normal; - display: block; -} -.segment-element .segment-nav div > ul > li ul { - margin: 2px 0 -3px 10px; -} -.segment-element .segment-nav div > ul > li a { - color: #5d5342; - font: bold 11px Arial; - text-decoration: none; - text-shadow: 0 1px 0 #fff; -} -.segment-element .segment-content { - min-height: 300px; - padding: 0 0 20px 203px; -} -.segment-element .segment-content h3 { - font: bold 16px Arial; - color: #505050; - margin: 11px 0 0 0; - text-shadow: 0 1px 0 #fff; -} -.segment-element .segment-content h3 a { - font-size: 11px; - text-decoration: none; - margin: -1px 0 0 0; -} -.segment-element .segment-content .segment-rows { - padding: 4px; - margin: 0 3px 0 0; - background: #fff; - border: 1px solid #a9a399; - border-radius: 3px 3px 3px 3px; - position: relative; - box-shadow: 0 12px 6px -10px rgba(0, 0, 0, 0.42); -} -.segment-element .segment-content .segment-add-row, -.segment-element .segment-content .segment-add-or { - font: bold 14px Arial; - background: #fff; - color: #b9b9b9; - text-align: center; - position: relative; -} -.segment-element .segment-content .segment-add-row > div, -.segment-element .segment-content .segment-add-or > div { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border: 2px dashed #fff; - padding: 10px 0; -} -.segment-element .segment-content .segment-add-row > div a, -.segment-element .segment-content .segment-add-or > div a { - color: #b9b9b9; - text-decoration: none; -} -.segment-element .segment-content .segment-add-row > div a span, -.segment-element .segment-content .segment-add-or > div a span { - color: #255792; -} -.segment-element .segment-content .segment-add-row { - margin: 0 3px 0 0; - padding: 0 12px; - border: 1px solid #a9a399; - border-radius: 3px 3px 3px 3px; - box-shadow: 0 12px 6px -10px rgba(0, 0, 0, 0.42); -} -.segment-element .segment-content .segment-add-or { - text-shadow: 0 1px 0 #fff; - display: inline-block; - width: 98%; - padding: 0 1%; - background: #efefeb; - border-radius: 3px 3px 3px 3px; -} -.segment-element .segment-content .segment-add-or > div { - border: 2px dashed #EFEFEB; -} -.segment-element .segment-content .segment-row { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - display: inline-block; - position: relative; - width: 811px; - padding: 12px 1%; - background: #efefeb; - padding: 7px 5px 0 5px; -} -.segment-element .segment-content .segment-row .segment-close { - top: 15px; - right: 6px; - position: absolute; - width: 15px; - height: 15px; - background: url(../images/segment-close.png) 0 0 no-repeat; -} -.segment-element .segment-content .segment-row .segment-loading { - display:none; - top: 25px; - right: 30px; - position: absolute; - width: 15px; - height: 15px; - background: url(../../MultiSites/images/loading-blue.gif) 0 0 no-repeat; -} - -.segment-element .segment-content .segment-or { - display: inline-block; - margin: 0 0 0 6%; - position: relative; - background: #efefeb; - padding: 5px 28px; - color: #4f4f4f; - font: bold 14px Arial; - text-shadow: 0 1px 0 #fff; -} -.segment-element .segment-content .segment-or:before, -.segment-element .segment-content .segment-or:after { - content: ''; - position: absolute; - background: #fff; - border: 1px solid #efefeb; - width: 10px; - top: -1px; - bottom: -1px; -} -.segment-element .segment-content .segment-or:before { - border-left: none; - left: 0px; - border-radius: 0 5px 5px 0; -} -.segment-element .segment-content .segment-or:after { - border-right: none; - right: 0px; - border-radius: 5px 0 0 5px; -} -.segment-element .segment-content .segment-and { - display: inline-block; - margin: -1px 0 -1px 6%; - z-index: 1; - position: relative; - background: #fff; - padding: 5px 35px; - color: #4f4f4f; - font: bold 14px Arial; - text-shadow: 0 1px 0 #fff; -} -.segment-element .segment-content .segment-and:before, -.segment-element .segment-content .segment-and:after { - content: ''; - position: absolute; - background: url(../images/bg-inverted-corners.png); - background: #f1f0eb\0/; - border: 1px solid #a9a399; - width: 10px; - top: 0px; - bottom: 0px; -} -.segment-element .segment-content .segment-and:before { - border-left: none; - left: 0px; - border-radius: 0 5px 5px 0; -} -.segment-element .segment-content .segment-and:after { - border-right: none; - right: 0px; - border-radius: 5px 0 0 5px; -} -.segment-element .segment-content .segment-input { - float: left; - padding: 6px 0 5px 3px; - border: 2px dashed #EFEFEB; - margin-right: 3px; -} -.segment-element .segment-content .segment-input label { - display: block; - margin: 0 0 5px 0; - font: 11px Arial; - color: #505050; -} -.segment-element .segment-content .segment-input select, -.segment-element .segment-content .segment-input input { - display: block; - font: 16px Arial; - color: #255792; - width: 96%; - padding: 7px 2%; - border-radius: 2px 2px 2px 2px; -} -.segment-element .segment-content .segment-input input { - padding: 8px 2%; -} -.segment-element .segment-top { - font: 11px Arial; - color: #505050; - text-align: right; - padding: 3px 7px 0 0; -} -.segment-element .segment-top a { - text-decoration: none; -} -.segment-element .segment-top a.dropdown { - padding: 0 17px 0 0; - background: url(../../../plugins/Zeitgeist/images/sort_subtable_desc.png) 100% -2px no-repeat; -} -.segment-element .segment-footer { - background: #eae8e3; - border-top: 1px solid #a9a399; - text-align: right; - padding: 7px 10px; - margin: 0 -4px -6px -4px; -} -.segment-element .segment-footer a.delete { - color:red; -} -.segment-element .segment-footer a { - font: 14px Arial; - color: #255792; - margin: 0 5px; - text-decoration: none; -} - -.segment-element .segment-footer button { - width: 178px; - height: 30px; - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDE3OCAzMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGxpbmVhckdyYWRpZW50IGlkPSJoYXQwIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjUwJSIgeTE9IjEwMCUiIHgyPSI1MCUiIHkyPSItMS40MjEwODU0NzE1MjAyZS0xNCUiPgo8c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjODM3OTZiIiBzdG9wLW9wYWNpdHk9IjEiLz4KPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjYWJhMzkzIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgPC9saW5lYXJHcmFkaWVudD4KCjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxNzgiIGhlaWdodD0iMzAiIGZpbGw9InVybCgjaGF0MCkiIC8+Cjwvc3ZnPg==); - background-image: -moz-linear-gradient(bottom, #83796b 0%, #aba393 100%); - background-image: -o-linear-gradient(bottom, #83796b 0%, #aba393 100%); - background-image: -webkit-linear-gradient(bottom, #83796b 0%, #aba393 100%); - background-image: linear-gradient(bottom, #83796b 0%, #aba393 100%); - color: #fff; - font-family: "Arial"; - font-size: 16px; - font-weight: bold; - text-shadow: 0 1px 0px #251e15; - border-radius: 4px 4px 4px 4px; - border: none; - margin: 0 0 0 15px; - background: #978f80\0/; -} -.segmentationContainer { - position: absolute; - z-index: 2; - background: #f7f7f7; - border: 1px solid #e4e5e4; - padding: 5px 10px 6px 5px; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - color: #444; - font-size: 14px; -} -.segmentationContainer:hover { - background: #f1f0eb; - border-color: #a9a399; -} -.segmentationContainer > span > b { - color: #255792; -} -.segmentationContainer .submenu { - font-size: 13px; - font-weight: bold; - min-width: 180px; -} -.segmentationContainer .submenu ul { - color: #5D5342; - float: none; - font-size: 11px; - font-weight: normal; - line-height: 20px; - list-style: none outside none; - margin-left: 5px; - margin-right: 0px; - padding-top: 10px; -} -.segmentationContainer .submenu ul li { - padding: 2px 0px 1px 10px; - margin: 3px 0 0 0; - cursor: pointer; -} -.segmentationContainer .submenu ul li:hover { - color: #255792; - margin: 0; - border: 1px solid #d5d2c6; - border-bottom: 2px solid #918f88; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - background: #eae8e3; -} -.segmentationContainer ul.submenu { - padding-top: 5px; - display: none; - float: left; -} -.segmentationContainer ul.submenu > li span.editSegment { - display: block; - float: right; - width: 45px; - text-align: center; - font-weight: normal; -} -.segmentationContainer.visible { - width: 180px; -} -.segmentationContainer.visible ul.submenu { - display: block; - list-style: none; -} -.segmentationContainer.visible .add_new_segment { - display: block; - background: url("../images/dashboard_h_bg_hover.png") repeat-x scroll 0 0 #847b6d; - border: 0 none; - border-radius: 4px 4px 4px 4px; - clear: both; - color: #FFFFFF; - float: right; - margin: 12px 0 10px; - padding: 3px 10px; - text-decoration: none; -} -.segmentationContainer > ul.submenu > li { - padding: 5px 0; - clear: both; - cursor: pointer; -} -span.segmentationTitle { - background: url(../../../plugins/Zeitgeist/images/sort_subtable_desc.png) right center no-repeat !important; - padding-right: 20px !important; - width: 160px !important; - display: block !important; - cursor: pointer; -} -.add_new_segment { - display: none; -} -.segmentList { - max-height: 250px; -} -.jspVerticalBar { - background: transparent!important; -} -/* ADDITIONAL STYLES*/ -body > a.ddmetric { - display: block; - cursor: move; - padding: 1px 0 2px 18px; - background: #eae8e3 url(../images/segment-move.png) 100% 50% no-repeat; - color: #5d5342; - font: normal 11px Arial; - text-decoration: none; - text-shadow: 0 1px 0 #fff; - border: 1px solid #cfccbd; - border-top: 1px solid #fff; - border-bottom: 1px solid #7c7a72; -} -.segment-element .segment-nav div > ul > li ul { - margin-left: 0; -} -.segment-element .segment-nav div > ul > li li a, -.segment-element .segment-nav div > ul > li li a:hover { - padding-right: 18px; -} -.hovered { - border-color: #a0a0a0!Important; -} -a.metric_category { - display: block; - width: 100%; -} -.segment-content > h3 { - padding-bottom: 7px; -} -.no_results { - margin: 0; - position: relative; -} -.no_results a { - cursor: normal; -} -.ui-widget-segmentation { - border: 1px solid #D4D4D4 !important; -} -.clearfix { - zoom: 1; -} -.clearfix:after { - display: block; - visibility: hidden; - height: 0; - clear: both; - content: "."; -} - -#available_segments a.dropdown { - background: url("../../../plugins/Zeitgeist/images/sort_subtable_desc.png") no-repeat scroll 100% -2px transparent !important; - padding: 0 17px 0 0 !important; -} -.notification{ - float: left; -} -.metricValueBlock input -{ - padding:8px !important; -} -.ajaxError { - border: 0 !important; - width: auto !important; - margin: 0 !important; - padding: 0 !important; -} - -.segmentationContainer{ - z-index:99!important; -} -.segment-element{ - z-index:999!important; -} -#dashboardSettings{ - z-index:120; -} -#periodString{ - z-index:121; -} -.segmentationSelectorContainer { - margin: 8px; -} -.segmentSelected, .segmentSelected:hover{ - font-weight:bold; -} -.ui-autocomplete { position: absolute; cursor: default;z-index:1000 !important;} diff --git a/plugins/SegmentEditor/templates/Segmentation.js b/plugins/SegmentEditor/templates/Segmentation.js deleted file mode 100644 index d18dc9ee47..0000000000 --- a/plugins/SegmentEditor/templates/Segmentation.js +++ /dev/null @@ -1,1035 +0,0 @@ -/*! - * Piwik - Web Analytics - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ - -Segmentation = (function($) { - - var segmentation = function segmentation(config) { - - var self = this; - // set defaults for widget - self.currentSegmentStr = ""; - self.targetId = "segmentEditorPanel"; - self.segmentAccess = "read"; - self.segmentList = []; - // ----------- - for(var item in config) - { - self[item] = config[item]; - } - - self.timer = ""; // variable for further use in timing events - self.searchAllowed = true; - //---------- - - self.availableMatches = []; - self.availableMatches["metric"] = []; - self.availableMatches["metric"]["=="] = "Equals"; - self.availableMatches["metric"]["!="] = "Not Equals"; - self.availableMatches["metric"]["<="] = "At most"; - self.availableMatches["metric"][">="] = "At least"; - self.availableMatches["metric"]["<"] = "Less than"; - self.availableMatches["metric"][">"] = "Greater than"; - - self.availableMatches["dimension"] = []; - self.availableMatches["dimension"]["=="] = "Is"; - self.availableMatches["dimension"]["!="] = "Is not"; - self.availableMatches["dimension"]["=@"] = "Contains"; - self.availableMatches["dimension"]["!@"] = "Does not contain"; - - segmentation.prototype.getSegment = function(){ - var self = this; - return self.currentSegmentStr; - } - - var setSegment = function(segmentStr){ - self.currentSegmentStr = segmentStr; - } - - segmentation.prototype.shortenSegmentName = function(name, length){ - - if(typeof length === "undefined") length = 30; - if(typeof name === "undefined") name = ""; - var i; - - if(name.length > length) - { - for(i = length; i > 0; i--){ - if(name[i] === " "){ - break; - } - } - if(i == 0){ - i = length-3; - } - - return name.slice(0,i)+"..."; - } - return name; - } - - var markCurrentSegment = function(){ - var current = self.getSegment(); -// window.setTimeout(function(){ - var segmentationTitle = $(self.content).find(".segmentationTitle"); - if( current != "") - { - var foundItems = $(self.content).find('div.segmentList > ul > li[data-definition="'+current+'"]'); - if( foundItems.length > 0) - { - var name = $(foundItems).first().find("span.segname").text(); - segmentationTitle.html("<b>"+name+"</b>"); - } - else{ - segmentationTitle.html("<b>Custom Segment</b>"); - } - } - else { - $(self.content).find(".segmentationTitle").text("All visits"); - } -// }, 20); - } - - var getAndDiv = function(){ - if(typeof andDiv === "undefined"){ - var andDiv = $("#SegmentEditor > div.segment-and").clone(); - } - return andDiv.clone(); - } - - var getOrDiv = function(){ - if(typeof orDiv === "undefined"){ - var orDiv = $("#SegmentEditor > div.segment-or").clone(); - } - return orDiv.clone(); - } - - var getMockedInputSet = function(){ - if(typeof mockedInputSet === "undefined"){ - var mockedInputSet = $("#SegmentEditor div.segment-row-inputs").clone(); - } - return mockedInputSet.clone(); - } - - var getMockedInputRowHtml = function(){ - if(typeof mockedInputRow === "undefined"){ - var mockedInputRow = '<div class="segment-row"><a class="segment-close" href="#"></a><div class="segment-row-inputs">'+getMockedInputSet().html()+'</div></div>'; - } - return mockedInputRow; - } - - var getMockedFormRow = function(){ - if(typeof mockedFormRow === "undefined") - { - var mockedFormRow = $("#SegmentEditor div.segment-rows").clone(); - $(mockedFormRow).find(".segment-row").append(getMockedInputSet()).after(getAddOrBlockButtonHtml).after(getOrDiv()); - } - return mockedFormRow.clone(); - } - - var getInitialStateRowsHtml = function(){ - if(typeof initialStateRows === "undefined"){ - var content = $("#SegmentEditor div.initial-state-rows").html(); - var initialStateRows = $(content).clone(); - } - return initialStateRows; - } - - var revokeInitialStateRows = function(){ - $(self.form).find(".segment-add-row").remove(); - $(self.form).find(".segment-and").remove(); - } - - var appendSpecifiedRowHtml= function(metric) { - $(self.form).find(".segment-content > h3").after(getMockedFormRow()); - $(self.form).find(".segment-content").append(getAndDiv()); - $(self.form).find(".segment-content").append(getAddNewBlockButtonHtml()); - doDragDropBindings(); - $(self.form).find(".metricList").val(metric).trigger("change"); - } - - var appendComplexRowHtml = function(block){ - var key; - var newRow = getMockedFormRow(); - - var x = $(newRow).find(".metricMatchBlock select"); - $(newRow).find(".metricListBlock select").val(block[0].metric); - $(newRow).find(".metricMatchBlock select").val(block[0].match); - $(newRow).find(".metricValueBlock input").val(block[0].value); - - if(block.length > 1) { - $(newRow).find(".segment-add-or").remove(); - for(key = 1; key < block.length;key++) { - var newSubRow = $(getMockedInputRowHtml()).clone(); - $(newSubRow).find(".metricListBlock select").val(block[key].metric); - $(newSubRow).find(".metricMatchBlock select").val(block[key].match); - $(newSubRow).find(".metricValueBlock input").val(block[key].value); - $(newRow).append(newSubRow).append(getOrDiv()); - } - $(newRow).append(getAddOrBlockButtonHtml()); - } - $(self.form).find(".segment-content").append(newRow).append(getAndDiv()); - } - - var applyInitialStateModification = function(){ - $(self.form).find(".segment-add-row").remove(); - $(self.form).find(".segment-content").append(getInitialStateRowsHtml()); - doDragDropBindings(); - } - - var getListHtml = function() { - var html = $("#SegmentEditor > .listHtml").clone(); - var segment, injClass; - - var listHtml = '<li data-idsegment="" ' + - (self.currentSegmentsGlobal == "" ? " class='segmentSelected' " : "") - + ' data-definition=""><span class="segname">All Visits (default)</span></li> '; - if(self.segmentList.length > 0) { - for(var key in self.segmentList) - { - segment = self.segmentList[key]; - injClass = ""; - if( segment.definition == self.currentSegmentsGlobal){ - injClass = 'class="segmentSelected"'; - } - listHtml += '<li data-idsegment="'+segment.idsegment+'" data-definition=\''+segment.definition+'\' ' - + injClass +' title="'+segment.name+'"><span class="segname">' - + self.shortenSegmentName(segment.name)+'</span>'; - if(self.segmentAccess == "write") { - listHtml += '<span class="editSegment">[edit]</span>'; - } - listHtml += '</li>'; - } - $(html).find(".segmentList > ul").append(listHtml); - if(self.segmentAccess === "write"){ - $(html).find(".add_new_segment").html(_pk_translate('General_AddNewSegment_js')); - } - else{ - $(html).find(".add_new_segment").hide();; - } - } - else - { - $(html).find(".segmentList > ul").append(listHtml); - } - return html; - } - - var getFormHtml = function() { - var html = $("#SegmentEditor > .segment-element").clone(); - // set left margin to center form - //$("body").append(html); - var segmentsDropdown = $(html).find("#available_segments_select"); - var segment, newOption; - newOption = '<option data-idsegment="" data-definition="" >New segment</option>'; - segmentsDropdown.append(newOption); - for(var key in self.segmentList) - { - segment = self.segmentList[key]; - newOption = '<option data-idsegment="'+segment.idsegment+'" data-definition=\''+segment.definition+'\' title="'+segment.name+'">'+self.shortenSegmentName(segment.name)+'</option>'; - segmentsDropdown.append(newOption); - } - $(html).find(".segment-content > h3").after(getInitialStateRowsHtml()).show(); - return html; - } - - var doListBindings = function() - { - self.jscroll = self.content.find(".segmentList").jScrollPane({ - autoReinitialise: true, - showArrows:true - }).data().jsp; - - self.content.find(".add_new_segment").unbind().on("click", function(event){ - event.stopPropagation(); - closeAllOpenLists(); - addForm("new"); - doDragDropBindings(); - }); - - } - - var closeAllOpenLists = function() { - $(".segmentationContainer").each(function() { - if($(this).hasClass("visible")) - $(this).trigger("click"); - }); - } - - - var findAndExplodeByMatch = function(metric){ - var matches = ["==" , "!=" , "<=", ">=", "=@" , "!@","<",">"]; - var newMetric = {}; - var minPos = metric.length; - var match, index; - var singleChar = false; - - for(var key=0; key < matches.length; key++) - { - match = matches[key]; - index = metric.indexOf(match); - if( index != -1){ - if(index < minPos){ - minPos = index; - if(match == ">" || match == "<"){ - singleChar = true; - } - } - } - } - - if(minPos < metric.length){ - // sth found - explode - if(singleChar == true){ - newMetric.metric = metric.substr(0,minPos); - newMetric.match = metric.substr(minPos,1); - newMetric.value = metric.substr(minPos+1); - - } - else{ - newMetric.metric = metric.substr(0,minPos); - newMetric.match = metric.substr(minPos,2); - newMetric.value = metric.substr(minPos+2); - - } - // if value is only "" -> change to empty string - if(newMetric.value == '""') - { - newMetric.value = ""; - } - } - return newMetric; - } - - var parseSegmentStr = function(segmentStr) - { - var blocks; - blocks = segmentStr.split(";"); - for(var key in blocks){ - blocks[key] = blocks[key].split(","); - for(var innerkey = 0; innerkey < blocks[key].length; innerkey++){ - blocks[key][innerkey] = findAndExplodeByMatch(blocks[key][innerkey]); - } - } - return blocks; - } - - var openEditForm = function(segment){ - addForm(); - $(self.form).find(".segment-content > h3 > span").text(segment.name); - $(self.form).find('#available_segments_select > option[data-idsegment="'+segment.idsegment+'"]').prop("selected",true); - $(self.form).find('#available_segments a.dropList').html(self.shortenSegmentName(segment.name, 16)); - - if(segment.definition != ""){ - revokeInitialStateRows(); - var blocks = parseSegmentStr(segment.definition); - for(var key in blocks){ - appendComplexRowHtml(blocks[key]); - } - $(self.form).find(".segment-content").append(getAddNewBlockButtonHtml()); - } - $(self.form).find(".metricList").each( function(){ - $(this).trigger("change", true); - }); - doDragDropBindings(); - } - - var bindListEvents = function(){ - $(self.content).off("click").on("click", function(event){ - // hide all other modals connected with this widget - if(self.content.hasClass("visible")){ - if($(event.target).hasClass("jspDrag") === true) - { - event.stopPropagation(); - } - else{ - self.jscroll.destroy(); - self.content.removeClass("visible"); - } - } - else{ - // for each visible segmentationContainer -> trigger click event to close and kill scrollpane - very important ! - closeAllOpenLists(); - self.content.addClass("visible"); - doListBindings(); - } - }); - - $(self.content).off("click",".editSegment").on("click", ".editSegment", function(e){ - $(this).parents(".segmentationContainer").trigger("click"); - var target = $(this).parent("li"); - var segment = {}; - segment.idsegment = target.attr("data-idsegment"); - segment.definition = target.attr("data-definition"); - segment.name = target.attr("title"); - openEditForm(segment); - e.stopPropagation(); - e.preventDefault(); - }); - - $(self.content).off("click", ".segmentList li").on("click", ".segmentList li", function(e){ - if($(e.currentTarget).hasClass("grayed") !== true){ - var segment = {}; - segment.idsegment = $(this).attr("data-idsegment"); - segment.definition = $(this).attr("data-definition"); - segment.name = $(this).attr("title"); - self.segmentSelectMethod(segment); - setSegment(segment.definition); - markCurrentSegment(); - } - }); - }; - - var bindChangeMetricSelectEvent = function() - { - $(".segment-content").off("change","select.metricList").on("change", "select.metricList", function(e, persist){ - if(typeof persist === "undefined"){ - persist = false; - } - alterMatchesList(this, persist); - doDragDropBindings(); - autoSuggestValues(this, persist); - } ); - } - - var autoSuggestValues = function(select, persist) { - var type = $(select).find("option:selected").attr("value"); - if(!persist) { - var parents = $(select).parents('.segment-row'); - var loadingElement = parents.find(".segment-loading"); - loadingElement.show(); - var inputElement = parents.find(".metricValueBlock input"); - var segmentName = $('option:selected',select).attr('value'); - - // Request auto-suggest values - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - module: 'API', - format: 'json', - method: 'API.getSuggestedValuesForSegment', - segmentName: segmentName, - idSite: piwik.idSite - }, 'GET'); - ajaxHandler.setCallback(function(response) { - loadingElement.hide(); - - inputElement.autocomplete({ - source: response, - minLength: 0, - select: function(event, ui){ - event.preventDefault(); - $(inputElement).val(ui.item.value); - } - }); - - inputElement.click(function(e){ inputElement.keydown() }); - }); - ajaxHandler.send(true); - } - } - - var alterMatchesList = function(select, persist){ - var oldMatch; - var type = $(select).find("option:selected").attr("data-type"); - var matchSelector = $(select).parents(".segment-input").siblings(".metricMatchBlock").find("select"); - if(persist === true){ - oldMatch = matchSelector.find("option:selected").val(); - } - else{ - oldMatch = ""; - } - - if(type === "dimension" || type === "metric"){ - matchSelector.empty(); - var optionsHtml = ""; - for(var key in self.availableMatches[type]){ - optionsHtml += '<option value="'+key+'">'+self.availableMatches[type][key]+'</option>'; - } - } - - matchSelector.append(optionsHtml); - matchSelector.val(oldMatch); - } - - var getAddNewBlockButtonHtml = function() - { - if(typeof addNewBlockButton === "undefined") - { - var addNewBlockButton = $("#SegmentEditor > div.segment-add-row").clone(); - } - return addNewBlockButton.clone(); - - } - - var getAddOrBlockButtonHtml = function(){ - if(typeof addOrBlockButton === "undefined") - { - var addOrBlockButton = $("#SegmentEditor div.segment-add-or").clone(); - } - return addOrBlockButton.clone(); - } - - var placeSegmentationFormControls = function(){ - doDragDropBindings(); - $(self.form).find(".scrollable").jScrollPane({ - showArrows: true, - autoReinitialise: true, - verticalArrowPositions: 'os', - horizontalArrowPositions: 'os' - }); - } - - var bindFormEvents = function(){ - - $(self.form).on("click", "a", function(e){ - e.preventDefault(); - }); - - $('#closeSegmentationForm').on("click", function() { - $("#segmentList").show(); - self.form.remove(); - }); - - $(self.form).off("click", "a.editSegmentName").on("click", "a.editSegmentName", function(e){ - var oldName = $(e.currentTarget).parents("h3").find("span").text(); - $(e.currentTarget).parents("h3").find("span").hide(); - $(e.currentTarget).hide(); - $(e.currentTarget).before('<input id="edit_segment_name"/>'); - $(e.currentTarget).siblings("#edit_segment_name").focus().val(oldName); - }); - - $(self.form).off("blur", "input#edit_segment_name").on("blur", "input#edit_segment_name", function(e){ - var newName = $(this).val(); - $(e.currentTarget).parents("h3").find("span").text(newName).show(); - $(self.form).find("a.editSegmentName").show(); - $(this).remove(); - }); - - $(self.form).on("click", '.segment-element', function(event) { - event.stopPropagation(); - event.preventDefault(); - }); - - $(self.form).find("#available_segments_select").bind("change", function(e){ - var option = $(e.currentTarget).find('option:selected'); - var segment = {}; - segment.idsegment = option.attr("data-idsegment"); - segment.name = option.attr("title"); - segment.definition = option.attr("data-definition"); - openEditForm(segment); - - }); - - // attach event that shows/hides child elements of each metric category - $(self.form).find(".segment-nav > div > ul > li > a").each( function(){ - $(this).on("click", function(e){ - $(e.currentTarget).siblings("ul").toggle(); - }); - }); - - $(self.form).off("click", ".custom_select_search a").on("click", ".custom_select_search a", function(e){ - $(self.form).find("#segmentSearch").val("").trigger("keyup").val("Search"); - }); - - // attach event that will clear search input upon focus if its content is default - $(self.form).find("#segmentSearch").on("focus", function(e){ - var search = $(e.currentTarget).val(); - if(search == "Search") - $(e.currentTarget).val(""); - }); - - - // attach event that will set search input value upon blur if its content is not null - $(self.form).find("#segmentSearch").on("blur", function(e){ - var search = $(e.currentTarget).val(); - if(search == ""){ - clearSearchMetricHighlight(); - $(e.currentTarget).val("Search"); - } - }); - - // bind search action triggering - only when input text is longer than 2 chars - $(self.form).find("#segmentSearch").on("keyup", function(e){ - var search = $(e.currentTarget).val(); - if( search.length >= 2) - { - clearTimeout(self.timer); - self.searchAllowed = true; - self.timer = setTimeout(function(){ - searchSegments(search); - }, 500); - } - else{ - self.searchAllowed = false; - clearSearchMetricHighlight(); - } - }); - - - $(self.form).on("click", ".delete", function(){ - - var segmentName = $(self.form).find(".segment-content > h3 > span").text(); - var segmentId = $(self.form).find("#available_segments_select option:selected").attr("data-idsegment") - var params = { - "idsegment" : segmentId - }; - $('#confirm').find('#name').text( segmentName ); - if(segmentId != ""){ - piwikHelper.modalConfirm( '#confirm', { - yes: function(){ - self.deleteMethod(params); - } - }); - } - }); - - $(self.form).on("click", "a.close", function(e){ - $("#segmentList").show(); - self.form.unbind().remove(); - }); - - $("body").on("keyup", function(e){ - if(e.keyCode == "27"){ - $("#segmentList").show(); - $(self.form).remove(); - } - }); - - bindChangeMetricSelectEvent(); - - placeSegmentationFormControls(); - - } - - var doDragDropBindings = function(){ - $(self.form).find(".segment-nav div > ul > li > ul > li").sortable({ - cursor: 'move', - revert: 10, - revertDuration: 0, - snap: false, - helper: 'clone', - appendTo: 'body' - }); - - $(self.form).find(".metricListBlock").droppable({ - hoverClass: "hovered", - drop: function( event, ui ) { - $(this).find("select").val(ui.draggable.parent().attr("data-metric")).trigger("change"); - } - }); - - $(self.form).find(".segment-add-row > div").droppable({ - hoverClass: "hovered", - drop: function( event, ui ) { - $(this).find("a").trigger("click", [ui.draggable.parent().attr("data-metric")]); - if($(this).find("a > span").length == 0){ - revokeInitialStateRows(); - appendSpecifiedRowHtml([ui.draggable.parent().attr("data-metric")]); - } - } - }); - - $(self.form).find(".segment-add-or > div").droppable({ - hoverClass: "hovered", - drop: function( event, ui ) { - $(this).find("a").trigger("click", [ui.draggable.parent().attr("data-metric")]); - } - }); - - - } - - var searchSegments = function(search){ - // pre-proces search string to normalized form - search = normalizeSearchString(search); - // --- - // clear all previous search highlights and hide all categories - // to allow further showing only matching ones, while others remain invisible - clearSearchMetricHighlight(); - $(self.form).find('.segment-nav div > ul > li').hide(); - var curStr = ""; - // 1 - do most obvious selection -> mark whole categories matching search string - // also expand whole category - $(self.form).find('.segment-nav div > ul > li').each( function(){ - curStr = normalizeSearchString($(this).text()) - if(curStr.indexOf(search) > -1){ - $(this).addClass("searchFound"); - $(this).find("ul").show(); - $(this).find("li").show(); - $(this).show(); - } - }); - - var curMetric = ""; - // 2 - among all unselected categories find metrics which match and mark parent as search result - $(self.form).find(".segment-nav div > ul > li:not(.searchFound)").each(function(){ - var parent = this; - $(this).find("li").each( function(){ - var curStr = normalizeSearchString($(this).text()); - var curMetric = normalizeSearchString($(this).attr("data-metric")); - $(this).hide(); - if(curStr.indexOf(search) > -1 || curMetric.indexOf(search) > -1){ - $(this).show(); - $(parent).find("ul").show(); - $(parent).addClass("searchFound").show(); - } - }); - - // if(curStr.indexOf(search) > -1 || curMetric.indexOf(search) > -1) - // { - // $(this).addClass("searchFound"); - // $(this).find('li').hide(); - // $(this).find('li[data*="'+search+'"]').show(); - // } - }); - - if( $(self.form).find("li.searchFound").length == 0) - { - $(self.form).find("div > ul").prepend('<li class="no_results"><a>No results</a></li>').show(); - - } - // check if search allow flag was revoked - then clear all search results - if(self.searchAllowed == false) - { - clearSearchMetricHighlight(); - self.searchAllowed = true; - } - - } - - var clearSearchMetricHighlight = function(){ - $(self.form).find('.no_results').remove(); - $(self.form).find('.segment-nav div > ul > li').removeClass("searchFound").show(); - $(self.form).find('.segment-nav div > ul > li').removeClass("others").show(); - $(self.form).find('.segment-nav div > ul > li > ul > li').show(); - $(self.form).find('.segment-nav div > ul > li > ul').hide(); - } - - var normalizeSearchString = function(search){ - search = search.replace(/^\s+|\s+$/g, ''); // trim - search = search.toLowerCase(); - // remove accents, swap ñ for n, etc - var from = "à áäâèéëêìÃïîòóöôùúüûñç·/_,:;"; - var to = "aaaaeeeeiiiioooouuuunc------"; - for (var i=0, l=from.length ; i<l ; i++) { - search = search.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i)); - } - - search = search.replace(/[^a-z0-9 -]/g, '') // remove invalid chars - .replace(/\s+/g, '_') // collapse whitespace and replace by underscore - .replace(/-+/g, '-'); // collapse dashes - return search; - } - - var bindSegmentManipulationEvents = function(){ - // upon clicking - add new segment block, then bind 'x' action to newly added row - $(self.form).on("click", ".segment-add-row a", function(event, data){ - $(self.form).find(".segment-and:last").after(getAndDiv()).after(getMockedFormRow()); - if(typeof data !== "undefined"){ - $(self.form).find(".metricList:last").val(data); - } - $(self.form).find(".metricList:last").trigger('change') - doDragDropBindings(); - }); - - $(self.form).on("click", ".segment-add-row span", function(event, data){ - if(typeof data !== "undefined") { - $(self.form).find(".segment-and:last").after(getAndDiv()).after(getMockedFormRow()); - $(self.form).find(".metricList:last").val(data).trigger('change'); - doDragDropBindings(); - } - }); - - // add new OR block - $(self.form).on("click", ".segment-add-or a", function(event, data){ - $(event.currentTarget).parents(".segment-rows").find(".segment-or:last").after(getOrDiv()).after(getMockedInputRowHtml()); - if(typeof data !== "undefined"){ - $(event.currentTarget).parents(".segment-rows").find(".metricList:last").val(data); - } - $(event.currentTarget).parents(".segment-rows").find(".metricList:last").trigger('change'); - doDragDropBindings(); - }); - - $(self.form).on("click", ".segment-close", function(e){ - var target = e.currentTarget; - var rowCnt = $(target).parents(".segment-rows").find(".segment-row").length; - var globalRowCnt = $(self.form).find(".segment-close").length; - if(rowCnt > 1){ - $(target).parents(".segment-row").next().remove(); - $(target).parents(".segment-row").remove(); - } - else if(rowCnt == 1){ - $(target).parents(".segment-rows").next().remove(); - $(target).parents(".segment-rows").remove(); - if(globalRowCnt == 1){ - applyInitialStateModification(); - } - } - }); - } - - var addForm = function(mode){ - - $("#segmentEditorPanel").find(".segment-element:visible").unbind().remove(); - if(typeof self.form !== "undefined") - { - self.form.unbind().remove(); - } - // remove any remaining forms - - self.form = getFormHtml(); - $("#segmentEditorPanel").prepend(self.form); - - setLeftMargin('#segmentEditorPanel > .segment-element'); - bindFormEvents(); - bindSegmentManipulationEvents(); - makeDropList("#enabledAllUsers" , "#enabledAllUsers_select"); - makeDropList("#visible_to_website" , "#visible_to_website_select"); - makeDropList("#available_segments" , "#available_segments_select"); - $(self.form).find(".saveAndApply").bind("click", function(e){ - e.preventDefault(); - parseFormAndSave(); - }); - - if(typeof mode !== "undefined" && mode == "new") - { - $(self.form).find(".editSegmentName").trigger('click'); - $(self.form).find("#edit_segment_name").val(""); - } - $("#segmentList").hide(); - - } - - var parseForm = function(){ - var segmentStr = ""; - $(self.form).find(".segment-rows").each( function(){ - var subSegmentStr = ""; - - $(this).find(".segment-row").each( function(){ - if(subSegmentStr != ""){ - subSegmentStr += ","; // OR operator - } - $(this).find(".segment-row-inputs").each( function(){ - var metric = $(this).find(".metricList option:selected").val(); - var match = $(this).find(".metricMatchBlock > select option:selected").val(); - var value = $(this).find(".segment-input input").val(); - /*if(value == ""){ - value= ''; - }*/ - subSegmentStr += metric + match + encodeURIComponent(value); - }); - }); - if(segmentStr != "") - { - segmentStr += ";"; // add AND operator between segment blocks - } - segmentStr += subSegmentStr; - }); - return segmentStr - } - - var parseFormAndSave = function(){ - var segmentName = $(self.form).find(".segment-content > h3 >span").text(); - var segmentStr = parseForm(); - var segmentId = $(self.form).find('#available_segments_select > option:selected').attr("data-idsegment"); - var user = $(self.form).find("#enabledAllUsers_select option:selected").val(); - var params = { - "name": segmentName, - "definition": segmentStr, - "enabledAllUsers": user, - "idSite": $('#visible_to_website option:selected').attr('value') - }; - // determine if save or update should be performed - if(segmentId === ""){ - self.addMethod(params); - } - else{ - jQuery.extend(params, { - "idSegment": segmentId - }); - self.updateMethod(params); - } - } - - var makeDropList = function(spanId, selectId){ - var select = $(self.form).find(selectId).hide(); - var dropList = $( '<a class="dropList dropdown">' ) - .insertAfter( select ) - .text( select.children(':selected').text() ) - .autocomplete({ - delay: 0, - minLength: 0, - appendTo: "body", - source: function( request, response ) { - response( select.children( "option" ).map(function() { - var text = $( this ).text(); - return { - label: text, - value: this.value, - option: this - }; - }) ); - }, - select: function( event, ui ) { - event.preventDefault(); - ui.item.option.selected = true; - if(ui.item.value) { - dropList.text(ui.item.label); - $(self.form).find(selectId).trigger("change"); - } - } - }) - .click(function() { - // close all other droplists made by this form - $("a.dropList").autocomplete("close"); - // close if already visible - if ( $(this).autocomplete( "widget" ).is(":visible") ) { - $(this).autocomplete("close"); - return; - } - // pass empty string as value to search for, displaying all results - $(this).autocomplete( "search", "" ); - - }); - $('body').on('mouseup',function(e){ - if(!$(e.target).parents(spanId).length && !$(e.target).is(spanId) && !$(e.target).parents(spanId).length - && !$(e.target).parents(".ui-autocomplete").length && !$(e.target).is(".ui-autocomplete") && !$(e.target).parents(".ui-autocomplete").length - ) { - dropList.autocomplete().autocomplete("close"); - } - }); - } - - var setLeftMargin = function(selector) { -// setTimeout( function() { - $(selector).css({left: Math.max($('#periodString')[0].offsetWidth) + 10}); -// }, 500); - } - - var initHtml = function() { - if(typeof self.content !== "undefined"){ - self.content.unbind(); - } - var html = getListHtml(); - - if(typeof self.content !== "undefined"){ - self.content.html($(html).html()); - } else { - $("#"+self.targetId).append(html); - self.content = $("#"+self.targetId).find(".segmentationContainer"); - } - setLeftMargin('.segmentationContainer'); - - // assign content to object attribute to make it easil accesible through all widget methods - bindListEvents(); - markCurrentSegment(); - } - initHtml(); - }; - - return segmentation; -})(jQuery); - - -$(document).ready( function(){ - // ie. admin screens - if(typeof availableSegments == "undefined") { - return; - } - - var changeSegment = function(params){ - $('#segmentEditorPanel a.close').click(); - - return broadcast.propagateNewPage('segment=' + params.definition, true, true); - }; - - var addSegment = function(params){ - var ajaxHandler = new ajaxHelper(); - ajaxHandler.setLoadingElement(); - jQuery.extend(params, { - "module": 'API', - "format": 'json', - "method": 'SegmentEditor.add' - }); - ajaxHandler.addParams(params, 'GET'); - ajaxHandler.useCallbackInCaseOfError(); - ajaxHandler.setCallback(function (response) { - if (response && response.result == 'error') { - alert(response.message); - } else { - changeSegment(params); - } - }); - ajaxHandler.send(true); - }; - - var updateSegment = function(params){ - var ajaxHandler = new ajaxHelper(); - ajaxHandler.setLoadingElement(); - jQuery.extend(params, { - "module": 'API', - "format": 'json', - "method": 'SegmentEditor.update' - }); - ajaxHandler.addParams(params, 'GET'); - ajaxHandler.useCallbackInCaseOfError(); - ajaxHandler.setCallback(function (response) { - if (response && response.result == 'error') { - alert(response.message); - } else { - changeSegment(params); - } - }); - ajaxHandler.send(true); - }; - - - var deleteSegment = function(params){ - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - module: 'API', - format: 'json', - method: 'SegmentEditor.delete' - }, 'GET'); - ajaxHandler.addParams({ - idSegment: params.idsegment - }, 'POST'); - ajaxHandler.redirectOnSuccess(); - ajaxHandler.setLoadingElement(); - ajaxHandler.send(true); - }; - - var testSegment = function(segmentStr){ - console.log(segmentStr); - } - - var segmentationFtw = new Segmentation({ - "targetId" : "segmentList", - "segmentAccess" : "write", - "segmentList" : availableSegments, - "addMethod": addSegment, - "updateMethod": updateSegment, - "deleteMethod": deleteSegment, - "segmentSelectMethod": changeSegment, - "testSegmentMethod": testSegment, - "currentSegmentStr": broadcast.getValueFromHash('segment'), - "currentSegmentsGlobal": broadcast.getValueFromHash('segment') - }); - - $('body').on('mouseup',function(e){ - if($(e.target).parents('.segment-element').length === 0 && !$(e.target).is('.segment-element') && $(e.target).hasClass("ui-corner-all") == false - && $(e.target).hasClass("ddmetric") == false && $(".segment-element:visible").length == 1 ) { - $(".segment-element:visible").unbind().remove(); - $("#segmentList").show(); - } - - if($(e.target).parents('.segmentList').length === 0 && $(".segmentationContainer").hasClass("visible")){ - - $(".segmentationContainer").trigger("click"); - } - - }); -});
\ No newline at end of file diff --git a/plugins/SegmentEditor/templates/jquery.jscrollpane.css b/plugins/SegmentEditor/templates/jquery.jscrollpane.css deleted file mode 100644 index 0364216fe0..0000000000 --- a/plugins/SegmentEditor/templates/jquery.jscrollpane.css +++ /dev/null @@ -1,119 +0,0 @@ -/* - * CSS Styles that are needed by jScrollPane for it to operate correctly. - * - * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane - * may not operate correctly without them. - */ - -.jspContainer -{ - overflow: hidden; - position: relative; -} - -.jspPane -{ - position: absolute; -} - -.jspVerticalBar -{ - position: absolute; - top: 0; - right: 0; - width: 8px; - height: 100%; - background: red; -} - -.jspHorizontalBar -{ - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 16px; - background: red; -} - -.jspVerticalBar *, -.jspHorizontalBar * -{ - margin: 0; - padding: 0; -} - -.jspCap -{ - display: none; -} - -.jspHorizontalBar .jspCap -{ - float: left; -} - -.jspTrack -{ - background: #dde; - position: relative; -} - -.jspDrag -{ - background: #bbd; - position: relative; - top: 0; - left: 0; - cursor: pointer; -} - -.jspHorizontalBar .jspTrack, -.jspHorizontalBar .jspDrag -{ - float: left; - height: 100%; -} - -.jspArrow -{ - background: #50506d; - text-indent: -20000px; - display: block; - cursor: pointer; -} - -.jspArrow.jspDisabled -{ - cursor: default; -} - -.jspVerticalBar .jspArrow -{ - height: 16px; -} - -.jspHorizontalBar .jspArrow -{ - width: 16px; - float: left; - height: 100%; -} - -.jspVerticalBar .jspArrow:focus -{ - outline: none; -} - -.jspCorner -{ - background: #eeeef4; - float: left; - height: 100%; -} - -/* Yuk! CSS Hack for IE6 3 pixel bug :( */ -* html .jspCorner -{ - margin: 0 -3px 0 0; -}
\ No newline at end of file diff --git a/plugins/SegmentEditor/templates/jquery.jscrollpane.js b/plugins/SegmentEditor/templates/jquery.jscrollpane.js deleted file mode 100644 index 88f190c692..0000000000 --- a/plugins/SegmentEditor/templates/jquery.jscrollpane.js +++ /dev/null @@ -1,1342 +0,0 @@ -/*! - * jScrollPane - v2.0.0beta12 - 2012-09-27 - * http://jscrollpane.kelvinluck.com/ - * - * Copyright (c) 2010 Kelvin Luck - * Dual licensed under the MIT or GPL licenses. - */ - -// Script: jScrollPane - cross browser customisable scrollbars -// -// *Version: 2.0.0beta12, Last updated: 2012-09-27* -// -// Project Home - http://jscrollpane.kelvinluck.com/ -// GitHub - http://github.com/vitch/jScrollPane -// Source - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js -// (Minified) - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js -// -// About: License -// -// Copyright (c) 2012 Kelvin Luck -// Dual licensed under the MIT or GPL Version 2 licenses. -// http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt -// http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt -// -// About: Examples -// -// All examples and demos are available through the jScrollPane example site at: -// http://jscrollpane.kelvinluck.com/ -// -// About: Support and Testing -// -// This plugin is tested on the browsers below and has been found to work reliably on them. If you run -// into a problem on one of the supported browsers then please visit the support section on the jScrollPane -// website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also -// welcome to fork the project on GitHub if you can contribute a fix for a given issue. -// -// jQuery Versions - tested in 1.4.2+ - reported to work in 1.3.x -// Browsers Tested - Firefox 3.6.8, Safari 5, Opera 10.6, Chrome 5.0, IE 6, 7, 8 -// -// About: Release History -// -// 2.0.0beta12 - (2012-09-27) fix for jQuery 1.8+ -// 2.0.0beta11 - (2012-05-14) -// 2.0.0beta10 - (2011-04-17) cleaner required size calculation, improved keyboard support, stickToBottom/Left, other small fixes -// 2.0.0beta9 - (2011-01-31) new API methods, bug fixes and correct keyboard support for FF/OSX -// 2.0.0beta8 - (2011-01-29) touchscreen support, improved keyboard support -// 2.0.0beta7 - (2011-01-23) scroll speed consistent (thanks Aivo Paas) -// 2.0.0beta6 - (2010-12-07) scrollToElement horizontal support -// 2.0.0beta5 - (2010-10-18) jQuery 1.4.3 support, various bug fixes -// 2.0.0beta4 - (2010-09-17) clickOnTrack support, bug fixes -// 2.0.0beta3 - (2010-08-27) Horizontal mousewheel, mwheelIntent, keyboard support, bug fixes -// 2.0.0beta2 - (2010-08-21) Bug fixes -// 2.0.0beta1 - (2010-08-17) Rewrite to follow modern best practices and enable horizontal scrolling, initially hidden -// elements and dynamically sized elements. -// 1.x - (2006-12-31 - 2010-07-31) Initial version, hosted at googlecode, deprecated - -(function ($, window, undefined) { - - $.fn.jScrollPane = function (settings) { - // JScrollPane "class" - public methods are available through $('selector').data('jsp') - function JScrollPane(elem, s) { - var settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight, - percentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY, - verticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition, - verticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown, - horizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight, - reinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousContentWidth, - wasAtTop = true, wasAtLeft = true, wasAtBottom = false, wasAtRight = false, - originalElement = elem.clone(false, false).empty(), - mwEvent = $.fn.mwheelIntent ? 'mwheelIntent.jsp' : 'mousewheel.jsp'; - - originalPadding = elem.css('paddingTop') + ' ' + - elem.css('paddingRight') + ' ' + - elem.css('paddingBottom') + ' ' + - elem.css('paddingLeft'); - originalPaddingTotalWidth = (parseInt(elem.css('paddingLeft'), 10) || 0) + - (parseInt(elem.css('paddingRight'), 10) || 0); - - function initialise(s) { - - var /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY, - hasContainingSpaceChanged, originalScrollTop, originalScrollLeft, - maintainAtBottom = false, maintainAtRight = false; - - settings = s; - - if (pane === undefined) { - originalScrollTop = elem.scrollTop(); - originalScrollLeft = elem.scrollLeft(); - - elem.css( - { - overflow: 'hidden', - padding: 0 - } - ); - // TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should - // come back to it later and check once it is unhidden... - paneWidth = elem.innerWidth(); - paneHeight = elem.innerHeight(); - - elem.width(paneWidth); - - pane = $('<div class="jspPane" />').css('padding', originalPadding).append(elem.children()); - container = $('<div class="jspContainer" />') - .css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - } - ).append(pane).appendTo(elem); - - /* - // Move any margins from the first and last children up to the container so they can still - // collapse with neighbouring elements as they would before jScrollPane - firstChild = pane.find(':first-child'); - lastChild = pane.find(':last-child'); - elem.css( - { - 'margin-top': firstChild.css('margin-top'), - 'margin-bottom': lastChild.css('margin-bottom') - } - ); - firstChild.css('margin-top', 0); - lastChild.css('margin-bottom', 0); - */ - } else { - elem.css('width', ''); - - maintainAtBottom = settings.stickToBottom && isCloseToBottom(); - maintainAtRight = settings.stickToRight && isCloseToRight(); - - hasContainingSpaceChanged = elem.innerWidth() + originalPaddingTotalWidth != paneWidth || elem.outerHeight() != paneHeight; - - if (hasContainingSpaceChanged) { - paneWidth = elem.innerWidth() + originalPaddingTotalWidth; - paneHeight = elem.innerHeight(); - container.css({ - width: paneWidth + 'px', - height: paneHeight + 'px' - }); - } - - // If nothing changed since last check... - if (!hasContainingSpaceChanged && previousContentWidth == contentWidth && pane.outerHeight() == contentHeight) { - elem.width(paneWidth); - return; - } - previousContentWidth = contentWidth; - - pane.css('width', ''); - elem.width(paneWidth); - - container.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end(); - } - - pane.css('overflow', 'auto'); - if (s.contentWidth) { - contentWidth = s.contentWidth; - } else { - contentWidth = pane[0].scrollWidth; - } - contentHeight = pane[0].scrollHeight; - pane.css('overflow', ''); - - percentInViewH = contentWidth / paneWidth; - percentInViewV = contentHeight / paneHeight; - isScrollableV = percentInViewV > 1; - - isScrollableH = percentInViewH > 1; - - //console.log(paneWidth, paneHeight, contentWidth, contentHeight, percentInViewH, percentInViewV, isScrollableH, isScrollableV); - - if (!(isScrollableH || isScrollableV)) { - elem.removeClass('jspScrollable'); - pane.css({ - top: 0, - width: container.width() - originalPaddingTotalWidth - }); - removeMousewheel(); - removeFocusHandler(); - removeKeyboardNav(); - removeClickOnTrack(); - } else { - elem.addClass('jspScrollable'); - - isMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition); - if (isMaintainingPositon) { - lastContentX = contentPositionX(); - lastContentY = contentPositionY(); - } - - initialiseVerticalScroll(); - initialiseHorizontalScroll(); - resizeScrollbars(); - - if (isMaintainingPositon) { - scrollToX(maintainAtRight ? (contentWidth - paneWidth ) : lastContentX, false); - scrollToY(maintainAtBottom ? (contentHeight - paneHeight) : lastContentY, false); - } - - initFocusHandler(); - initMousewheel(); - initTouch(); - - if (settings.enableKeyboardNavigation) { - initKeyboardNav(); - } - if (settings.clickOnTrack) { - initClickOnTrack(); - } - - observeHash(); - if (settings.hijackInternalLinks) { - hijackInternalLinks(); - } - } - - if (settings.autoReinitialise && !reinitialiseInterval) { - reinitialiseInterval = setInterval( - function () { - initialise(settings); - }, - settings.autoReinitialiseDelay - ); - } else if (!settings.autoReinitialise && reinitialiseInterval) { - clearInterval(reinitialiseInterval); - } - - originalScrollTop && elem.scrollTop(0) && scrollToY(originalScrollTop, false); - originalScrollLeft && elem.scrollLeft(0) && scrollToX(originalScrollLeft, false); - - elem.trigger('jsp-initialised', [isScrollableH || isScrollableV]); - } - - function initialiseVerticalScroll() { - if (isScrollableV) { - - container.append( - $('<div class="jspVerticalBar" />').append( - $('<div class="jspCap jspCapTop" />'), - $('<div class="jspTrack" />').append( - $('<div class="jspDrag" />').append( - $('<div class="jspDragTop" />'), - $('<div class="jspDragBottom" />') - ) - ), - $('<div class="jspCap jspCapBottom" />') - ) - ); - - verticalBar = container.find('>.jspVerticalBar'); - verticalTrack = verticalBar.find('>.jspTrack'); - verticalDrag = verticalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowUp = $('<a class="jspArrow jspArrowUp" />').bind( - 'mousedown.jsp', getArrowScroll(0, -1) - ).bind('click.jsp', nil); - arrowDown = $('<a class="jspArrow jspArrowDown" />').bind( - 'mousedown.jsp', getArrowScroll(0, 1) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowUp.bind('mouseover.jsp', getArrowScroll(0, -1, arrowUp)); - arrowDown.bind('mouseover.jsp', getArrowScroll(0, 1, arrowDown)); - } - - appendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown); - } - - verticalTrackHeight = paneHeight; - container.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each( - function () { - verticalTrackHeight -= $(this).outerHeight(); - } - ); - - - verticalDrag.hover( - function () { - verticalDrag.addClass('jspHover'); - }, - function () { - verticalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function (e) { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', nil); - - verticalDrag.addClass('jspActive'); - - var startY = e.pageY - verticalDrag.position().top; - - $('html').bind( - 'mousemove.jsp', - function (e) { - positionDragY(e.pageY - startY, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - sizeVerticalScrollbar(); - } - } - - function sizeVerticalScrollbar() { - verticalTrack.height(verticalTrackHeight + 'px'); - verticalDragPosition = 0; - scrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth(); - - // Make the pane thinner to allow for the vertical scrollbar - pane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth); - - // Add margin to the left of the pane if scrollbars are on that side (to position - // the scrollbar on the left or right set it's left or right property in CSS) - try { - if (verticalBar.position().left === 0) { - pane.css('margin-left', scrollbarWidth + 'px'); - } - } catch (err) { - } - } - - function initialiseHorizontalScroll() { - if (isScrollableH) { - - container.append( - $('<div class="jspHorizontalBar" />').append( - $('<div class="jspCap jspCapLeft" />'), - $('<div class="jspTrack" />').append( - $('<div class="jspDrag" />').append( - $('<div class="jspDragLeft" />'), - $('<div class="jspDragRight" />') - ) - ), - $('<div class="jspCap jspCapRight" />') - ) - ); - - horizontalBar = container.find('>.jspHorizontalBar'); - horizontalTrack = horizontalBar.find('>.jspTrack'); - horizontalDrag = horizontalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowLeft = $('<a class="jspArrow jspArrowLeft" />').bind( - 'mousedown.jsp', getArrowScroll(-1, 0) - ).bind('click.jsp', nil); - arrowRight = $('<a class="jspArrow jspArrowRight" />').bind( - 'mousedown.jsp', getArrowScroll(1, 0) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowLeft.bind('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft)); - arrowRight.bind('mouseover.jsp', getArrowScroll(1, 0, arrowRight)); - } - appendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight); - } - - horizontalDrag.hover( - function () { - horizontalDrag.addClass('jspHover'); - }, - function () { - horizontalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function (e) { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', nil); - - horizontalDrag.addClass('jspActive'); - - var startX = e.pageX - horizontalDrag.position().left; - - $('html').bind( - 'mousemove.jsp', - function (e) { - positionDragX(e.pageX - startX, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - horizontalTrackWidth = container.innerWidth(); - sizeHorizontalScrollbar(); - } - } - - function sizeHorizontalScrollbar() { - container.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each( - function () { - horizontalTrackWidth -= $(this).outerWidth(); - } - ); - - horizontalTrack.width(horizontalTrackWidth + 'px'); - horizontalDragPosition = 0; - } - - function resizeScrollbars() { - if (isScrollableH && isScrollableV) { - var horizontalTrackHeight = horizontalTrack.outerHeight(), - verticalTrackWidth = verticalTrack.outerWidth(); - verticalTrackHeight -= horizontalTrackHeight; - $(horizontalBar).find('>.jspCap:visible,>.jspArrow').each( - function () { - horizontalTrackWidth += $(this).outerWidth(); - } - ); - horizontalTrackWidth -= verticalTrackWidth; - paneHeight -= verticalTrackWidth; - paneWidth -= horizontalTrackHeight; - horizontalTrack.parent().append( - $('<div class="jspCorner" />').css('width', horizontalTrackHeight + 'px') - ); - sizeVerticalScrollbar(); - sizeHorizontalScrollbar(); - } - // reflow content - if (isScrollableH) { - pane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px'); - } - contentHeight = pane.outerHeight(); - percentInViewV = contentHeight / paneHeight; - - if (isScrollableH) { - horizontalDragWidth = Math.ceil(1 / percentInViewH * horizontalTrackWidth); - if (horizontalDragWidth > settings.horizontalDragMaxWidth) { - horizontalDragWidth = settings.horizontalDragMaxWidth; - } else if (horizontalDragWidth < settings.horizontalDragMinWidth) { - horizontalDragWidth = settings.horizontalDragMinWidth; - } - horizontalDrag.width(horizontalDragWidth + 'px'); - dragMaxX = horizontalTrackWidth - horizontalDragWidth; - _positionDragX(horizontalDragPosition); // To update the state for the arrow buttons - } - if (isScrollableV) { - verticalDragHeight = Math.ceil(1 / percentInViewV * verticalTrackHeight); - if (verticalDragHeight > settings.verticalDragMaxHeight) { - verticalDragHeight = settings.verticalDragMaxHeight; - } else if (verticalDragHeight < settings.verticalDragMinHeight) { - verticalDragHeight = settings.verticalDragMinHeight; - } - verticalDrag.height(verticalDragHeight + 'px'); - dragMaxY = verticalTrackHeight - verticalDragHeight; - _positionDragY(verticalDragPosition); // To update the state for the arrow buttons - } - } - - function appendArrows(ele, p, a1, a2) { - var p1 = "before", p2 = "after", aTemp; - - // Sniff for mac... Is there a better way to determine whether the arrows would naturally appear - // at the top or the bottom of the bar? - if (p == "os") { - p = /Mac/.test(navigator.platform) ? "after" : "split"; - } - if (p == p1) { - p2 = p; - } else if (p == p2) { - p1 = p; - aTemp = a1; - a1 = a2; - a2 = aTemp; - } - - ele[p1](a1)[p2](a2); - } - - function getArrowScroll(dirX, dirY, ele) { - return function () { - arrowScroll(dirX, dirY, this, ele); - this.blur(); - return false; - }; - } - - function arrowScroll(dirX, dirY, arrow, ele) { - arrow = $(arrow).addClass('jspActive'); - - var eve, - scrollTimeout, - isFirst = true, - doScroll = function () { - if (dirX !== 0) { - jsp.scrollByX(dirX * settings.arrowButtonSpeed); - } - if (dirY !== 0) { - jsp.scrollByY(dirY * settings.arrowButtonSpeed); - } - scrollTimeout = setTimeout(doScroll, isFirst ? settings.initialDelay : settings.arrowRepeatFreq); - isFirst = false; - }; - - doScroll(); - - eve = ele ? 'mouseout.jsp' : 'mouseup.jsp'; - ele = ele || $('html'); - ele.bind( - eve, - function () { - arrow.removeClass('jspActive'); - scrollTimeout && clearTimeout(scrollTimeout); - scrollTimeout = null; - ele.unbind(eve); - } - ); - } - - function initClickOnTrack() { - removeClickOnTrack(); - if (isScrollableV) { - verticalTrack.bind( - 'mousedown.jsp', - function (e) { - if (e.originalTarget === undefined || e.originalTarget == e.currentTarget) { - var clickedTrack = $(this), - offset = clickedTrack.offset(), - direction = e.pageY - offset.top - verticalDragPosition, - scrollTimeout, - isFirst = true, - doScroll = function () { - var offset = clickedTrack.offset(), - pos = e.pageY - offset.top - verticalDragHeight / 2, - contentDragY = paneHeight * settings.scrollPagePercent, - dragY = dragMaxY * contentDragY / (contentHeight - paneHeight); - if (direction < 0) { - if (verticalDragPosition - dragY > pos) { - jsp.scrollByY(-contentDragY); - } else { - positionDragY(pos); - } - } else if (direction > 0) { - if (verticalDragPosition + dragY < pos) { - jsp.scrollByY(contentDragY); - } else { - positionDragY(pos); - } - } else { - cancelClick(); - return; - } - scrollTimeout = setTimeout(doScroll, isFirst ? settings.initialDelay : settings.trackClickRepeatFreq); - isFirst = false; - }, - cancelClick = function () { - scrollTimeout && clearTimeout(scrollTimeout); - scrollTimeout = null; - $(document).unbind('mouseup.jsp', cancelClick); - }; - doScroll(); - $(document).bind('mouseup.jsp', cancelClick); - return false; - } - } - ); - } - - if (isScrollableH) { - horizontalTrack.bind( - 'mousedown.jsp', - function (e) { - if (e.originalTarget === undefined || e.originalTarget == e.currentTarget) { - var clickedTrack = $(this), - offset = clickedTrack.offset(), - direction = e.pageX - offset.left - horizontalDragPosition, - scrollTimeout, - isFirst = true, - doScroll = function () { - var offset = clickedTrack.offset(), - pos = e.pageX - offset.left - horizontalDragWidth / 2, - contentDragX = paneWidth * settings.scrollPagePercent, - dragX = dragMaxX * contentDragX / (contentWidth - paneWidth); - if (direction < 0) { - if (horizontalDragPosition - dragX > pos) { - jsp.scrollByX(-contentDragX); - } else { - positionDragX(pos); - } - } else if (direction > 0) { - if (horizontalDragPosition + dragX < pos) { - jsp.scrollByX(contentDragX); - } else { - positionDragX(pos); - } - } else { - cancelClick(); - return; - } - scrollTimeout = setTimeout(doScroll, isFirst ? settings.initialDelay : settings.trackClickRepeatFreq); - isFirst = false; - }, - cancelClick = function () { - scrollTimeout && clearTimeout(scrollTimeout); - scrollTimeout = null; - $(document).unbind('mouseup.jsp', cancelClick); - }; - doScroll(); - $(document).bind('mouseup.jsp', cancelClick); - return false; - } - } - ); - } - } - - function removeClickOnTrack() { - if (horizontalTrack) { - horizontalTrack.unbind('mousedown.jsp'); - } - if (verticalTrack) { - verticalTrack.unbind('mousedown.jsp'); - } - } - - function cancelDrag() { - $('html').unbind('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp'); - - if (verticalDrag) { - verticalDrag.removeClass('jspActive'); - } - if (horizontalDrag) { - horizontalDrag.removeClass('jspActive'); - } - } - - function positionDragY(destY, animate) { - if (!isScrollableV) { - return; - } - if (destY < 0) { - destY = 0; - } else if (destY > dragMaxY) { - destY = dragMaxY; - } - - // can't just check if(animate) because false is a valid value that could be passed in... - if (animate === undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(verticalDrag, 'top', destY, _positionDragY); - } else { - verticalDrag.css('top', destY); - _positionDragY(destY); - } - - } - - function _positionDragY(destY) { - if (destY === undefined) { - destY = verticalDrag.position().top; - } - - container.scrollTop(0); - verticalDragPosition = destY; - - var isAtTop = verticalDragPosition === 0, - isAtBottom = verticalDragPosition == dragMaxY, - percentScrolled = destY / dragMaxY, - destTop = -percentScrolled * (contentHeight - paneHeight); - - if (wasAtTop != isAtTop || wasAtBottom != isAtBottom) { - wasAtTop = isAtTop; - wasAtBottom = isAtBottom; - elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]); - } - - updateVerticalArrows(isAtTop, isAtBottom); - pane.css('top', destTop); - elem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]).trigger('scroll'); - } - - function positionDragX(destX, animate) { - if (!isScrollableH) { - return; - } - if (destX < 0) { - destX = 0; - } else if (destX > dragMaxX) { - destX = dragMaxX; - } - - if (animate === undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(horizontalDrag, 'left', destX, _positionDragX); - } else { - horizontalDrag.css('left', destX); - _positionDragX(destX); - } - } - - function _positionDragX(destX) { - if (destX === undefined) { - destX = horizontalDrag.position().left; - } - - container.scrollTop(0); - horizontalDragPosition = destX; - - var isAtLeft = horizontalDragPosition === 0, - isAtRight = horizontalDragPosition == dragMaxX, - percentScrolled = destX / dragMaxX, - destLeft = -percentScrolled * (contentWidth - paneWidth); - - if (wasAtLeft != isAtLeft || wasAtRight != isAtRight) { - wasAtLeft = isAtLeft; - wasAtRight = isAtRight; - elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]); - } - - updateHorizontalArrows(isAtLeft, isAtRight); - pane.css('left', destLeft); - elem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]).trigger('scroll'); - } - - function updateVerticalArrows(isAtTop, isAtBottom) { - if (settings.showArrows) { - arrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled'); - arrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function updateHorizontalArrows(isAtLeft, isAtRight) { - if (settings.showArrows) { - arrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled'); - arrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function scrollToY(destY, animate) { - var percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - } - - function scrollToX(destX, animate) { - var percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - } - - function scrollToElement(ele, stickToTop, animate) { - var e, eleHeight, eleWidth, eleTop = 0, eleLeft = 0, viewportTop, viewportLeft, maxVisibleEleTop, maxVisibleEleLeft, destY, destX; - - // Legal hash values aren't necessarily legal jQuery selectors so we need to catch any - // errors from the lookup... - try { - e = $(ele); - } catch (err) { - return; - } - eleHeight = e.outerHeight(); - eleWidth = e.outerWidth(); - - container.scrollTop(0); - container.scrollLeft(0); - - // loop through parents adding the offset top of any elements that are relatively positioned between - // the focused element and the jspPane so we can get the true distance from the top - // of the focused element to the top of the scrollpane... - while (!e.is('.jspPane')) { - eleTop += e.position().top; - eleLeft += e.position().left; - e = e.offsetParent(); - if (/^body|html$/i.test(e[0].nodeName)) { - // we ended up too high in the document structure. Quit! - return; - } - } - - viewportTop = contentPositionY(); - maxVisibleEleTop = viewportTop + paneHeight; - if (eleTop < viewportTop || stickToTop) { // element is above viewport - destY = eleTop - settings.verticalGutter; - } else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport - destY = eleTop - paneHeight + eleHeight + settings.verticalGutter; - } - if (destY) { - scrollToY(destY, animate); - } - - viewportLeft = contentPositionX(); - maxVisibleEleLeft = viewportLeft + paneWidth; - if (eleLeft < viewportLeft || stickToTop) { // element is to the left of viewport - destX = eleLeft - settings.horizontalGutter; - } else if (eleLeft + eleWidth > maxVisibleEleLeft) { // element is to the right viewport - destX = eleLeft - paneWidth + eleWidth + settings.horizontalGutter; - } - if (destX) { - scrollToX(destX, animate); - } - - } - - function contentPositionX() { - return -pane.position().left; - } - - function contentPositionY() { - return -pane.position().top; - } - - function isCloseToBottom() { - var scrollableHeight = contentHeight - paneHeight; - return (scrollableHeight > 20) && (scrollableHeight - contentPositionY() < 10); - } - - function isCloseToRight() { - var scrollableWidth = contentWidth - paneWidth; - return (scrollableWidth > 20) && (scrollableWidth - contentPositionX() < 10); - } - - function initMousewheel() { - container.unbind(mwEvent).bind( - mwEvent, - function (event, delta, deltaX, deltaY) { - var dX = horizontalDragPosition, dY = verticalDragPosition; - jsp.scrollBy(deltaX * settings.mouseWheelSpeed, -deltaY * settings.mouseWheelSpeed, false); - // return true if there was no movement so rest of screen can scroll - return dX == horizontalDragPosition && dY == verticalDragPosition; - } - ); - } - - function removeMousewheel() { - container.unbind(mwEvent); - } - - function nil() { - return false; - } - - function initFocusHandler() { - pane.find(':input,a').unbind('focus.jsp').bind( - 'focus.jsp', - function (e) { - scrollToElement(e.target, false); - } - ); - } - - function removeFocusHandler() { - pane.find(':input,a').unbind('focus.jsp'); - } - - function initKeyboardNav() { - var keyDown, elementHasScrolled, validParents = []; - isScrollableH && validParents.push(horizontalBar[0]); - isScrollableV && validParents.push(verticalBar[0]); - - // IE also focuses elements that don't have tabindex set. - pane.focus( - function () { - elem.focus(); - } - ); - - elem.attr('tabindex', 0) - .unbind('keydown.jsp keypress.jsp') - .bind( - 'keydown.jsp', - function (e) { - if (e.target !== this && !(validParents.length && $(e.target).closest(validParents).length)) { - return; - } - var dX = horizontalDragPosition, dY = verticalDragPosition; - switch (e.keyCode) { - case 40: // down - case 38: // up - case 34: // page down - case 32: // space - case 33: // page up - case 39: // right - case 37: // left - keyDown = e.keyCode; - keyDownHandler(); - break; - case 35: // end - scrollToY(contentHeight - paneHeight); - keyDown = null; - break; - case 36: // home - scrollToY(0); - keyDown = null; - break; - } - - elementHasScrolled = e.keyCode == keyDown && dX != horizontalDragPosition || dY != verticalDragPosition; - return !elementHasScrolled; - } - ).bind( - 'keypress.jsp', // For FF/ OSX so that we can cancel the repeat key presses if the JSP scrolls... - function (e) { - if (e.keyCode == keyDown) { - keyDownHandler(); - } - return !elementHasScrolled; - } - ); - - if (settings.hideFocus) { - elem.css('outline', 'none'); - if ('hideFocus' in container[0]) { - elem.attr('hideFocus', true); - } - } else { - elem.css('outline', ''); - if ('hideFocus' in container[0]) { - elem.attr('hideFocus', false); - } - } - - function keyDownHandler() { - var dX = horizontalDragPosition, dY = verticalDragPosition; - switch (keyDown) { - case 40: // down - jsp.scrollByY(settings.keyboardSpeed, false); - break; - case 38: // up - jsp.scrollByY(-settings.keyboardSpeed, false); - break; - case 34: // page down - case 32: // space - jsp.scrollByY(paneHeight * settings.scrollPagePercent, false); - break; - case 33: // page up - jsp.scrollByY(-paneHeight * settings.scrollPagePercent, false); - break; - case 39: // right - jsp.scrollByX(settings.keyboardSpeed, false); - break; - case 37: // left - jsp.scrollByX(-settings.keyboardSpeed, false); - break; - } - - elementHasScrolled = dX != horizontalDragPosition || dY != verticalDragPosition; - return elementHasScrolled; - } - } - - function removeKeyboardNav() { - elem.attr('tabindex', '-1') - .removeAttr('tabindex') - .unbind('keydown.jsp keypress.jsp'); - } - - function observeHash() { - if (location.hash && location.hash.length > 1) { - var e, - retryInt, - hash = escape(location.hash.substr(1)) // hash must be escaped to prevent XSS - ; - try { - e = $('#' + hash + ', a[name="' + hash + '"]'); - } catch (err) { - return; - } - - if (e.length && pane.find(hash)) { - // nasty workaround but it appears to take a little while before the hash has done its thing - // to the rendered page so we just wait until the container's scrollTop has been messed up. - if (container.scrollTop() === 0) { - retryInt = setInterval( - function () { - if (container.scrollTop() > 0) { - scrollToElement(e, true); - $(document).scrollTop(container.position().top); - clearInterval(retryInt); - } - }, - 50 - ); - } else { - scrollToElement(e, true); - $(document).scrollTop(container.position().top); - } - } - } - } - - function hijackInternalLinks() { - // only register the link handler once - if ($(document.body).data('jspHijack')) { - return; - } - - // remember that the handler was bound - $(document.body).data('jspHijack', true); - - // use live handler to also capture newly created links - $(document.body).delegate('a[href*=#]', 'click', function (event) { - // does the link point to the same page? - // this also takes care of cases with a <base>-Tag or Links not starting with the hash # - // e.g. <a href="index.html#test"> when the current url already is index.html - var href = this.href.substr(0, this.href.indexOf('#')), - locationHref = location.href, - hash, - element, - container, - jsp, - scrollTop, - elementTop; - if (location.href.indexOf('#') !== -1) { - locationHref = location.href.substr(0, location.href.indexOf('#')); - } - if (href !== locationHref) { - // the link points to another page - return; - } - - // check if jScrollPane should handle this click event - hash = escape(this.href.substr(this.href.indexOf('#') + 1)); - - // find the element on the page - element; - try { - element = $('#' + hash + ', a[name="' + hash + '"]'); - } catch (e) { - // hash is not a valid jQuery identifier - return; - } - - if (!element.length) { - // this link does not point to an element on this page - return; - } - - container = element.closest('.jspScrollable'); - jsp = container.data('jsp'); - - // jsp might be another jsp instance than the one, that bound this event - // remember: this event is only bound once for all instances. - jsp.scrollToElement(element, true); - - if (container[0].scrollIntoView) { - // also scroll to the top of the container (if it is not visible) - scrollTop = $(window).scrollTop(); - elementTop = element.offset().top; - if (elementTop < scrollTop || elementTop > scrollTop + $(window).height()) { - container[0].scrollIntoView(); - } - } - - // jsp handled this event, prevent the browser default (scrolling :P) - event.preventDefault(); - }); - } - - // Init touch on iPad, iPhone, iPod, Android - function initTouch() { - var startX, - startY, - touchStartX, - touchStartY, - moved, - moving = false; - - container.unbind('touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick').bind( - 'touchstart.jsp', - function (e) { - var touch = e.originalEvent.touches[0]; - startX = contentPositionX(); - startY = contentPositionY(); - touchStartX = touch.pageX; - touchStartY = touch.pageY; - moved = false; - moving = true; - } - ).bind( - 'touchmove.jsp', - function (ev) { - if (!moving) { - return; - } - - var touchPos = ev.originalEvent.touches[0], - dX = horizontalDragPosition, dY = verticalDragPosition; - - jsp.scrollTo(startX + touchStartX - touchPos.pageX, startY + touchStartY - touchPos.pageY); - - moved = moved || Math.abs(touchStartX - touchPos.pageX) > 5 || Math.abs(touchStartY - touchPos.pageY) > 5; - - // return true if there was no movement so rest of screen can scroll - return dX == horizontalDragPosition && dY == verticalDragPosition; - } - ).bind( - 'touchend.jsp', - function (e) { - moving = false; - /*if(moved) { - return false; - }*/ - } - ).bind( - 'click.jsp-touchclick', - function (e) { - if (moved) { - moved = false; - return false; - } - } - ); - } - - function destroy() { - var currentY = contentPositionY(), - currentX = contentPositionX(); - elem.removeClass('jspScrollable').unbind('.jsp'); - elem.replaceWith(originalElement.append(pane.children())); - originalElement.scrollTop(currentY); - originalElement.scrollLeft(currentX); - - // clear reinitialize timer if active - if (reinitialiseInterval) { - clearInterval(reinitialiseInterval); - } - } - - // Public API - $.extend( - jsp, - { - // Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it - // was initialised). The settings object which is passed in will override any settings from the - // previous time it was initialised - if you don't pass any settings then the ones from the previous - // initialisation will be used. - reinitialise: function (s) { - s = $.extend({}, settings, s); - initialise(s); - }, - // Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so - // that it can be seen within the viewport. If stickToTop is true then the element will appear at - // the top of the viewport, if it is false then the viewport will scroll as little as possible to - // show the element. You can also specify if you want animation to occur. If you don't provide this - // argument then the animateScroll value from the settings object is used instead. - scrollToElement: function (ele, stickToTop, animate) { - scrollToElement(ele, stickToTop, animate); - }, - // Scrolls the pane so that the specified co-ordinates within the content are at the top left - // of the viewport. animate is optional and if not passed then the value of animateScroll from - // the settings object this jScrollPane was initialised with is used. - scrollTo: function (destX, destY, animate) { - scrollToX(destX, animate); - scrollToY(destY, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the left of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToX: function (destX, animate) { - scrollToX(destX, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the top of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToY: function (destY, animate) { - scrollToY(destY, animate); - }, - // Scrolls the pane to the specified percentage of its maximum horizontal scroll position. animate - // is optional and if not passed then the value of animateScroll from the settings object this - // jScrollPane was initialised with is used. - scrollToPercentX: function (destPercentX, animate) { - scrollToX(destPercentX * (contentWidth - paneWidth), animate); - }, - // Scrolls the pane to the specified percentage of its maximum vertical scroll position. animate - // is optional and if not passed then the value of animateScroll from the settings object this - // jScrollPane was initialised with is used. - scrollToPercentY: function (destPercentY, animate) { - scrollToY(destPercentY * (contentHeight - paneHeight), animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollBy: function (deltaX, deltaY, animate) { - jsp.scrollByX(deltaX, animate); - jsp.scrollByY(deltaY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByX: function (deltaX, animate) { - var destX = contentPositionX() + Math[deltaX < 0 ? 'floor' : 'ceil'](deltaX), - percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByY: function (deltaY, animate) { - var destY = contentPositionY() + Math[deltaY < 0 ? 'floor' : 'ceil'](deltaY), - percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - }, - // Positions the horizontal drag at the specified x position (and updates the viewport to reflect - // this). animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - positionDragX: function (x, animate) { - positionDragX(x, animate); - }, - // Positions the vertical drag at the specified y position (and updates the viewport to reflect - // this). animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - positionDragY: function (y, animate) { - positionDragY(y, animate); - }, - // This method is called when jScrollPane is trying to animate to a new position. You can override - // it if you want to provide advanced animation functionality. It is passed the following arguments: - // * ele - the element whose position is being animated - // * prop - the property that is being animated - // * value - the value it's being animated to - // * stepCallback - a function that you must execute each time you update the value of the property - // You can use the default implementation (below) as a starting point for your own implementation. - animate: function (ele, prop, value, stepCallback) { - var params = {}; - params[prop] = value; - ele.animate( - params, - { - 'duration': settings.animateDuration, - 'easing': settings.animateEase, - 'queue': false, - 'step': stepCallback - } - ); - }, - // Returns the current x position of the viewport with regards to the content pane. - getContentPositionX: function () { - return contentPositionX(); - }, - // Returns the current y position of the viewport with regards to the content pane. - getContentPositionY: function () { - return contentPositionY(); - }, - // Returns the width of the content within the scroll pane. - getContentWidth: function () { - return contentWidth; - }, - // Returns the height of the content within the scroll pane. - getContentHeight: function () { - return contentHeight; - }, - // Returns the horizontal position of the viewport within the pane content. - getPercentScrolledX: function () { - return contentPositionX() / (contentWidth - paneWidth); - }, - // Returns the vertical position of the viewport within the pane content. - getPercentScrolledY: function () { - return contentPositionY() / (contentHeight - paneHeight); - }, - // Returns whether or not this scrollpane has a horizontal scrollbar. - getIsScrollableH: function () { - return isScrollableH; - }, - // Returns whether or not this scrollpane has a vertical scrollbar. - getIsScrollableV: function () { - return isScrollableV; - }, - // Gets a reference to the content pane. It is important that you use this method if you want to - // edit the content of your jScrollPane as if you access the element directly then you may have some - // problems (as your original element has had additional elements for the scrollbars etc added into - // it). - getContentPane: function () { - return pane; - }, - // Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the - // animateScroll value from settings is used instead. - scrollToBottom: function (animate) { - positionDragY(dragMaxY, animate); - }, - // Hijacks the links on the page which link to content inside the scrollpane. If you have changed - // the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the - // contents of your scroll pane will work then call this function. - hijackInternalLinks: $.noop, - // Removes the jScrollPane and returns the page to the state it was in before jScrollPane was - // initialised. - destroy: function () { - destroy(); - } - } - ); - - initialise(s); - } - - // Pluginifying code... - settings = $.extend({}, $.fn.jScrollPane.defaults, settings); - - // Apply default speed - $.each(['mouseWheelSpeed', 'arrowButtonSpeed', 'trackClickSpeed', 'keyboardSpeed'], function () { - settings[this] = settings[this] || settings.speed; - }); - - return this.each( - function () { - var elem = $(this), jspApi = elem.data('jsp'); - if (jspApi) { - jspApi.reinitialise(settings); - } else { - $("script", elem).filter('[type="text/javascript"],:not([type])').remove(); - jspApi = new JScrollPane(elem, settings); - elem.data('jsp', jspApi); - } - } - ); - }; - - $.fn.jScrollPane.defaults = { - showArrows: false, - maintainPosition: true, - stickToBottom: false, - stickToRight: false, - clickOnTrack: true, - autoReinitialise: false, - autoReinitialiseDelay: 500, - verticalDragMinHeight: 0, - verticalDragMaxHeight: 99999, - horizontalDragMinWidth: 0, - horizontalDragMaxWidth: 99999, - contentWidth: undefined, - animateScroll: false, - animateDuration: 300, - animateEase: 'linear', - hijackInternalLinks: false, - verticalGutter: 4, - horizontalGutter: 4, - mouseWheelSpeed: 0, - arrowButtonSpeed: 0, - arrowRepeatFreq: 50, - arrowScrollOnHover: false, - trackClickSpeed: 0, - trackClickRepeatFreq: 70, - verticalArrowPositions: 'split', - horizontalArrowPositions: 'split', - enableKeyboardNavigation: true, - hideFocus: false, - keyboardSpeed: 0, - initialDelay: 300, // Delay before starting repeating - speed: 30, // Default speed when others falsey - scrollPagePercent: .8 // Percent of visible area scrolled when pageUp/Down or track area pressed - }; - -})(jQuery, this); diff --git a/plugins/SegmentEditor/templates/jquery.mousewheel.js b/plugins/SegmentEditor/templates/jquery.mousewheel.js deleted file mode 100644 index 9d65c7162b..0000000000 --- a/plugins/SegmentEditor/templates/jquery.mousewheel.js +++ /dev/null @@ -1,117 +0,0 @@ -/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.1.3 - * - * Requires: 1.2.2+ - */ - -(function (factory) { - if ( typeof define === 'function' && define.amd ) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node/CommonJS style for Browserify - module.exports = factory; - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - - var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll']; - var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll']; - var lowestDelta, lowestDeltaXY; - - if ( $.event.fixHooks ) { - for ( var i = toFix.length; i; ) { - $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; - } - } - - $.event.special.mousewheel = { - setup: function() { - if ( this.addEventListener ) { - for ( var i = toBind.length; i; ) { - this.addEventListener( toBind[--i], handler, false ); - } - } else { - this.onmousewheel = handler; - } - }, - - teardown: function() { - if ( this.removeEventListener ) { - for ( var i = toBind.length; i; ) { - this.removeEventListener( toBind[--i], handler, false ); - } - } else { - this.onmousewheel = null; - } - } - }; - - $.fn.extend({ - mousewheel: function(fn) { - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); - }, - - unmousewheel: function(fn) { - return this.unbind("mousewheel", fn); - } - }); - - - function handler(event) { - var orgEvent = event || window.event, - args = [].slice.call(arguments, 1), - delta = 0, - deltaX = 0, - deltaY = 0, - absDelta = 0, - absDeltaXY = 0, - fn; - event = $.event.fix(orgEvent); - event.type = "mousewheel"; - - // Old school scrollwheel delta - if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta; } - if ( orgEvent.detail ) { delta = orgEvent.detail * -1; } - - // New school wheel delta (wheel event) - if ( orgEvent.deltaY ) { - deltaY = orgEvent.deltaY * -1; - delta = deltaY; - } - if ( orgEvent.deltaX ) { - deltaX = orgEvent.deltaX; - delta = deltaX * -1; - } - - // Webkit - if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; } - if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; } - - // Look for lowest delta to normalize the delta values - absDelta = Math.abs(delta); - if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; } - absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX)); - if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; } - - // Get a whole value for the deltas - fn = delta > 0 ? 'floor' : 'ceil'; - delta = Math[fn](delta / lowestDelta); - deltaX = Math[fn](deltaX / lowestDeltaXY); - deltaY = Math[fn](deltaY / lowestDeltaXY); - - // Add event and delta to the front of the arguments - args.unshift(event, delta, deltaX, deltaY); - - return ($.event.dispatch || $.event.handle).apply(this, args); - } - -})); diff --git a/plugins/SegmentEditor/templates/mwheelIntent.js b/plugins/SegmentEditor/templates/mwheelIntent.js deleted file mode 100644 index 72b7d135ca..0000000000 --- a/plugins/SegmentEditor/templates/mwheelIntent.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @author trixta - * @version 1.2 - */ -(function($){ - - var mwheelI = { - pos: [-260, -260] - }, - minDif = 3, - doc = document, - root = doc.documentElement, - body = doc.body, - longDelay, shortDelay - ; - - function unsetPos(){ - if(this === mwheelI.elem){ - mwheelI.pos = [-260, -260]; - mwheelI.elem = false; - minDif = 3; - } - } - - $.event.special.mwheelIntent = { - setup: function(){ - var jElm = $(this).bind('mousewheel', $.event.special.mwheelIntent.handler); - if( this !== doc && this !== root && this !== body ){ - jElm.bind('mouseleave', unsetPos); - } - jElm = null; - return true; - }, - teardown: function(){ - $(this) - .unbind('mousewheel', $.event.special.mwheelIntent.handler) - .unbind('mouseleave', unsetPos) - ; - return true; - }, - handler: function(e, d){ - var pos = [e.clientX, e.clientY]; - if( this === mwheelI.elem || Math.abs(mwheelI.pos[0] - pos[0]) > minDif || Math.abs(mwheelI.pos[1] - pos[1]) > minDif ){ - mwheelI.elem = this; - mwheelI.pos = pos; - minDif = 250; - - clearTimeout(shortDelay); - shortDelay = setTimeout(function(){ - minDif = 10; - }, 200); - clearTimeout(longDelay); - longDelay = setTimeout(function(){ - minDif = 3; - }, 1500); - e = $.extend({}, e, {type: 'mwheelIntent'}); - return $.event.dispatch.apply(this, arguments); - } - } - }; - $.fn.extend({ - mwheelIntent: function(fn) { - return fn ? this.bind("mwheelIntent", fn) : this.trigger("mwheelIntent"); - }, - - unmwheelIntent: function(fn) { - return this.unbind("mwheelIntent", fn); - } - }); - - $(function(){ - body = doc.body; - //assume that document is always scrollable, doesn't hurt if not - $(doc).bind('mwheelIntent.mwheelIntentDefault', $.noop); - }); -})(jQuery); diff --git a/plugins/SegmentEditor/templates/scroll.css b/plugins/SegmentEditor/templates/scroll.css deleted file mode 100644 index 508adb4c7a..0000000000 --- a/plugins/SegmentEditor/templates/scroll.css +++ /dev/null @@ -1,140 +0,0 @@ -/* - * CSS Styles that are needed by jScrollPane for it to operate correctly. - * - * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane - * may not operate correctly without them. - */ - -.jspContainer -{ - /*overflow: hidden;*/ - position: relative; -} - -.jspPane -{ - position: absolute; -} - -.jspVerticalBar -{ - position: absolute; - top: 0; - right: 0; - width: 16px; - height: 100%; -} - -.jspHorizontalBar -{ - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 16px; - background: red; -} - -.jspVerticalBar *, -.jspHorizontalBar * -{ - margin: 0; - padding: 0; -} - -.jspCap -{ - display: none; -} - -.jspHorizontalBar .jspCap -{ - float: left; -} - -.jspTrack -{ - background: url("../images/slide.png") transparent no-repeat 7px; - position: relative; - background-size: 20% 100%; - /*height: 447px!important;*/ -} - -.jspDrag -{ - background: url("../images/scroller.png") transparent no-repeat; - background-size: 100% 100%; - width: 17px; - position: relative; - top: 0; - left: 0; - cursor: pointer; -} - -.jspHorizontalBar .jspTrack, -.jspHorizontalBar .jspDrag -{ - float: left; - height: 100%; -} - -.jspArrow -{ - - text-indent: -20000px; - display: block; - cursor: pointer; -} -.jspArrowDown{ - background: url("../images/down_arrow.png") transparent no-repeat; -} -.jspArrowUp{ - background: url("../images/up_arrow.png") transparent no-repeat; -} - -.jspVerticalBar .jspArrow -{ - height: 14px; - -} - -.jspHorizontalBar .jspArrow -{ - width: 16px; - float: left; - height: 100%; -} - -.jspVerticalBar .jspArrow:focus -{ - outline: none; -} - -.jspCorner -{ - background: #eeeef4; - float: left; - height: 100%; -} - -/* Yuk! CSS Hack for IE6 3 pixel bug :( */ -* html .jspCorner -{ - margin: 0 -3px 0 0; -} - -/* Styles specific to this particular page */ -.scroll-pane-before, -.scroll-pane-after, -.scroll-pane-split, -.scroll-pane-os -{ - width: 100%; - height: 200px; - overflow: auto; -} -.horizontal-only -{ - height: auto; - max-height: 200px; -} |