| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721 |
- // Licensed to Cloudera, Inc. under one
- // or more contributor license agreements. See the NOTICE file
- // distributed with this work for additional information
- // regarding copyright ownership. Cloudera, Inc. licenses this file
- // to you under the Apache License, Version 2.0 (the
- // "License"); you may not use this file except in compliance
- // with the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- ko.bindingHandlers.slideVisible = {
- init: function (element, valueAccessor) {
- var value = valueAccessor();
- $(element).toggle(ko.unwrap(value));
- },
- update: function (element, valueAccessor) {
- var value = valueAccessor();
- ko.unwrap(value) ? $(element).slideDown(100) : $(element).slideUp(100);
- }
- };
- ko.bindingHandlers.fadeVisible = {
- init: function (element, valueAccessor) {
- var value = valueAccessor();
- $(element).toggle(ko.unwrap(value));
- },
- update: function (element, valueAccessor) {
- var value = valueAccessor();
- $(element).stop();
- ko.unwrap(value) ? $(element).fadeIn() : $(element).hide();
- }
- };
- ko.extenders.numeric = function (target, precision) {
- var result = ko.computed({
- read: target,
- write: function (newValue) {
- var current = target(),
- roundingMultiplier = Math.pow(10, precision),
- newValueAsNum = isNaN(newValue) ? 0 : parseFloat(+newValue),
- valueToWrite = Math.round(newValueAsNum * roundingMultiplier) / roundingMultiplier;
- if (valueToWrite !== current) {
- target(valueToWrite);
- } else {
- if (newValue !== current) {
- target.notifySubscribers(valueToWrite);
- }
- }
- }
- }).extend({ notify: 'always' });
- result(target());
- return result;
- };
- ko.bindingHandlers.freshereditor = {
- init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- var _el = $(element);
- var options = $.extend(valueAccessor(), {});
- _el.html(options.data());
- _el.freshereditor({
- excludes: ['strikethrough', 'removeFormat', 'insertorderedlist', 'justifyfull', 'insertheading1', 'insertheading2', 'superscript', 'subscript']
- });
- _el.freshereditor("edit", true);
- _el.on("mouseup", function () {
- storeSelection();
- updateValues();
- });
- var sourceDelay = -1;
- _el.on("keyup", function () {
- clearTimeout(sourceDelay);
- storeSelection();
- sourceDelay = setTimeout(function () {
- updateValues();
- }, 100);
- });
- $(".chosen-select").chosen({
- disable_search_threshold: 10,
- width: "75%"
- });
- $(document).on("addFieldToVisual", function (e, field) {
- _el.focus();
- pasteHtmlAtCaret("{{" + field.name() + "}}");
- });
- $(document).on("addFunctionToVisual", function (e, fn) {
- _el.focus();
- pasteHtmlAtCaret(fn);
- });
- function updateValues() {
- $("[data-template]")[0].editor.setValue(stripHtmlFromFunctions(_el.html()));
- valueAccessor().data(_el.html());
- }
- function storeSelection() {
- if (window.getSelection) {
- // IE9 and non-IE
- sel = window.getSelection();
- if (sel.getRangeAt && sel.rangeCount) {
- range = sel.getRangeAt(0);
- _el.data("range", range);
- }
- }
- else if (document.selection && document.selection.type != "Control") {
- // IE < 9
- _el.data("selection", document.selection);
- }
- }
- function pasteHtmlAtCaret(html) {
- var sel, range;
- if (window.getSelection) {
- // IE9 and non-IE
- sel = window.getSelection();
- if (sel.getRangeAt && sel.rangeCount) {
- if (_el.data("range")) {
- range = _el.data("range");
- }
- else {
- range = sel.getRangeAt(0);
- }
- range.deleteContents();
- // Range.createContextualFragment() would be useful here but is
- // non-standard and not supported in all browsers (IE9, for one)
- var el = document.createElement("div");
- el.innerHTML = html;
- var frag = document.createDocumentFragment(), node, lastNode;
- while ((node = el.firstChild)) {
- lastNode = frag.appendChild(node);
- }
- range.insertNode(frag);
- // Preserve the selection
- if (lastNode) {
- range = range.cloneRange();
- range.setStartAfter(lastNode);
- range.collapse(true);
- sel.removeAllRanges();
- sel.addRange(range);
- }
- }
- } else if (document.selection && document.selection.type != "Control") {
- // IE < 9
- if (_el.data("selection")) {
- _el.data("selection").createRange().pasteHTML(html);
- }
- else {
- document.selection.createRange().pasteHTML(html);
- }
- }
- }
- }
- };
- ko.bindingHandlers.slider = {
- init: function (element, valueAccessor) {
- var _el = $(element);
- var _options = $.extend(valueAccessor(), {});
- _el.slider({
- min: !isNaN(parseFloat(_options.start())) ? parseFloat(_options.start()) : 0,
- max: !isNaN(parseFloat(_options.end())) ? parseFloat(_options.end()) : 10,
- step: !isNaN(parseFloat(_options.gap())) ? parseFloat(_options.gap()) : 1,
- handle: _options.handle ? _options.handle : 'triangle',
- start: parseFloat(_options.min()),
- end: parseFloat(_options.max()),
- tooltip_split: true,
- tooltip: 'always'
- });
- _el.on("slide", function (e) {
- _options.start(e.min);
- _options.end(e.max);
- _options.min(e.start);
- _options.max(e.end);
- _options.gap(e.step);
- });
- _el.on("slideStop", function (e) {
- viewModel.search();
- });
- },
- update: function (element, valueAccessor) {
- var _options = $.extend(valueAccessor(), {});
- }
- }
- ko.bindingHandlers.daterangepicker = {
- init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- var DATE_FORMAT = "YYYY-MM-DD";
- var TIME_FORMAT = "HH:mm:ss";
- var DATETIME_FORMAT = DATE_FORMAT + " " + TIME_FORMAT;
- var _el = $(element);
- var _options = $.extend(valueAccessor(), {});
- var _intervalOptions = [
- '<option value="+200MILLISECONDS">200ms</option>',
- '<option value="+1SECONDS">1s</option>',
- '<option value="+1MINUTES">1m</option>',
- '<option value="+5MINUTES">5m</option>',
- '<option value="+10MINUTES">10m</option>',
- '<option value="+30MINUTES">30m</option>',
- '<option value="+1HOURS">1h</option>',
- '<option value="+3HOURS">3h</option>',
- '<option value="+12HOURS">12h</option>',
- '<option value="+1DAYS">1d</option>',
- '<option value="+7DAYS">7d</option>',
- '<option value="+1MONTHS">1M</option>',
- '<option value="+6MONTHS">6M</option>',
- '<option value="+1YEARS">1y</option>'
- ];
- function enableOptions() {
- var _opts = [];
- var _tmp = $("<div>").html(_intervalOptions.join(""))
- $.each(arguments, function (cnt, item) {
- if (_tmp.find("option[value='+" + item + "']").length > 0) {
- _opts.push('<option value="+' + item + '">' + _tmp.find("option[value='+" + item + "']").eq(0).text() + '</option>');
- }
- });
- return _opts;
- }
- function renderOptions(opts) {
- var _html = "";
- for (var i = 0; i < opts.length; i++) {
- _html += opts[i];
- }
- _html += '<option value="">Custom</option>';
- return _html;
- }
- var _tmpl = $('<div class="simpledaterangepicker">' +
- '<div class="facet-field-cnt picker">' +
- '<div class="facet-field-label facet-field-label-fixed-width">' + KO_DATERANGEPICKER_LABELS.START + '</div>' +
- '<div class="input-prepend input-group">' +
- '<span class="add-on input-group-addon"><i class="fa fa-calendar"></i></span>' +
- '<input type="text" class="input-small form-control start-date" />' +
- '</div>' +
- '<div class="input-prepend input-group left-margin">' +
- '<span class="add-on input-group-addon"><i class="fa fa-clock-o"></i></span>' +
- '<input type="text" class="input-mini form-control start-time" />' +
- '</div>' +
- '</div>' +
- '<div class="facet-field-cnt picker">' +
- '<div class="facet-field-label facet-field-label-fixed-width">' + KO_DATERANGEPICKER_LABELS.END + '</div>' +
- '<div class="input-prepend input-group">' +
- '<span class="add-on input-group-addon"><i class="fa fa-calendar"></i></span>' +
- '<input type="text" class="input-small form-control end-date" />' +
- '</div>' +
- '<div class="input-prepend input-group left-margin">' +
- '<span class="add-on input-group-addon"><i class="fa fa-clock-o"></i></span>' +
- '<input type="text" class="input-mini form-control end-time" />' +
- '</div>' +
- '</div>' +
- '<div class="facet-field-cnt picker">' +
- '<div class="facet-field-label facet-field-label-fixed-width">' + KO_DATERANGEPICKER_LABELS.INTERVAL + '</div>' +
- '<select class="input-small interval-select" style="margin-right: 6px">' +
- renderOptions(_intervalOptions) +
- '</select>' +
- '<input class="input interval hide" type="text" value="" />' +
- '</div>' +
- '<div class="facet-field-cnt picker">' +
- '<div class="facet-field-label facet-field-label-fixed-width"></div>' +
- '<div class="facet-field-switch"><a href="javascript:void(0)"><i class="fa fa-calendar-o"></i> ' + KO_DATERANGEPICKER_LABELS.CUSTOM_FORMAT + '</a></div>' +
- '</div>' +
- '<div class="facet-field-cnt custom">' +
- '<div class="facet-field-label facet-field-label-fixed-width">' + KO_DATERANGEPICKER_LABELS.START + '</div>' +
- '<div class="input-prepend input-group">' +
- '<span class="add-on input-group-addon"><i class="fa fa-calendar"></i></span>' +
- '<input type="text" class="input-large form-control start-date-custom" />' +
- '</div>' +
- '</div>' +
- '<div class="facet-field-cnt custom">' +
- '<div class="facet-field-label facet-field-label-fixed-width">' + KO_DATERANGEPICKER_LABELS.END + '</div>' +
- '<div class="input-prepend input-group">' +
- '<span class="add-on input-group-addon"><i class="fa fa-calendar"></i></span>' +
- '<input type="text" class="input-large form-control end-date-custom" />' +
- '</div>' +
- '</div>' +
- '<div class="facet-field-cnt custom">' +
- '<div class="facet-field-label facet-field-label-fixed-width">' + KO_DATERANGEPICKER_LABELS.INTERVAL + '</div>' +
- '<div class="input-prepend input-group">' +
- '<span class="add-on input-group-addon"><i class="fa fa-repeat"></i></span>' +
- '<input type="text" class="input-large form-control interval-custom" />' +
- '</div>' +
- '</div>' +
- '<div class="facet-field-cnt custom">' +
- '<div class="facet-field-label facet-field-label-fixed-width"></div>' +
- '<div class="facet-field-switch"><a href="javascript:void(0)"><i class="fa fa-calendar"></i> ' + KO_DATERANGEPICKER_LABELS.DATE_PICKERS + '</a></div>' +
- '</div>' +
- '</div>'
- );
- _tmpl.insertAfter(_el);
- var _minMoment = moment(_options.min());
- var _maxMoment = moment(_options.max());
- var _startMoment = moment(_options.start());
- var _endMoment = moment(_options.end());
- if (_minMoment.isValid() && _maxMoment.isValid()) {
- _tmpl.find(".facet-field-cnt.custom").hide();
- _tmpl.find(".facet-field-cnt.picker").show();
- _tmpl.find(".start-date").val(_minMoment.format(DATE_FORMAT));
- _tmpl.find(".start-time").val(_minMoment.format(TIME_FORMAT));
- _tmpl.find(".end-date").val(_maxMoment.format(DATE_FORMAT));
- _tmpl.find(".end-time").val(_maxMoment.format(TIME_FORMAT));
- _tmpl.find(".interval").val(_options.gap());
- _tmpl.find(".interval-custom").val(_options.gap());
- }
- else {
- _tmpl.find(".facet-field-cnt.custom").show();
- _tmpl.find(".facet-field-cnt.picker").hide();
- _tmpl.find(".start-date-custom").val(_options.min())
- _tmpl.find(".end-date-custom").val(_options.max())
- _tmpl.find(".interval-custom").val(_options.gap())
- }
- _tmpl.find(".start-date").datepicker({
- format: DATE_FORMAT.toLowerCase()
- }).on("changeDate", function () {
- rangeHandler(true);
- });
- _tmpl.find(".start-date").on("change", function(){
- rangeHandler(true);
- });
- _tmpl.find(".start-time").timepicker({
- minuteStep: 1,
- showSeconds: true,
- showMeridian: false,
- defaultTime: false
- });
- _tmpl.find(".end-date").datepicker({
- format: DATE_FORMAT.toLowerCase()
- }).on("changeDate", function () {
- rangeHandler(false);
- });
- _tmpl.find(".end-date").on("change", function(){
- rangeHandler(true);
- });
- _tmpl.find(".end-time").timepicker({
- minuteStep: 1,
- showSeconds: true,
- showMeridian: false,
- defaultTime: false
- });
- _tmpl.find(".start-time").on("change", function () {
- // the timepicker plugin doesn't have a change event handler
- // so we need to wait a bit to handle in with the default field event
- window.setTimeout(function () {
- rangeHandler(true)
- }, 200);
- });
- _tmpl.find(".end-time").on("change", function () {
- window.setTimeout(function () {
- rangeHandler(false)
- }, 200);
- });
- if (_minMoment.isValid() && _maxMoment.isValid()) {
- rangeHandler(true);
- }
- _tmpl.find(".facet-field-cnt.picker .facet-field-switch a").on("click", function () {
- _tmpl.find(".facet-field-cnt.custom").show();
- _tmpl.find(".facet-field-cnt.picker").hide();
- });
- _tmpl.find(".facet-field-cnt.custom .facet-field-switch a").on("click", function () {
- _tmpl.find(".facet-field-cnt.custom").hide();
- _tmpl.find(".facet-field-cnt.picker").show();
- });
- _tmpl.find(".start-date-custom").on("change", function () {
- _options.min(_tmpl.find(".start-date-custom").val());
- _options.start(_options.min());
- });
- _tmpl.find(".end-date-custom").on("change", function () {
- _options.max(_tmpl.find(".end-date-custom").val());
- _options.end(_options.max());
- });
- _tmpl.find(".interval-custom").on("change", function () {
- _options.gap(_tmpl.find(".interval-custom").val());
- });
- function matchIntervals() {
- if (_tmpl.find(".interval-select option[value='" + _options.gap() + "']").length > 0) {
- _tmpl.find(".interval-select").val(_options.gap());
- _tmpl.find(".interval").hide();
- }
- else {
- _tmpl.find(".interval-select").val("");
- _tmpl.find(".interval").show();
- }
- }
- _tmpl.find(".interval-select").on("change", function () {
- if (_tmpl.find(".interval-select").val() == "") {
- _tmpl.find(".interval").show();
- }
- else {
- _tmpl.find(".interval").hide();
- _options.gap(_tmpl.find(".interval-select").val());
- _tmpl.find(".interval").val(_options.gap());
- }
- });
- _tmpl.find(".interval").on("change", function () {
- if (_tmpl.find(".interval-select").val() == "") {
- _options.gap(_tmpl.find(".interval").val());
- _tmpl.find(".interval-custom").val(_options.gap());
- }
- });
- function rangeHandler(isStart) {
- var startDate = moment(_tmpl.find(".start-date").val() + " " + _tmpl.find(".start-time").val(), DATETIME_FORMAT);
- var endDate = moment(_tmpl.find(".end-date").val() + " " + _tmpl.find(".end-time").val(), DATETIME_FORMAT);
- if (startDate.valueOf() > endDate.valueOf()) {
- if (isStart) {
- _tmpl.find(".end-date").val(startDate.format(DATE_FORMAT));
- _tmpl.find(".end-date").datepicker('setValue', startDate.format(DATE_FORMAT));
- _tmpl.find(".end-date").data("original-val", _tmpl.find(".end-date").val());
- _tmpl.find(".end-time").val(startDate.format(TIME_FORMAT));
- }
- else {
- if (_tmpl.find(".end-date").val() == _tmpl.find(".start-date").val()) {
- _tmpl.find(".end-time").val(startDate.format(TIME_FORMAT));
- _tmpl.find(".end-time").data("timepicker").setValues(startDate.format(TIME_FORMAT));
- }
- else {
- _tmpl.find(".end-date").val(_tmpl.find(".end-date").data("original-val"));
- _tmpl.find(".end-date").datepicker("setValue", _tmpl.find(".end-date").data("original-val"));
- }
- // non-sticky error notification
- $.jHueNotify.notify({
- level: "ERROR",
- message: "The end cannot be before the starting moment"
- });
- }
- }
- else {
- _tmpl.find(".end-date").data("original-val", _tmpl.find(".end-date").val());
- _tmpl.find(".start-date").datepicker("hide");
- _tmpl.find(".end-date").datepicker("hide");
- }
- var _calculatedStartDate = moment(_tmpl.find(".start-date").val() + " " + _tmpl.find(".start-time").val(), DATETIME_FORMAT).utc();
- var _calculatedEndDate = moment(_tmpl.find(".end-date").val() + " " + _tmpl.find(".end-time").val(), DATETIME_FORMAT).utc();
- _options.min(_calculatedStartDate.format("YYYY-MM-DD[T]HH:mm:ss[Z]"));
- _options.start(_options.min());
- _options.max(_calculatedEndDate.format("YYYY-MM-DD[T]HH:mm:ss[Z]"));
- _options.end(_options.max());
- _tmpl.find(".start-date-custom").val(_options.min());
- _tmpl.find(".end-date-custom").val(_options.max());
- var _opts = [];
- // hide not useful options from interval
- if (_calculatedEndDate.diff(_calculatedStartDate, 'minutes') > 1 && _calculatedEndDate.diff(_calculatedStartDate, 'minutes') <= 60) {
- _opts = enableOptions("200MILLISECONDS", "1SECONDS", "1MINUTES", "5MINUTES", "10MINUTES", "30MINUTES");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'hours') > 1 && _calculatedEndDate.diff(_calculatedStartDate, 'hours') <= 12) {
- _opts = enableOptions("5MINUTES", "10MINUTES", "30MINUTES", "1HOURS", "3HOURS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'hours') > 12 && _calculatedEndDate.diff(_calculatedStartDate, 'hours') < 36) {
- _opts = enableOptions("10MINUTES", "30MINUTES", "1HOURS", "3HOURS", "12HOURS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'days') > 1 && _calculatedEndDate.diff(_calculatedStartDate, 'days') <= 7) {
- _opts = enableOptions("30MINUTES", "1HOURS", "3HOURS", "12HOURS", "1DAYS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'days') > 7 && _calculatedEndDate.diff(_calculatedStartDate, 'days') <= 14) {
- _opts = enableOptions("3HOURS", "12HOURS", "1DAYS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'days') > 14 && _calculatedEndDate.diff(_calculatedStartDate, 'days') <= 31) {
- _opts = enableOptions("12HOURS", "1DAYS", "7DAYS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'months') > 1) {
- _opts = enableOptions("1DAYS", "7DAYS", "1MONTHS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'months') > 6) {
- _opts = enableOptions("1DAYS", "7DAYS", "1MONTHS", "6MONTHS");
- }
- if (_calculatedEndDate.diff(_calculatedStartDate, 'months') > 12) {
- _opts = enableOptions("7DAYS", "1MONTHS", "6MONTHS", "1YEARS");
- }
- $(".interval-select").html(renderOptions(_opts));
- matchIntervals();
- }
- }
- }
- ko.bindingHandlers.augmenthtml = {
- render: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- var _val = ko.unwrap(valueAccessor());
- var _enc = $("<span>").html(_val);
- if (_enc.find("style").length > 0) {
- var parser = new less.Parser();
- $(_enc.find("style")).each(function (cnt, item) {
- var _less = "#result-container {" + $(item).text() + "}";
- try {
- parser.parse(_less, function (err, tree) {
- $(item).text(tree.toCSS());
- });
- }
- catch (e) {
- }
- });
- $(element).html(_enc.html());
- }
- else {
- $(element).html(_val);
- }
- },
- init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- ko.bindingHandlers.augmenthtml.render(element, valueAccessor, allBindingsAccessor, viewModel);
- },
- update: function (element, valueAccessor, allBindingsAccessor) {
- ko.bindingHandlers.augmenthtml.render(element, valueAccessor, allBindingsAccessor, viewModel);
- }
- }
- ko.bindingHandlers.clearable = {
- init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- var _el = $(element);
- function tog(v) {
- return v ? "addClass" : "removeClass";
- }
- _el.addClass("clearable");
- _el
- .on("input", function () {
- _el[tog(this.value)]("x");
- })
- .on("change", function () {
- valueAccessor()(_el.val());
- })
- .on("blur", function () {
- valueAccessor()(_el.val());
- })
- .on("mousemove", function (e) {
- _el[tog(this.offsetWidth - 18 < e.clientX - this.getBoundingClientRect().left)]("onX");
- })
- .on("click", function (e) {
- if (this.offsetWidth - 18 < e.clientX - this.getBoundingClientRect().left) {
- _el.removeClass("x onX").val("");
- valueAccessor()("");
- }
- });
- if (allBindingsAccessor().valueUpdate != null && allBindingsAccessor().valueUpdate == "afterkeydown"){
- _el.on("keyup", function () {
- valueAccessor()(_el.val());
- });
- }
- },
- update: function (element, valueAccessor, allBindingsAccessor) {
- $(element).val(ko.unwrap(valueAccessor()));
- }
- }
- ko.bindingHandlers.spinedit = {
- init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- $(element).spinedit({
- minimum: 0,
- maximum: 10000,
- step: 5,
- value: ko.unwrap(valueAccessor()),
- numberOfDecimals: 0
- });
- $(element).on("valueChanged", function (e) {
- valueAccessor()(e.value);
- });
- },
- update: function (element, valueAccessor, allBindingsAccessor) {
- $(element).spinedit("setValue", ko.unwrap(valueAccessor()));
- }
- }
- ko.bindingHandlers.codemirror = {
- init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
- var options = $.extend(valueAccessor(), {});
- var editor = CodeMirror.fromTextArea(element, options);
- element.editor = editor;
- editor.setValue(options.data());
- editor.refresh();
- var wrapperElement = $(editor.getWrapperElement());
- $(document).on("refreshCodemirror", function () {
- editor.setSize("100%", 300);
- editor.refresh();
- });
- $(document).on("addFieldToSource", function (e, field) {
- if ($(element).data("template")) {
- editor.replaceSelection("{{" + field.name() + "}}");
- }
- });
- $(document).on("addFunctionToSource", function (e, fn) {
- if ($(element).data("template")) {
- editor.replaceSelection(fn);
- }
- });
- $(".chosen-select").chosen({
- disable_search_threshold: 10,
- width: "75%"
- });
- $('.chosen-select').trigger('chosen:updated');
- var sourceDelay = -1;
- editor.on("change", function (cm) {
- clearTimeout(sourceDelay);
- var _cm = cm;
- sourceDelay = setTimeout(function () {
- valueAccessor().data(_cm.getValue());
- if ($(".widget-html-pill").parent().hasClass("active")) {
- $("[contenteditable=true]").html(stripHtmlFromFunctions(valueAccessor().data()));
- }
- }, 100);
- });
- ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
- wrapperElement.remove();
- });
- },
- update: function (element, valueAccessor, allBindingsAccessor) {
- var editor = element.editor;
- editor.refresh();
- }
- };
- ko.bindingHandlers.chosen = {
- init: function (element) {
- ko.bindingHandlers.options.init(element);
- $(element).chosen({disable_search_threshold: 5});
- },
- update: function (element, valueAccessor, allBindings) {
- ko.bindingHandlers.options.update(element, valueAccessor, allBindings);
- $(element).trigger('chosen:updated');
- }
- };
- ko.bindingHandlers.tooltip = {
- init: function (element, valueAccessor) {
- var local = ko.utils.unwrapObservable(valueAccessor()),
- options = {};
- ko.utils.extend(options, local);
- $(element).tooltip(options);
- ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
- $(element).tooltip("destroy");
- });
- }
- };
- ko.bindingHandlers.typeahead = {
- init: function (element, valueAccessor) {
- var binding = this;
- var elem = $(element);
- var value = valueAccessor();
- var _options = {
- source: function () {
- return ko.utils.unwrapObservable(value.source);
- },
- onselect: function (val) {
- value.target(val);
- }
- }
- if (value.triggerOnFocus){
- _options.minLength = 0;
- }
- elem.typeahead(_options);
- if (value.triggerOnFocus){
- elem.on('focus', function(){
- elem.trigger("keyup");
- });
- }
- elem.blur(function () {
- value.target(elem.val());
- });
- },
- update: function (element, valueAccessor) {
- var elem = $(element);
- var value = valueAccessor();
- elem.val(value.target());
- }
- };
|