| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975 |
- /*!
- * weui.js v1.2.1 (https://weui.io)
- * Copyright 2019, wechat ui team
- * MIT license
- */
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["weui"] = factory();
- else
- root["weui"] = factory();
- })(this, function() {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId])
- /******/ return installedModules[moduleId].exports;
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ exports: {},
- /******/ id: moduleId,
- /******/ loaded: false
- /******/ };
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/ // Flag the module as loaded
- /******/ module.loaded = true;
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(0);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _dialog = __webpack_require__(1);
- var _dialog2 = _interopRequireDefault(_dialog);
- var _alert = __webpack_require__(7);
- var _alert2 = _interopRequireDefault(_alert);
- var _confirm = __webpack_require__(8);
- var _confirm2 = _interopRequireDefault(_confirm);
- var _toast = __webpack_require__(9);
- var _toast2 = _interopRequireDefault(_toast);
- var _loading = __webpack_require__(11);
- var _loading2 = _interopRequireDefault(_loading);
- var _actionSheet = __webpack_require__(13);
- var _actionSheet2 = _interopRequireDefault(_actionSheet);
- var _topTips = __webpack_require__(15);
- var _topTips2 = _interopRequireDefault(_topTips);
- var _searchBar = __webpack_require__(17);
- var _searchBar2 = _interopRequireDefault(_searchBar);
- var _tab = __webpack_require__(18);
- var _tab2 = _interopRequireDefault(_tab);
- var _form = __webpack_require__(19);
- var _form2 = _interopRequireDefault(_form);
- var _uploader = __webpack_require__(20);
- var _uploader2 = _interopRequireDefault(_uploader);
- var _picker = __webpack_require__(24);
- var _gallery = __webpack_require__(30);
- var _gallery2 = _interopRequireDefault(_gallery);
- var _slider = __webpack_require__(32);
- var _slider2 = _interopRequireDefault(_slider);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- exports.default = {
- dialog: _dialog2.default,
- alert: _alert2.default,
- confirm: _confirm2.default,
- toast: _toast2.default,
- loading: _loading2.default,
- actionSheet: _actionSheet2.default,
- topTips: _topTips2.default,
- searchBar: _searchBar2.default,
- tab: _tab2.default,
- form: _form2.default,
- uploader: _uploader2.default,
- picker: _picker.picker,
- datePicker: _picker.datePicker,
- gallery: _gallery2.default,
- slider: _slider2.default
- };
- module.exports = exports['default'];
- /***/ }),
- /* 1 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _dialog = __webpack_require__(6);
- var _dialog2 = _interopRequireDefault(_dialog);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _sington = void 0;
- /**
- * dialog,弹窗,alert和confirm的父类
- *
- * @param {object=} options 配置项
- * @param {string=} options.title 弹窗的标题
- * @param {string=} options.content 弹窗的内容
- * @param {string=} options.className 弹窗的自定义类名
- * @param {array=} options.buttons 按钮配置项
- *
- * @param {string} [options.buttons[].label=确定] 按钮的文字
- * @param {string} [options.buttons[].type=primary] 按钮的类型 [primary, default]
- * @param {function} [options.buttons[].onClick=$.noop] 按钮的回调
- *
- * @example
- * weui.dialog({
- * title: 'dialog标题',
- * content: 'dialog内容',
- * className: 'custom-classname',
- * buttons: [{
- * label: '取消',
- * type: 'default',
- * onClick: function () { alert('取消') }
- * }, {
- * label: '确定',
- * type: 'primary',
- * onClick: function () { alert('确定') }
- * }]
- * });
- *
- * // 主动关闭
- * var $dialog = weui.dialog({...});
- * $dialog.hide(function(){
- * console.log('`dialog` has been hidden');
- * });
- */
- function dialog() {
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- if (_sington) return _sington;
- var isAndroid = _util2.default.os.android;
- options = _util2.default.extend({
- title: null,
- content: '',
- className: '',
- buttons: [{
- label: '确定',
- type: 'primary',
- onClick: _util2.default.noop
- }],
- isAndroid: isAndroid
- }, options);
- var $dialogWrap = (0, _util2.default)(_util2.default.render(_dialog2.default, options));
- var $dialog = $dialogWrap.find('.weui-dialog');
- var $mask = $dialogWrap.find('.weui-mask');
- function _hide(callback) {
- _hide = _util2.default.noop; // 防止二次调用导致报错
- $mask.addClass('weui-animate-fade-out');
- $dialog.addClass('weui-animate-fade-out').on('animationend webkitAnimationEnd', function () {
- $dialogWrap.remove();
- _sington = false;
- callback && callback();
- });
- }
- function hide(callback) {
- _hide(callback);
- }
- (0, _util2.default)('body').append($dialogWrap);
- // 不能直接把.weui-animate-fade-in加到$dialog,会导致mask的z-index有问题
- $mask.addClass('weui-animate-fade-in');
- $dialog.addClass('weui-animate-fade-in');
- $dialogWrap.on('click', '.weui-dialog__btn', function (evt) {
- var index = (0, _util2.default)(this).index();
- if (options.buttons[index].onClick) {
- if (options.buttons[index].onClick.call(this, evt) !== false) hide();
- } else {
- hide();
- }
- }).on('touchmove', function (evt) {
- evt.stopPropagation();
- evt.preventDefault();
- });
- _sington = $dialogWrap[0];
- _sington.hide = hide;
- return _sington;
- }
- exports.default = dialog;
- module.exports = exports['default'];
- /***/ }),
- /* 2 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- __webpack_require__(3);
- var _objectAssign = __webpack_require__(4);
- var _objectAssign2 = _interopRequireDefault(_objectAssign);
- var _balajs = __webpack_require__(5);
- var _balajs2 = _interopRequireDefault(_balajs);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // 其实,$ 的原型就是一个数组,拥有数组的各种方法
- // 这里只是库内部使用,所以通过文档约束,不做容错校验,达到代码最小化
- /* 判断系统 */
- function _detect(ua) {
- var os = this.os = {},
- android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
- if (android) {
- os.android = true;
- os.version = android[2];
- }
- }
- _detect.call(_balajs2.default, navigator.userAgent);
- (0, _objectAssign2.default)(_balajs2.default.fn, {
- /**
- * 只能是一个 HTMLElement 元素或者 HTMLElement 数组,不支持字符串
- * @param {Element|Element[]} $child
- * @returns {append}
- */
- append: function append($child) {
- if (!($child instanceof HTMLElement)) {
- $child = $child[0];
- }
- this.forEach(function ($element) {
- $element.appendChild($child);
- });
- return this;
- },
- /**
- *
- * @returns {remove}
- */
- remove: function remove() {
- this.forEach(function ($element) {
- $element.parentNode.removeChild($element);
- });
- return this;
- },
- /**
- *
- * @param selector
- * @returns {HTMLElement}
- */
- find: function find(selector) {
- return (0, _balajs2.default)(selector, this);
- },
- /**
- *
- * @param {String} className
- * @returns {addClass}
- */
- addClass: function addClass(className) {
- this.forEach(function ($element) {
- // http://caniuse.com/#search=classList
- $element.classList.add(className);
- });
- return this;
- },
- /**
- *
- * @param {String} className
- * @returns {removeClass}
- */
- removeClass: function removeClass(className) {
- this.forEach(function ($element) {
- // http://caniuse.com/#search=classList
- $element.classList.remove(className);
- });
- return this;
- },
- /**
- *
- * @param index
- * @returns {*|jQuery|HTMLElement}
- */
- eq: function eq(index) {
- return (0, _balajs2.default)(this[index]);
- },
- /**
- *
- * @returns {show}
- */
- show: function show() {
- this.forEach(function ($element) {
- $element.style.display = 'block';
- });
- return this;
- },
- /**
- *
- * @returns {hide}
- */
- hide: function hide() {
- this.forEach(function ($element) {
- $element.style.display = 'none';
- });
- return this;
- },
- /**
- *
- * @param html 目前只能接受字符串
- * @returns {html}
- */
- html: function html(_html) {
- this.forEach(function ($element) {
- $element.innerHTML = _html;
- });
- return this;
- },
- /**
- *
- * @param {Object} obj 目前只能接受object
- * @returns {css}
- */
- css: function css(obj) {
- var _this = this;
- Object.keys(obj).forEach(function (key) {
- _this.forEach(function ($element) {
- $element.style[key] = obj[key];
- });
- });
- return this;
- },
- /**
- *
- * @param eventType
- * @param selector
- * @param handler
- */
- on: function on(eventType, selector, handler) {
- var isDelegate = typeof selector === 'string' && typeof handler === 'function';
- if (!isDelegate) {
- handler = selector;
- }
- this.forEach(function ($element) {
- eventType.split(' ').forEach(function (event) {
- $element.addEventListener(event, function (evt) {
- if (isDelegate) {
- // http://caniuse.com/#search=closest
- if (this.contains(evt.target.closest(selector))) {
- handler.call(evt.target, evt);
- }
- } else {
- handler.call(this, evt);
- }
- });
- });
- });
- return this;
- },
- /**
- *
- * @param {String} eventType
- * @param {String|Function} selector
- * @param {Function=} handler
- * @returns {off}
- */
- off: function off(eventType, selector, handler) {
- if (typeof selector === 'function') {
- handler = selector;
- selector = null;
- }
- this.forEach(function ($element) {
- eventType.split(' ').forEach(function (event) {
- if (typeof selector === 'string') {
- $element.querySelectorAll(selector).forEach(function ($element) {
- $element.removeEventListener(event, handler);
- });
- } else {
- $element.removeEventListener(event, handler);
- }
- });
- });
- return this;
- },
- /**
- *
- * @returns {Number}
- */
- index: function index() {
- var $element = this[0];
- var $parent = $element.parentNode;
- return Array.prototype.indexOf.call($parent.children, $element);
- },
- /**
- * @desc 因为off方法目前不可以移除绑定的匿名函数,现在直接暴力移除所有listener
- * @returns {offAll}
- */
- offAll: function offAll() {
- var _this2 = this;
- this.forEach(function ($element, index) {
- var clone = $element.cloneNode(true);
- $element.parentNode.replaceChild(clone, $element);
- _this2[index] = clone;
- });
- return this;
- },
- /**
- *
- * @returns {*}
- */
- val: function val() {
- var _arguments = arguments;
- if (arguments.length) {
- this.forEach(function ($element) {
- $element.value = _arguments[0];
- });
- return this;
- }
- return this[0].value;
- },
- /**
- *
- * @returns {*}
- */
- attr: function attr() {
- var _arguments2 = arguments;
- if (_typeof(arguments[0]) == 'object') {
- var attrsObj = arguments[0];
- var that = this;
- Object.keys(attrsObj).forEach(function (attr) {
- that.forEach(function ($element) {
- $element.setAttribute(attr, attrsObj[attr]);
- });
- });
- return this;
- }
- if (typeof arguments[0] == 'string' && arguments.length < 2) {
- return this[0].getAttribute(arguments[0]);
- }
- this.forEach(function ($element) {
- $element.setAttribute(_arguments2[0], _arguments2[1]);
- });
- return this;
- }
- });
- (0, _objectAssign2.default)(_balajs2.default, {
- extend: _objectAssign2.default,
- /**
- * noop
- */
- noop: function noop() {},
- /**
- * render
- * 取值:<%= variable %>
- * 表达式:<% if {} %>
- * 例子:
- * <div>
- * <div class="weui-mask"></div>
- * <div class="weui-dialog">
- * <% if(typeof title === 'string'){ %>
- * <div class="weui-dialog__hd"><strong class="weui-dialog__title"><%=title%></strong></div>
- * <% } %>
- * <div class="weui-dialog__bd"><%=content%></div>
- * <div class="weui-dialog__ft">
- * <% for(var i = 0; i < buttons.length; i++){ %>
- * <a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_<%=buttons[i]['type']%>"><%=buttons[i]['label']%></a>
- * <% } %>
- * </div>
- * </div>
- * </div>
- * A very simple template engine
- * @param {String} tpl
- * @param {Object=} data
- * @returns {String}
- */
- render: function render(tpl, data) {
- var code = 'var p=[];with(this){p.push(\'' + tpl.replace(/[\r\t\n]/g, ' ').split('<%').join('\t').replace(/((^|%>)[^\t]*)'/g, '$1\r').replace(/\t=(.*?)%>/g, '\',$1,\'').split('\t').join('\');').split('%>').join('p.push(\'').split('\r').join('\\\'') + '\');}return p.join(\'\');';
- return new Function(code).apply(data);
- },
- /**
- * getStyle 获得元素计算后的样式值
- * (from http://stackoverflow.com/questions/2664045/how-to-get-an-html-elements-style-values-in-javascript)
- */
- getStyle: function getStyle(el, styleProp) {
- var value,
- defaultView = (el.ownerDocument || document).defaultView;
- // W3C standard way:
- if (defaultView && defaultView.getComputedStyle) {
- // sanitize property name to css notation
- // (hypen separated words eg. font-Size)
- styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase();
- return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
- } else if (el.currentStyle) {
- // IE
- // sanitize property name to camelCase
- styleProp = styleProp.replace(/\-(\w)/g, function (str, letter) {
- return letter.toUpperCase();
- });
- value = el.currentStyle[styleProp];
- // convert other units to pixels on IE
- if (/^\d+(em|pt|%|ex)?$/i.test(value)) {
- return function (value) {
- var oldLeft = el.style.left,
- oldRsLeft = el.runtimeStyle.left;
- el.runtimeStyle.left = el.currentStyle.left;
- el.style.left = value || 0;
- value = el.style.pixelLeft + 'px';
- el.style.left = oldLeft;
- el.runtimeStyle.left = oldRsLeft;
- return value;
- }(value);
- }
- return value;
- }
- }
- });
- exports.default = _balajs2.default;
- module.exports = exports['default'];
- /***/ }),
- /* 3 */
- /***/ (function(module, exports) {
- // element-closest | CC0-1.0 | github.com/jonathantneal/closest
- (function (ElementProto) {
- if (typeof ElementProto.matches !== 'function') {
- ElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {
- var element = this;
- var elements = (element.document || element.ownerDocument).querySelectorAll(selector);
- var index = 0;
- while (elements[index] && elements[index] !== element) {
- ++index;
- }
- return Boolean(elements[index]);
- };
- }
- if (typeof ElementProto.closest !== 'function') {
- ElementProto.closest = function closest(selector) {
- var element = this;
- while (element && element.nodeType === 1) {
- if (element.matches(selector)) {
- return element;
- }
- element = element.parentNode;
- }
- return null;
- };
- }
- })(window.Element.prototype);
- /***/ }),
- /* 4 */
- /***/ (function(module, exports) {
- /*
- object-assign
- (c) Sindre Sorhus
- @license MIT
- */
- 'use strict';
- /* eslint-disable no-unused-vars */
- var getOwnPropertySymbols = Object.getOwnPropertySymbols;
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- var propIsEnumerable = Object.prototype.propertyIsEnumerable;
- function toObject(val) {
- if (val === null || val === undefined) {
- throw new TypeError('Object.assign cannot be called with null or undefined');
- }
- return Object(val);
- }
- function shouldUseNative() {
- try {
- if (!Object.assign) {
- return false;
- }
- // Detect buggy property enumeration order in older V8 versions.
- // https://bugs.chromium.org/p/v8/issues/detail?id=4118
- var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
- test1[5] = 'de';
- if (Object.getOwnPropertyNames(test1)[0] === '5') {
- return false;
- }
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test2 = {};
- for (var i = 0; i < 10; i++) {
- test2['_' + String.fromCharCode(i)] = i;
- }
- var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
- return test2[n];
- });
- if (order2.join('') !== '0123456789') {
- return false;
- }
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test3 = {};
- 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
- test3[letter] = letter;
- });
- if (Object.keys(Object.assign({}, test3)).join('') !==
- 'abcdefghijklmnopqrst') {
- return false;
- }
- return true;
- } catch (err) {
- // We don't expect any of the above to throw, but better to be safe.
- return false;
- }
- }
- module.exports = shouldUseNative() ? Object.assign : function (target, source) {
- var from;
- var to = toObject(target);
- var symbols;
- for (var s = 1; s < arguments.length; s++) {
- from = Object(arguments[s]);
- for (var key in from) {
- if (hasOwnProperty.call(from, key)) {
- to[key] = from[key];
- }
- }
- if (getOwnPropertySymbols) {
- symbols = getOwnPropertySymbols(from);
- for (var i = 0; i < symbols.length; i++) {
- if (propIsEnumerable.call(from, symbols[i])) {
- to[symbols[i]] = from[symbols[i]];
- }
- }
- }
- }
- return to;
- };
- /***/ }),
- /* 5 */
- /***/ (function(module, exports, __webpack_require__) {
- var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(root, $) {
- $ = (function(document, s_addEventListener, s_querySelectorAll) {
- function $(s, context, bala) {
- bala = Object.create($.fn);
- s && bala.push.apply(bala, // if s is truly then push the following
- s[s_addEventListener] // if arg is node or window,
- ? [s] // then pass [s]
- : "" + s === s // else if arg is a string
- ? /</.test(s) // if the string contains "<" (if HTML code is passed)
- // then parse it and return node.children
- // use 'addEventListener' (HTMLUnknownElement) if content is not presented
- ? ((context = document.createElement(context || s_addEventListener)).innerHTML = s
- , context.children)
- : context // else if context is truly
- ? ((context = $(context)[0]) // if context element is found
- ? context[s_querySelectorAll](s) // then select element from context
- : bala) // else pass [] (context isn't found)
- : document[s_querySelectorAll](s) // else select elements globally
- : typeof s == 'function' // else if function is passed
- // if DOM is ready
- // readyState[7] means readyState value is "interactive" or "complete" (not "loading")
- ? document.readyState[7]
- ? s() // then run given function
- : document[s_addEventListener]('DOMContentLoaded', s) // else wait for DOM ready
- : s); // else guessing that s variable is array-like Object
- return bala;
- }
- $.fn = [];
- $.one = function(s, context) {
- return $(s, context)[0] || null;
- };
- return $;
- })(document, 'addEventListener', 'querySelectorAll');
- if (true) {
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
- return $;
- }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else if (typeof module == 'object' && module.exports) {
- module.exports = $;
- } else {
- root.$ = $;
- }
- })(this);
- /***/ }),
- /* 6 */
- /***/ (function(module, exports) {
- module.exports = "<div class=\"<%=className%>\"> <div class=weui-mask></div> <div class=\"weui-dialog <% if(isAndroid){ %> weui-skin_android <% } %>\"> <% if(title){ %> <div class=weui-dialog__hd><strong class=weui-dialog__title><%=title%></strong></div> <% } %> <div class=weui-dialog__bd><%=content%></div> <div class=weui-dialog__ft> <% for(var i = 0; i < buttons.length; i++){ %> <a href=javascript:; class=\"weui-dialog__btn weui-dialog__btn_<%=buttons[i]['type']%>\"><%=buttons[i]['label']%></a> <% } %> </div> </div> </div> ";
- /***/ }),
- /* 7 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _dialog = __webpack_require__(1);
- var _dialog2 = _interopRequireDefault(_dialog);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * alert 警告弹框,功能类似于浏览器自带的 alert 弹框,用于提醒、警告用户简单扼要的信息,只有一个“确认”按钮,点击“确认”按钮后关闭弹框。
- * @param {string} content 弹窗内容
- * @param {function=} yes 点击确定按钮的回调
- * @param {object=} options 配置项
- * @param {string=} options.title 弹窗的标题
- * @param {string=} options.className 自定义类名
- * @param {array=} options.buttons 按钮配置项,详情参考dialog
- *
- * @example
- * weui.alert('普通的alert');
- * weui.alert('带回调的alert', function(){ console.log('ok') });
- * var alertDom = weui.alert('手动关闭的alert', function(){
- * return false; // 不关闭弹窗,可用alertDom.hide()来手动关闭
- * });
- * weui.alert('自定义标题的alert', { title: '自定义标题' });
- * weui.alert('带回调的自定义标题的alert', function(){
- * console.log('ok')
- * }, {
- * title: '自定义标题'
- * });
- * weui.alert('自定义按钮的alert', {
- * title: '自定义按钮的alert',
- * buttons: [{
- * label: 'OK',
- * type: 'primary',
- * onClick: function(){ console.log('ok') }
- * }]
- * });
- *
- * // 多次使用
- * var alert = weui.alert('hello');
- * alert.hide(function(){
- * weui.alert('world');
- * });
- */
- function alert() {
- var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
- var yes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util2.default.noop;
- var options = arguments[2];
- if ((typeof yes === 'undefined' ? 'undefined' : _typeof(yes)) === 'object') {
- options = yes;
- yes = _util2.default.noop;
- }
- options = _util2.default.extend({
- content: content,
- buttons: [{
- label: '确定',
- type: 'primary',
- onClick: yes
- }]
- }, options);
- return (0, _dialog2.default)(options);
- }
- exports.default = alert;
- module.exports = exports['default'];
- /***/ }),
- /* 8 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _dialog = __webpack_require__(1);
- var _dialog2 = _interopRequireDefault(_dialog);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * 确认弹窗
- * @param {string} content 弹窗内容
- * @param {function=} yes 点击确定按钮的回调
- * @param {function=} no 点击取消按钮的回调
- * @param {object=} options 配置项
- * @param {string=} options.title 弹窗的标题
- * @param {string=} options.className 自定义类名
- * @param {array=} options.buttons 按钮配置项,详情参考dialog
- *
- * @example
- * weui.confirm('普通的confirm');
- * weui.confirm('自定义标题的confirm', { title: '自定义标题' });
- * weui.confirm('带回调的confirm', function(){ console.log('yes') }, function(){ console.log('no') });
- * var confirmDom = weui.confirm('手动关闭的confirm', function(){
- * return false; // 不关闭弹窗,可用confirmDom.hide()来手动关闭
- * });
- * weui.confirm('带回调的自定义标题的confirm', function(){ console.log('yes') }, function(){ console.log('no') }, {
- * title: '自定义标题'
- * });
- * weui.confirm('自定义按钮的confirm', {
- * title: '自定义按钮的confirm',
- * buttons: [{
- * label: 'NO',
- * type: 'default',
- * onClick: function(){ console.log('no') }
- * }, {
- * label: 'YES',
- * type: 'primary',
- * onClick: function(){ console.log('yes') }
- * }]
- * });
- */
- function confirm() {
- var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
- var yes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util2.default.noop;
- var no = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _util2.default.noop;
- var options = arguments[3];
- if ((typeof yes === 'undefined' ? 'undefined' : _typeof(yes)) === 'object') {
- options = yes;
- yes = _util2.default.noop;
- } else if ((typeof no === 'undefined' ? 'undefined' : _typeof(no)) === 'object') {
- options = no;
- no = _util2.default.noop;
- }
- options = _util2.default.extend({
- content: content,
- buttons: [{
- label: '取消',
- type: 'default',
- onClick: no
- }, {
- label: '确定',
- type: 'primary',
- onClick: yes
- }]
- }, options);
- return (0, _dialog2.default)(options);
- }
- exports.default = confirm;
- module.exports = exports['default'];
- /***/ }),
- /* 9 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _toast = __webpack_require__(10);
- var _toast2 = _interopRequireDefault(_toast);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _sington = void 0;
- /**
- * toast 一般用于操作成功时的提示场景
- * @param {string} content toast的文字
- * @param {Object|function=} options 配置项或回调
- * @param {number=} [options.duration=3000] 多少毫秒后关闭toast
- * @param {function=} options.callback 关闭后的回调
- * @param {string=} options.className 自定义类名
- *
- * @example
- * weui.toast('操作成功', 3000);
- * weui.toast('操作成功', {
- * duration: 3000,
- * className: 'custom-classname',
- * callback: function(){ console.log('close') }
- * });
- */
- function toast() {
- var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- if (_sington) return _sington;
- if (typeof options === 'number') {
- options = {
- duration: options
- };
- }
- if (typeof options === 'function') {
- options = {
- callback: options
- };
- }
- options = _util2.default.extend({
- content: content,
- duration: 3000,
- callback: _util2.default.noop,
- className: ''
- }, options);
- var $toastWrap = (0, _util2.default)(_util2.default.render(_toast2.default, options));
- var $toast = $toastWrap.find('.weui-toast');
- var $mask = $toastWrap.find('.weui-mask');
- (0, _util2.default)('body').append($toastWrap);
- $toast.addClass('weui-animate-fade-in');
- $mask.addClass('weui-animate-fade-in');
- setTimeout(function () {
- $mask.addClass('weui-animate-fade-out');
- $toast.addClass('weui-animate-fade-out').on('animationend webkitAnimationEnd', function () {
- $toastWrap.remove();
- _sington = false;
- options.callback();
- });
- }, options.duration);
- _sington = $toastWrap[0];
- return $toastWrap[0];
- }
- exports.default = toast;
- module.exports = exports['default'];
- /***/ }),
- /* 10 */
- /***/ (function(module, exports) {
- module.exports = "<div class=\"<%= className %>\"> <div class=weui-mask_transparent></div> <div class=weui-toast> <i class=\"weui-icon_toast weui-icon-success-no-circle\"></i> <p class=weui-toast__content><%=content%></p> </div> </div> ";
- /***/ }),
- /* 11 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _loading = __webpack_require__(12);
- var _loading2 = _interopRequireDefault(_loading);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _sington = void 0;
- /**
- * loading
- * @param {string} content loading的文字
- * @param {object=} options 配置项
- * @param {string=} options.className 自定义类名
- *
- * @example
- * var loading = weui.loading('loading', {
- * className: 'custom-classname'
- * });
- * setTimeout(function () {
- * loading.hide(function() {
- * console.log('`loading` has been hidden');
- * });
- * }, 3000);
- */
- function loading() {
- var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- if (_sington) return _sington;
- options = _util2.default.extend({
- content: content,
- className: ''
- }, options);
- var $loadingWrap = (0, _util2.default)(_util2.default.render(_loading2.default, options));
- var $loading = $loadingWrap.find('.weui-toast');
- var $mask = $loadingWrap.find('.weui-mask');
- function _hide(callback) {
- _hide = _util2.default.noop; // 防止二次调用导致报错
- $mask.addClass('weui-animate-fade-out');
- $loading.addClass('weui-animate-fade-out').on('animationend webkitAnimationEnd', function () {
- $loadingWrap.remove();
- _sington = false;
- callback && callback();
- });
- }
- function hide(callback) {
- _hide(callback);
- }
- (0, _util2.default)('body').append($loadingWrap);
- $loading.addClass('weui-animate-fade-in');
- $mask.addClass('weui-animate-fade-in');
- _sington = $loadingWrap[0];
- _sington.hide = hide;
- return _sington;
- }
- exports.default = loading;
- module.exports = exports['default'];
- /***/ }),
- /* 12 */
- /***/ (function(module, exports) {
- module.exports = "<div class=\"weui-loading_toast <%= className %>\"> <div class=weui-mask_transparent></div> <div class=weui-toast> <i class=\"weui-loading weui-icon_toast\"></i> <p class=weui-toast__content><%=content%></p> </div> </div> ";
- /***/ }),
- /* 13 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _actionSheet = __webpack_require__(14);
- var _actionSheet2 = _interopRequireDefault(_actionSheet);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _sington = void 0;
- /**
- * actionsheet 弹出式菜单
- * @param {array} menus 上层的选项
- * @param {string} menus[].label 选项的文字
- * @param {function} menus[].onClick 选项点击时的回调
- *
- * @param {array} actions 下层的选项
- * @param {string} actions[].label 选项的文字
- * @param {function} actions[].onClick 选项点击时的回调
- *
- * @param {object=} options 配置项
- * @param {string=} options.title actionSheet的title,如果isAndroid=true,则不会显示
- * @param {string=} options.className 自定义类名
- * @param {function=} [options.onClose] actionSheet关闭后的回调
- *
- * @example
- * weui.actionSheet([
- * {
- * label: '拍照',
- * onClick: function () {
- * console.log('拍照');
- * }
- * }, {
- * label: '从相册选择',
- * onClick: function () {
- * console.log('从相册选择');
- * }
- * }, {
- * label: '其他',
- * onClick: function () {
- * console.log('其他');
- * }
- * }
- * ], [
- * {
- * label: '取消',
- * onClick: function () {
- * console.log('取消');
- * }
- * }
- * ], {
- * className: 'custom-classname',
- * onClose: function(){
- * console.log('关闭');
- * }
- * });
- */
- function actionSheet() {
- var menus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var actions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- if (_sington) return _sington;
- var isAndroid = _util2.default.os.android;
- options = _util2.default.extend({
- menus: menus,
- actions: actions,
- title: '',
- className: '',
- isAndroid: isAndroid,
- onClose: _util2.default.noop
- }, options);
- var $actionSheetWrap = (0, _util2.default)(_util2.default.render(_actionSheet2.default, options));
- var $actionSheet = $actionSheetWrap.find('.weui-actionsheet');
- var $actionSheetMask = $actionSheetWrap.find('.weui-mask');
- function _hide(callback) {
- _hide = _util2.default.noop; // 防止二次调用导致报错
- $actionSheet.addClass(options.isAndroid ? 'weui-animate-fade-out' : 'weui-animate-slide-down');
- $actionSheetMask.addClass('weui-animate-fade-out').on('animationend webkitAnimationEnd', function () {
- $actionSheetWrap.remove();
- _sington = false;
- options.onClose();
- callback && callback();
- });
- }
- function hide(callback) {
- _hide(callback);
- }
- (0, _util2.default)('body').append($actionSheetWrap);
- // 这里获取一下计算后的样式,强制触发渲染. fix IOS10下闪现的问题
- _util2.default.getStyle($actionSheet[0], 'transform');
- $actionSheet.addClass(options.isAndroid ? 'weui-animate-fade-in' : 'weui-animate-slide-up');
- $actionSheetMask.addClass('weui-animate-fade-in').on('click', function () {
- hide();
- });
- $actionSheetWrap.find('.weui-actionsheet__menu').on('click', '.weui-actionsheet__cell', function (evt) {
- var index = (0, _util2.default)(this).index();
- menus[index].onClick.call(this, evt);
- hide();
- });
- $actionSheetWrap.find('.weui-actionsheet__action').on('click', '.weui-actionsheet__cell', function (evt) {
- var index = (0, _util2.default)(this).index();
- actions[index].onClick.call(this, evt);
- hide();
- });
- _sington = $actionSheetWrap[0];
- _sington.hide = hide;
- return _sington;
- }
- exports.default = actionSheet;
- module.exports = exports['default'];
- /***/ }),
- /* 14 */
- /***/ (function(module, exports) {
- module.exports = "<div class=\"<% if(isAndroid){ %>weui-skin_android <% } %><%= className %>\"> <div class=weui-mask></div> <div class=weui-actionsheet> <% if(!isAndroid && title){ %> <div class=weui-actionsheet__title> <p class=weui-actionsheet__title-text><%= title %></p> </div> <% } %> <div class=weui-actionsheet__menu> <% for(var i = 0; i < menus.length; i++){ %> <div class=weui-actionsheet__cell><%= menus[i].label %></div> <% } %> </div> <div class=weui-actionsheet__action> <% for(var j = 0; j < actions.length; j++){ %> <div class=weui-actionsheet__cell><%= actions[j].label %></div> <% } %> </div> </div> </div> ";
- /***/ }),
- /* 15 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _topTips = __webpack_require__(16);
- var _topTips2 = _interopRequireDefault(_topTips);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _toptips = null;
- /**
- * toptips 顶部报错提示
- * @param {string} content 报错的文字
- * @param {number|function|object=} options 多少毫秒后消失|消失后的回调|配置项
- * @param {number=} [options.duration=3000] 多少毫秒后消失
- * @param {string=} options.className 自定义类名
- * @param {function=} options.callback 消失后的回调
- *
- * @example
- * weui.topTips('请填写正确的字段');
- * weui.topTips('请填写正确的字段', 3000);
- * weui.topTips('请填写正确的字段', function(){ console.log('close') });
- * weui.topTips('请填写正确的字段', {
- * duration: 3000,
- * className: 'custom-classname',
- * callback: function(){ console.log('close') }
- * });
- *
- * // 主动关闭
- * var $topTips = weui.topTips('请填写正确的字段');
- * $topTips.hide(function() {
- * console.log('`topTips` has been hidden');
- * });
- */
- function topTips(content) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- if (typeof options === 'number') {
- options = {
- duration: options
- };
- }
- if (typeof options === 'function') {
- options = {
- callback: options
- };
- }
- options = _util2.default.extend({
- content: content,
- duration: 3000,
- callback: _util2.default.noop,
- className: ''
- }, options);
- var $topTips = (0, _util2.default)(_util2.default.render(_topTips2.default, options));
- function _hide(callback) {
- _hide = _util2.default.noop; // 防止二次调用导致报错
- $topTips.remove();
- callback && callback();
- options.callback();
- _toptips = null;
- }
- function hide(callback) {
- _hide(callback);
- }
- (0, _util2.default)('body').append($topTips);
- if (_toptips) {
- clearTimeout(_toptips.timeout);
- _toptips.hide();
- }
- _toptips = {
- hide: hide
- };
- _toptips.timeout = setTimeout(hide, options.duration);
- $topTips[0].hide = hide;
- return $topTips[0];
- }
- exports.default = topTips;
- module.exports = exports['default'];
- /***/ }),
- /* 16 */
- /***/ (function(module, exports) {
- module.exports = "<div class=\"weui-toptips weui-toptips_warn <%= className %>\" style=display:block><%= content %></div> ";
- /***/ }),
- /* 17 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * searchbar 搜索框,主要实现搜索框组件一些显隐逻辑
- * @param {string} selector searchbar的selector
- *
- * @example
- * #### html
- * ```html
- * <div class="weui-search-bar" id="searchBar">
- * <form class="weui-search-bar__form">
- * <div class="weui-search-bar__box">
- * <i class="weui-icon-search"></i>
- * <input type="search" class="weui-search-bar__input" placeholder="搜索" required="">
- * <a href="javascript:" class="weui-icon-clear"></a>
- * </div>
- * <label class="weui-search-bar__label">
- * <i class="weui-icon-search"></i>
- * <span>搜索</span>
- * </label>
- * </form>
- * <a href="javascript:" class="weui-search-bar__cancel-btn">取消</a>
- * </div>
- * ```
- *
- * #### js
- * ```javascript
- * weui.searchBar('#searchBar');
- * ```
- */
- function searchBar(selector) {
- var $eles = (0, _util2.default)(selector);
- $eles.forEach(function (ele) {
- var $searchBar = (0, _util2.default)(ele);
- var $searchLabel = $searchBar.find('.weui-search-bar__label');
- var $searchInput = $searchBar.find('.weui-search-bar__input');
- var $searchClear = $searchBar.find('.weui-icon-clear');
- var $searchCancel = $searchBar.find('.weui-search-bar__cancel-btn');
- function cancelSearch() {
- $searchInput.val('');
- $searchBar.removeClass('weui-search-bar_focusing');
- }
- $searchLabel.on('click', function () {
- $searchBar.addClass('weui-search-bar_focusing');
- $searchInput[0].focus();
- });
- $searchInput.on('blur', function () {
- if (!this.value.length) cancelSearch();
- });
- $searchClear.on('click', function () {
- $searchInput.val('');
- $searchInput[0].focus();
- });
- $searchCancel.on('click', function () {
- cancelSearch();
- $searchInput[0].blur();
- });
- });
- return $eles;
- } /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- exports.default = searchBar;
- module.exports = exports['default'];
- /***/ }),
- /* 18 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * tab tab导航栏
- * @param {string} selector tab的selector
- * @param {object=} options 配置项
- * @param {number=} [options.defaultIndex=0] 初始展示的index
- * @param {function=} options.onChange 点击tab时,返回对应的index
- *
- * @example
- * #### html
- * ```html
- * <div class="weui-tab" id="tab">
- * <div class="weui-navbar">
- * <div class="weui-navbar__item">反馈</div>
- * <div class="weui-navbar__item">表单</div>
- * <div class="weui-navbar__item">上传</div>
- * <div class="weui-navbar__item">其它</div>
- * </div>
- * <div class="weui-tab__panel">
- * <div class="weui-tab__content">反馈页</div>
- * <div class="weui-tab__content">表单页</div>
- * <div class="weui-tab__content">上传页</div>
- * <div class="weui-tab__content">其它页</div>
- * </div>
- * </div>
- * ```
- *
- * #### js
- * ```javascript
- * weui.tab('#tab',{
- * defaultIndex: 0,
- * onChange: function(index){
- * console.log(index);
- * }
- * });
- * ```
- */
- function tab(selector) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var $eles = (0, _util2.default)(selector);
- options = _util2.default.extend({
- defaultIndex: 0,
- onChange: _util2.default.noop
- }, options);
- $eles.forEach(function (ele) {
- var $tab = (0, _util2.default)(ele);
- var $tabItems = $tab.find('.weui-navbar__item, .weui-tabbar__item');
- var $tabContents = $tab.find('.weui-tab__content');
- $tabItems.eq(options.defaultIndex).addClass('weui-bar__item_on');
- $tabContents.eq(options.defaultIndex).show();
- $tabItems.on('click', function () {
- var $this = (0, _util2.default)(this),
- index = $this.index();
- $tabItems.removeClass('weui-bar__item_on');
- $this.addClass('weui-bar__item_on');
- $tabContents.hide();
- $tabContents.eq(index).show();
- options.onChange.call(this, index);
- });
- });
- return this;
- } /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- exports.default = tab;
- module.exports = exports['default'];
- /***/ }),
- /* 19 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _topTips = __webpack_require__(15);
- var _topTips2 = _interopRequireDefault(_topTips);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is
- * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- * either express or implied. See the License for the specific language governing permissions and
- * limitations under the License.
- */
- function _findCellParent(ele) {
- if (!ele || !ele.classList) return null;
- if (ele.classList.contains('weui-cell')) return ele;
- return _findCellParent(ele.parentNode);
- }
- function _validate($input, $form, regexp) {
- var input = $input[0],
- val = $input.val();
- if (input.tagName == 'INPUT' || input.tagName == 'TEXTAREA') {
- var reg = input.getAttribute('pattern') || '';
- if (input.type == 'radio') {
- var radioInputs = $form.find('input[type="radio"][name="' + input.name + '"]');
- for (var i = 0, len = radioInputs.length; i < len; ++i) {
- if (radioInputs[i].checked) return null;
- }
- return 'empty';
- } else if (input.type == 'checkbox') {
- if (reg) {
- var checkboxInputs = $form.find('input[type="checkbox"][name="' + input.name + '"]');
- var regs = reg.replace(/[{\s}]/g, '').split(',');
- var count = 0;
- if (regs.length != 2) {
- throw input.outerHTML + ' regexp is wrong.';
- }
- checkboxInputs.forEach(function (checkboxInput) {
- if (checkboxInput.checked) ++count;
- });
- if (regs[1] === '') {
- // {0,}
- if (count >= parseInt(regs[0])) {
- return null;
- } else {
- return count == 0 ? 'empty' : 'notMatch';
- }
- } else {
- // {0,2}
- if (parseInt(regs[0]) <= count && count <= parseInt(regs[1])) {
- return null;
- } else {
- return count == 0 ? 'empty' : 'notMatch';
- }
- }
- } else {
- return input.checked ? null : 'empty';
- }
- } else if (reg) {
- if (/^REG_/.test(reg)) {
- if (!regexp) throw 'RegExp ' + reg + ' is empty.';
- reg = reg.replace(/^REG_/, '');
- if (!regexp[reg]) throw 'RegExp ' + reg + ' has not found.';
- reg = regexp[reg];
- }
- return new RegExp(reg).test(val) ? null : !$input.val().length ? 'empty' : 'notMatch';
- } else if (!$input.val().length) {
- return 'empty';
- } else {
- return null;
- }
- } else if (val.length) {
- // 有输入值
- return null;
- }
- return 'empty';
- }
- /**
- * 表单校验
- * @param {string} selector 表单的selector
- * @param {function} callback 校验后的回调
- * @param {Object=} options 配置项
- * @param {object=} options.regexp 表单所需的正则表达式
- *
- * @example
- * ##### 普通input的HTML
- * ```html
- * <input type="tel" required pattern="[0-9]{11}" placeholder="输入你现在的手机号" emptyTips="请输入手机号" notMatchTips="请输入正确的手机号">
- * <input type="text" required pattern="REG_IDNUM" placeholder="输入你的身份证号码" emptyTips="请输入身份证号码" notMatchTips="请输入正确的身份证号码">
- * ```
- * - required 表示需要校验
- * - pattern 表示校验的正则,不填则进行为空校验。当以REG_开头时,则获取校验时传入的正则。如`pattern="REG_IDNUM"`,则需要在调用相应方法时传入`{regexp:{IDNUM: /(?:^\d{15}$)|(?:^\d{18}$)|^\d{17}[\dXx]$/}}`,详情请看下面`checkIfBlur`和`validate`
- * - 报错的wording会从 emptyTips | notMatchTips | tips | placeholder 里获得
- * <br>
- *
- * ##### radio
- * radio需要检验,只需把参数写在同一表单下,同name的第一个元素即可。
- * ```html
- * <input type="radio" value="male" name="sex" required tips="请选择性别" />
- * <input type="radio" value="female" name="sex" />
- * ```
- * <br>
- *
- * ##### checkbox
- * checkbox需要校验,只需把参数写在同一表单下,同name的第一个元素即可。
- * pattern 规定选择个数,用法与正则一致,例如:
- * ```html
- * <input type="checkbox" name="assistance" value="黄药师" required pattern="{1,2}" tips="请勾选1-2个敲码助手" />
- * <input type="checkbox" name="assistance" value="欧阳锋" />
- * <input type="checkbox" name="assistance" value="段智兴" />
- * <input type="checkbox" name="assistance" value="洪七公" />
- * ```
- * - {1,} 至少选择1个
- * - {1,2} 选择1-2个
- * - 这里不会出现{0,}这种情况,因为有required就表示必选。否则直接去掉required即可。
- * <br>
- *
- * ``` js
- * // weui.form.validate('#form', function(error){ console.log(error);}); // error: {dom:[Object], msg:[String]}
- * weui.form.validate('#form', function (error) {
- * if (!error) {
- * var loading = weui.loading('提交中...');
- * setTimeout(function () {
- * loading.hide();
- * weui.toast('提交成功', 3000);
- * }, 1500);
- * }
- * // return true; // 当return true时,不会显示错误
- * }, {
- * regexp: {
- * IDNUM: /(?:^\d{15}$)|(?:^\d{18}$)|^\d{17}[\dXx]$/,
- * VCODE: /^.{4}$/
- * }
- * });
- * ```
- */
- function validate(selector) {
- var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util2.default.noop;
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- var $eles = (0, _util2.default)(selector);
- $eles.forEach(function (ele) {
- var $form = (0, _util2.default)(ele);
- var $requireds = $form.find('[required]');
- if (typeof callback != 'function') callback = showErrorTips;
- for (var i = 0, len = $requireds.length; i < len; ++i) {
- var $required = $requireds.eq(i),
- errorMsg = _validate($required, $form, options.regexp),
- error = { ele: $required[0], msg: errorMsg };
- if (errorMsg) {
- if (!callback(error)) showErrorTips(error);
- return;
- }
- }
- callback(null);
- });
- return this;
- }
- /**
- * checkIfBlur 当表单的input失去焦点时校验
- * @param {string} selector 表单的selector
- * @param {Object=} options 配置项
- * @param {object=} options.regexp 表单所需的正则表达式
- *
- * @example
- * weui.form.checkIfBlur('#form', {
- * regexp: {
- * IDNUM: /(?:^\d{15}$)|(?:^\d{18}$)|^\d{17}[\dXx]$/,
- * VCODE: /^.{4}$/
- * }
- * });
- */
- function checkIfBlur(selector) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var $eles = (0, _util2.default)(selector);
- $eles.forEach(function (ele) {
- var $form = (0, _util2.default)(ele);
- $form.find('[required]').on('blur', function () {
- // checkbox 和 radio 不做blur检测,以免误触发
- if (this.type == 'checkbox' || this.type == 'radio') return;
- var $this = (0, _util2.default)(this);
- if ($this.val().length < 1) return; // 当空的时候不校验,以防不断弹出toptips
- var errorMsg = _validate($this, $form, options.regexp);
- if (errorMsg) {
- showErrorTips({
- ele: $this[0],
- msg: errorMsg
- });
- }
- }).on('focus', function () {
- hideErrorTips(this);
- });
- });
- return this;
- }
- /**
- * showErrorTips 显示错误提示
- * @param {Object} error 错误数据
- * @param {string} error.ele 出错了的dom元素
- * @param {string} error.msg 出错了的msg。会根据此`msg`找到对应的`Tips`(比如`msg`是`empty`),那么`ele`上的`emptyTips`就会以`topTips`显示
- *
- * @example
- * weui.form.showErrorTips({
- * ele: document.getElementById("xxxInput")
- * msg: 'empty'
- * });
- */
- function showErrorTips(error) {
- if (error) {
- var $ele = (0, _util2.default)(error.ele),
- msg = error.msg,
- tips = $ele.attr(msg + 'Tips') || $ele.attr('tips') || $ele.attr('placeholder');
- if (tips) (0, _topTips2.default)(tips);
- if (error.ele.type == 'checkbox' || error.ele.type == 'radio') return;
- var cellParent = _findCellParent(error.ele);
- if (cellParent) cellParent.classList.add('weui-cell_warn');
- }
- }
- /**
- * hideErrorTips 隐藏错误提示
- * @param {Object} ele dom元素
- *
- * @example
- * weui.form.hideErrorTips(document.getElementById("xxxInput"));
- */
- function hideErrorTips(ele) {
- var cellParent = _findCellParent(ele);
- if (cellParent) cellParent.classList.remove('weui-cell_warn');
- }
- exports.default = {
- showErrorTips: showErrorTips,
- hideErrorTips: hideErrorTips,
- validate: validate,
- checkIfBlur: checkIfBlur
- };
- module.exports = exports['default'];
- /***/ }),
- /* 20 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _item = __webpack_require__(21);
- var _item2 = _interopRequireDefault(_item);
- var _image = __webpack_require__(22);
- var _upload = __webpack_require__(23);
- var _upload2 = _interopRequireDefault(_upload);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _id = 0;
- /**
- * uploader 上传组件
- * @param {string} selector 上传组件的selector
- * @param {object} options 配置项
- * @param {string} [options.url] 上传的url,返回值需要使用json格式
- * @param {boolean} [options.auto=true] 设置为`true`后,不需要手动调用上传,有文件选择即开始上传。用this.upload()来上传,详情请看example
- * @param {string} [options.type=file] 上传类型, `file`为文件上传; `base64`为以base64上传
- * @param {string=} [options.fileVal=file] 文件上传域的name
- * @param {object=} [options.compress] 压缩配置, `false`则不压缩
- * @param {number=} [options.compress.width=1600] 图片的最大宽度
- * @param {number=} [options.compress.height=1600] 图片的最大高度
- * @param {number=} [options.compress.quality=.8] 压缩质量, 取值范围 0 ~ 1
- * @param {function=} [options.onBeforeQueued] 文件添加前的回调,return false则不添加
- * @param {function=} [options.onQueued] 文件添加成功的回调
- * @param {function=} [options.onBeforeSend] 文件上传前调用,具体参数看example
- * @param {function=} [options.onSuccess] 上传成功的回调
- * @param {function=} [options.onProgress] 上传进度的回调
- * @param {function=} [options.onError] 上传失败的回调
- *
- * @example
- * #### html
- * ```html
- <div class="weui-cells weui-cells_form" id="uploader">
- <div class="weui-cell">
- <div class="weui-cell__bd">
- <div class="weui-uploader">
- <div class="weui-uploader__hd">
- <p class="weui-uploader__title">图片上传</p>
- <div class="weui-uploader__info"><span id="uploadCount">0</span>/5</div>
- </div>
- <div class="weui-uploader__bd">
- <ul class="weui-uploader__files" id="uploaderFiles"></ul>
- <div class="weui-uploader__input-box">
- <input id="uploaderInput" class="weui-uploader__input" type="file" accept="image/*" capture="camera" multiple="" />
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- * ```
- *
- * #### js
- * ```javascript
- * var uploadCount = 0;
- * weui.uploader('#uploader', {
- * url: 'http://localhost:8081',
- * auto: true,
- * type: 'file',
- * fileVal: 'fileVal',
- * compress: {
- * width: 1600,
- * height: 1600,
- * quality: .8
- * },
- * onBeforeQueued: function(files) {
- * // `this` 是轮询到的文件, `files` 是所有文件
- *
- * if(["image/jpg", "image/jpeg", "image/png", "image/gif"].indexOf(this.type) < 0){
- * weui.alert('请上传图片');
- * return false; // 阻止文件添加
- * }
- * if(this.size > 10 * 1024 * 1024){
- * weui.alert('请上传不超过10M的图片');
- * return false;
- * }
- * if (files.length > 5) { // 防止一下子选择过多文件
- * weui.alert('最多只能上传5张图片,请重新选择');
- * return false;
- * }
- * if (uploadCount + 1 > 5) {
- * weui.alert('最多只能上传5张图片');
- * return false;
- * }
- *
- * ++uploadCount;
- *
- * // return true; // 阻止默认行为,不插入预览图的框架
- * },
- * onQueued: function(){
- * console.log(this);
- *
- * // console.log(this.status); // 文件的状态:'ready', 'progress', 'success', 'fail'
- * // console.log(this.base64); // 如果是base64上传,file.base64可以获得文件的base64
- *
- * // this.upload(); // 如果是手动上传,这里可以通过调用upload来实现;也可以用它来实现重传。
- * // this.stop(); // 中断上传
- *
- * // return true; // 阻止默认行为,不显示预览图的图像
- * },
- * onBeforeSend: function(data, headers){
- * console.log(this, data, headers);
- * // $.extend(data, { test: 1 }); // 可以扩展此对象来控制上传参数
- * // $.extend(headers, { Origin: 'http://127.0.0.1' }); // 可以扩展此对象来控制上传头部
- *
- * // return false; // 阻止文件上传
- * },
- * onProgress: function(percent){
- * console.log(this, percent);
- * // return true; // 阻止默认行为,不使用默认的进度显示
- * },
- * onSuccess: function (ret) {
- * console.log(this, ret);
- * // return true; // 阻止默认行为,不使用默认的成功态
- * },
- * onError: function(err){
- * console.log(this, err);
- * // return true; // 阻止默认行为,不使用默认的失败态
- * }
- * });
- * ```
- */
- function uploader(selector, options) {
- var $uploader = (0, _util2.default)(selector);
- var URL = window.URL || window.webkitURL || window.mozURL;
- // 找到DOM里file-content,若无,则插入一个。
- function findFileCtn($uploader, id) {
- var $file = $uploader.find('[data-id="' + id + '"]');
- var $fileCtn = $file.find('.weui-uploader__file-content');
- if (!$fileCtn.length) {
- $fileCtn = (0, _util2.default)('<div class="weui-uploader__file-content"></div>');
- $file.append($fileCtn);
- }
- $file.addClass('weui-uploader__file_status');
- return $fileCtn;
- }
- // 清除DOM里的上传状态
- function clearFileStatus($uploader, id) {
- var $file = $uploader.find('[data-id="' + id + '"]').removeClass('weui-uploader__file_status');
- $file.find('.weui-uploader__file-content').remove();
- }
- // 设置上传
- function setUploadFile(file) {
- file.url = URL.createObjectURL(file);
- file.status = 'ready';
- file.upload = function () {
- (0, _upload2.default)(_util2.default.extend({
- $uploader: $uploader,
- file: file
- }, options));
- };
- file.stop = function () {
- this.xhr.abort();
- };
- options.onQueued(file);
- if (options.auto) file.upload();
- }
- options = _util2.default.extend({
- url: '',
- auto: true,
- type: 'file',
- fileVal: 'file',
- xhrFields: {},
- onBeforeQueued: _util2.default.noop,
- onQueued: _util2.default.noop,
- onBeforeSend: _util2.default.noop,
- onSuccess: _util2.default.noop,
- onProgress: _util2.default.noop,
- onError: _util2.default.noop
- }, options);
- if (options.compress !== false) {
- options.compress = _util2.default.extend({
- width: 1600,
- height: 1600,
- quality: .8
- }, options.compress);
- }
- if (options.onBeforeQueued) {
- var onBeforeQueued = options.onBeforeQueued;
- options.onBeforeQueued = function (file, files) {
- var ret = onBeforeQueued.call(file, files);
- if (ret === false) {
- return false;
- }
- if (ret === true) {
- return;
- }
- var $item = (0, _util2.default)(_util2.default.render(_item2.default, {
- id: file.id
- }));
- $uploader.find('.weui-uploader__files').append($item);
- };
- }
- if (options.onQueued) {
- var onQueued = options.onQueued;
- options.onQueued = function (file) {
- if (!onQueued.call(file)) {
- var $file = $uploader.find('[data-id="' + file.id + '"]');
- $file.css({
- backgroundImage: 'url("' + (file.base64 || file.url) + '")'
- });
- if (!options.auto) {
- clearFileStatus($uploader, file.id);
- }
- }
- };
- }
- if (options.onBeforeSend) {
- var onBeforeSend = options.onBeforeSend;
- options.onBeforeSend = function (file, data, headers) {
- var ret = onBeforeSend.call(file, data, headers);
- if (ret === false) {
- return false;
- }
- };
- }
- if (options.onSuccess) {
- var onSuccess = options.onSuccess;
- options.onSuccess = function (file, ret) {
- file.status = 'success';
- if (!onSuccess.call(file, ret)) {
- clearFileStatus($uploader, file.id);
- }
- };
- }
- if (options.onProgress) {
- var onProgress = options.onProgress;
- options.onProgress = function (file, percent) {
- if (!onProgress.call(file, percent)) {
- findFileCtn($uploader, file.id).html(percent + '%');
- }
- };
- }
- if (options.onError) {
- var onError = options.onError;
- options.onError = function (file, err) {
- file.status = 'fail';
- if (!onError.call(file, err)) {
- findFileCtn($uploader, file.id).html('<i class="weui-icon-warn"></i>');
- }
- };
- }
- $uploader.find('input[type="file"]').on('change', function (evt) {
- var files = evt.target.files;
- if (files.length === 0) {
- return;
- }
- if (options.compress === false && options.type == 'file') {
- // 以原文件方式上传
- Array.prototype.forEach.call(files, function (file) {
- file.id = ++_id;
- if (options.onBeforeQueued(file, files) === false) return;
- setUploadFile(file);
- });
- } else {
- // base64上传 和 压缩上传
- Array.prototype.forEach.call(files, function (file) {
- file.id = ++_id;
- if (options.onBeforeQueued(file, files) === false) return;
- (0, _image.compress)(file, options, function (blob) {
- if (blob) setUploadFile(blob);
- });
- });
- }
- this.value = '';
- });
- }
- exports.default = uploader;
- module.exports = exports['default'];
- /***/ }),
- /* 21 */
- /***/ (function(module, exports) {
- module.exports = "<li class=\"weui-uploader__file weui-uploader__file_status\" data-id=\"<%= id %>\"> <div class=weui-uploader__file-content> <i class=weui-loading style=width:30px;height:30px></i> </div> </li> ";
- /***/ }),
- /* 22 */
- /***/ (function(module, exports) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- /**
- * 检查图片是否有被压扁,如果有,返回比率
- * ref to http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
- */
- function detectVerticalSquash(img) {
- // 拍照在IOS7或以下的机型会出现照片被压扁的bug
- var data;
- var ih = img.naturalHeight;
- var canvas = document.createElement('canvas');
- canvas.width = 1;
- canvas.height = ih;
- var ctx = canvas.getContext('2d');
- ctx.drawImage(img, 0, 0);
- try {
- data = ctx.getImageData(0, 0, 1, ih).data;
- } catch (err) {
- console.log('Cannot check verticalSquash: CORS?');
- return 1;
- }
- var sy = 0;
- var ey = ih;
- var py = ih;
- while (py > sy) {
- var alpha = data[(py - 1) * 4 + 3];
- if (alpha === 0) {
- ey = py;
- } else {
- sy = py;
- }
- py = ey + sy >> 1; // py = parseInt((ey + sy) / 2)
- }
- var ratio = py / ih;
- return ratio === 0 ? 1 : ratio;
- }
- /**
- * dataURI to blob, ref to https://gist.github.com/fupslot/5015897
- * @param dataURI
- */
- function dataURItoBuffer(dataURI) {
- var byteString = atob(dataURI.split(',')[1]);
- var buffer = new ArrayBuffer(byteString.length);
- var view = new Uint8Array(buffer);
- for (var i = 0; i < byteString.length; i++) {
- view[i] = byteString.charCodeAt(i);
- }
- return buffer;
- }
- function dataURItoBlob(dataURI) {
- var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
- var buffer = dataURItoBuffer(dataURI);
- return new Blob([buffer], { type: mimeString });
- }
- /**
- * 获取图片的orientation
- * ref to http://stackoverflow.com/questions/7584794/accessing-jpeg-exif-rotation-data-in-javascript-on-the-client-side
- */
- function getOrientation(buffer) {
- var view = new DataView(buffer);
- if (view.getUint16(0, false) != 0xFFD8) return -2;
- var length = view.byteLength,
- offset = 2;
- while (offset < length) {
- var marker = view.getUint16(offset, false);
- offset += 2;
- if (marker == 0xFFE1) {
- if (view.getUint32(offset += 2, false) != 0x45786966) return -1;
- var little = view.getUint16(offset += 6, false) == 0x4949;
- offset += view.getUint32(offset + 4, little);
- var tags = view.getUint16(offset, little);
- offset += 2;
- for (var i = 0; i < tags; i++) {
- if (view.getUint16(offset + i * 12, little) == 0x0112) return view.getUint16(offset + i * 12 + 8, little);
- }
- } else if ((marker & 0xFF00) != 0xFF00) break;else offset += view.getUint16(offset, false);
- }
- return -1;
- }
- /**
- * 修正拍照时图片的方向
- * ref to http://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin
- */
- function orientationHelper(canvas, ctx, orientation) {
- var w = canvas.width,
- h = canvas.height;
- if (orientation > 4) {
- canvas.width = h;
- canvas.height = w;
- }
- switch (orientation) {
- case 2:
- ctx.translate(w, 0);
- ctx.scale(-1, 1);
- break;
- case 3:
- ctx.translate(w, h);
- ctx.rotate(Math.PI);
- break;
- case 4:
- ctx.translate(0, h);
- ctx.scale(1, -1);
- break;
- case 5:
- ctx.rotate(0.5 * Math.PI);
- ctx.scale(1, -1);
- break;
- case 6:
- ctx.rotate(0.5 * Math.PI);
- ctx.translate(0, -h);
- break;
- case 7:
- ctx.rotate(0.5 * Math.PI);
- ctx.translate(w, -h);
- ctx.scale(-1, 1);
- break;
- case 8:
- ctx.rotate(-0.5 * Math.PI);
- ctx.translate(-w, 0);
- break;
- }
- }
- /**
- * 压缩图片
- */
- function compress(file, options, callback) {
- var reader = new FileReader();
- reader.onload = function (evt) {
- if (options.compress === false) {
- // 不启用压缩 & base64上传 的分支,不做任何处理,直接返回文件的base64编码
- file.base64 = evt.target.result;
- callback(file);
- return;
- }
- // 启用压缩的分支
- var img = new Image();
- img.onload = function () {
- var ratio = detectVerticalSquash(img);
- var orientation = getOrientation(dataURItoBuffer(img.src));
- var canvas = document.createElement('canvas');
- var ctx = canvas.getContext('2d');
- var maxW = options.compress.width;
- var maxH = options.compress.height;
- var w = img.width;
- var h = img.height;
- var dataURL = void 0;
- if (w < h && h > maxH) {
- w = parseInt(maxH * img.width / img.height);
- h = maxH;
- } else if (w >= h && w > maxW) {
- h = parseInt(maxW * img.height / img.width);
- w = maxW;
- }
- canvas.width = w;
- canvas.height = h;
- if (orientation > 0) {
- orientationHelper(canvas, ctx, orientation);
- }
- ctx.drawImage(img, 0, 0, w, h / ratio);
- if (/image\/jpeg/.test(file.type) || /image\/jpg/.test(file.type)) {
- dataURL = canvas.toDataURL('image/jpeg', options.compress.quality);
- } else {
- dataURL = canvas.toDataURL(file.type);
- }
- if (options.type == 'file') {
- if (/;base64,null/.test(dataURL) || /;base64,$/.test(dataURL)) {
- // 压缩出错,以文件方式上传的,采用原文件上传
- console.warn('Compress fail, dataURL is ' + dataURL + '. Next will use origin file to upload.');
- callback(file);
- } else {
- var blob = dataURItoBlob(dataURL);
- blob.id = file.id;
- blob.name = file.name;
- blob.lastModified = file.lastModified;
- blob.lastModifiedDate = file.lastModifiedDate;
- callback(blob);
- }
- } else {
- if (/;base64,null/.test(dataURL) || /;base64,$/.test(dataURL)) {
- // 压缩失败,以base64上传的,直接报错不上传
- options.onError(file, new Error('Compress fail, dataURL is ' + dataURL + '.'));
- callback();
- } else {
- file.base64 = dataURL;
- callback(file);
- }
- }
- };
- img.src = evt.target.result;
- };
- reader.readAsDataURL(file);
- }
- exports.default = {
- compress: compress
- };
- module.exports = exports['default'];
- /***/ }),
- /* 23 */
- /***/ (function(module, exports) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = upload;
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is
- * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
- * either express or implied. See the License for the specific language governing permissions and
- * limitations under the License.
- */
- function upload(options) {
- var url = options.url,
- file = options.file,
- fileVal = options.fileVal,
- onBeforeSend = options.onBeforeSend,
- onProgress = options.onProgress,
- onError = options.onError,
- onSuccess = options.onSuccess,
- xhrFields = options.xhrFields;
- var name = file.name,
- type = file.type,
- lastModifiedDate = file.lastModifiedDate;
- var data = {
- name: name,
- type: type,
- size: options.type == 'file' ? file.size : file.base64.length,
- lastModifiedDate: lastModifiedDate
- };
- var headers = {};
- if (onBeforeSend(file, data, headers) === false) return;
- file.status = 'progress';
- onProgress(file, 0);
- var formData = new FormData();
- var xhr = new XMLHttpRequest();
- file.xhr = xhr;
- // 设置参数
- Object.keys(data).forEach(function (key) {
- formData.append(key, data[key]);
- });
- if (options.type == 'file') {
- formData.append(fileVal, file, name);
- } else {
- formData.append(fileVal, file.base64);
- }
- xhr.onreadystatechange = function () {
- if (xhr.readyState == 4) {
- if (xhr.status == 200) {
- try {
- // 只支持json
- var ret = JSON.parse(xhr.responseText);
- onSuccess(file, ret);
- } catch (err) {
- onError(file, err);
- }
- } else {
- onError(file, new Error('XMLHttpRequest response status is ' + xhr.status));
- }
- }
- };
- xhr.upload.addEventListener('progress', function (evt) {
- if (evt.total == 0) return;
- var percent = Math.ceil(evt.loaded / evt.total) * 100;
- onProgress(file, percent);
- }, false);
- xhr.open('POST', url);
- Object.keys(xhrFields).forEach(function (key) {
- xhr[key] = xhrFields[key];
- });
- // 设置头部信息
- Object.keys(headers).forEach(function (key) {
- xhr.setRequestHeader(key, headers[key]);
- });
- xhr.send(formData);
- }
- module.exports = exports['default'];
- /***/ }),
- /* 24 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _cron = __webpack_require__(25);
- var _cron2 = _interopRequireDefault(_cron);
- __webpack_require__(26);
- var _util3 = __webpack_require__(27);
- var util = _interopRequireWildcard(_util3);
- var _picker = __webpack_require__(28);
- var _picker2 = _interopRequireDefault(_picker);
- var _group = __webpack_require__(29);
- var _group2 = _interopRequireDefault(_group);
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function Result(item) {
- if ((typeof item === 'undefined' ? 'undefined' : _typeof(item)) != 'object') {
- item = {
- label: item,
- value: item
- };
- }
- _util2.default.extend(this, item);
- }
- Result.prototype.toString = function () {
- return this.value;
- };
- Result.prototype.valueOf = function () {
- return this.value;
- };
- var _sington = void 0;
- var temp = {}; // temp 存在上一次滑动的位置
- /**
- * picker 多列选择器。
- * @param {array} items picker的数据,即用于生成picker的数据,picker的层级可以自己定义,但建议最多三层。数据格式参考example。
- * @param {Object} options 配置项
- * @param {number=} [options.depth] picker深度(也就是picker有多少列) 取值为1-3。如果为空,则取items第一项的深度。
- * @param {string=} [options.id=default] 作为picker的唯一标识,作用是以id缓存当时的选择。(当你想每次传入的defaultValue都是不一样时,可以使用不同的id区分)
- * @param {string=} [options.className] 自定义类名
- * @param {string=} [options.container] 指定容器
- * @param {array=} [options.defaultValue] 默认选项的value数组
- * @param {function=} [options.onChange] 在picker选中的值发生变化的时候回调
- * @param {function=} [options.onConfirm] 在点击"确定"之后的回调。回调返回选中的结果(Array),数组长度依赖于picker的层级。
- * @param {function=} [options.onClose] picker关闭后的回调
- *
- * @example
- * // 单列picker
- * weui.picker([
- * {
- * label: '飞机票',
- * value: 0,
- * disabled: true // 不可用
- * },
- * {
- * label: '火车票',
- * value: 1
- * },
- * {
- * label: '汽车票',
- * value: 3
- * },
- * {
- * label: '公车票',
- * value: 4,
- * }
- * ], {
- * className: 'custom-classname',
- * container: 'body',
- * defaultValue: [3],
- * onChange: function (result) {
- * console.log(result)
- * },
- * onConfirm: function (result) {
- * console.log(result)
- * },
- * id: 'singleLinePicker'
- * });
- *
- * @example
- * // 多列picker
- * weui.picker([
- * {
- * label: '1',
- * value: '1'
- * }, {
- * label: '2',
- * value: '2'
- * }, {
- * label: '3',
- * value: '3'
- * }
- * ], [
- * {
- * label: 'A',
- * value: 'A'
- * }, {
- * label: 'B',
- * value: 'B'
- * }, {
- * label: 'C',
- * value: 'C'
- * }
- * ], {
- * defaultValue: ['3', 'A'],
- * onChange: function (result) {
- * console.log(result);
- * },
- * onConfirm: function (result) {
- * console.log(result);
- * },
- * id: 'multiPickerBtn'
- * });
- *
- * @example
- * // 级联picker
- * weui.picker([
- * {
- * label: '飞机票',
- * value: 0,
- * children: [
- * {
- * label: '经济舱',
- * value: 1
- * },
- * {
- * label: '商务舱',
- * value: 2
- * }
- * ]
- * },
- * {
- * label: '火车票',
- * value: 1,
- * children: [
- * {
- * label: '卧铺',
- * value: 1,
- * disabled: true // 不可用
- * },
- * {
- * label: '坐票',
- * value: 2
- * },
- * {
- * label: '站票',
- * value: 3
- * }
- * ]
- * },
- * {
- * label: '汽车票',
- * value: 3,
- * children: [
- * {
- * label: '快班',
- * value: 1
- * },
- * {
- * label: '普通',
- * value: 2
- * }
- * ]
- * }
- * ], {
- * className: 'custom-classname',
- * container: 'body',
- * defaultValue: [1, 3],
- * onChange: function (result) {
- * console.log(result)
- * },
- * onConfirm: function (result) {
- * console.log(result)
- * },
- * id: 'doubleLinePicker'
- * });
- */
- function picker() {
- if (_sington) return _sington;
- // 配置项
- var options = arguments[arguments.length - 1];
- var defaults = _util2.default.extend({
- id: 'default',
- className: '',
- container: 'body',
- title: '',
- onChange: _util2.default.noop,
- onConfirm: _util2.default.noop,
- onClose: _util2.default.noop
- }, options);
- // 数据处理
- var items = void 0;
- var isMulti = false; // 是否多列的类型
- if (arguments.length > 2) {
- var i = 0;
- items = [];
- while (i < arguments.length - 1) {
- items.push(arguments[i++]);
- }
- isMulti = true;
- } else {
- items = arguments[0];
- }
- // 获取缓存
- temp[defaults.id] = temp[defaults.id] || [];
- var result = [];
- var lineTemp = temp[defaults.id];
- var $picker = (0, _util2.default)(_util2.default.render(_picker2.default, defaults));
- var depth = options.depth || (isMulti ? items.length : util.depthOf(items[0])),
- groups = '';
- // 显示与隐藏的方法
- function show() {
- (0, _util2.default)(defaults.container).append($picker);
- // 这里获取一下计算后的样式,强制触发渲染. fix IOS10下闪现的问题
- _util2.default.getStyle($picker[0], 'transform');
- //更改标题
- $picker.find('.weui-half-screen-dialog__title').html(defaults.title);
- $picker.find('.weui-mask').addClass('weui-animate-fade-in');
- $picker.find('.weui-picker').addClass('weui-animate-slide-up');
- }
- function _hide(callback) {
- _hide = _util2.default.noop; // 防止二次调用导致报错
- $picker.find('.weui-mask').addClass('weui-animate-fade-out');
- $picker.find('.weui-picker').addClass('weui-animate-slide-down').on('animationend webkitAnimationEnd', function () {
- $picker.remove();
- _sington = false;
- defaults.onClose();
- callback && callback();
- });
- }
- function hide(callback) {
- _hide(callback);
- }
- // 初始化滚动的方法
- function scroll(items, level) {
- if (lineTemp[level] === undefined && defaults.defaultValue && defaults.defaultValue[level] !== undefined) {
- // 没有缓存选项,而且存在defaultValue
- var defaultVal = defaults.defaultValue[level];
- var index = 0,
- len = items.length;
- if (_typeof(items[index]) == 'object') {
- for (; index < len; ++index) {
- if (defaultVal == items[index].value) break;
- }
- } else {
- for (; index < len; ++index) {
- if (defaultVal == items[index]) break;
- }
- }
- if (index < len) {
- lineTemp[level] = index;
- } else {
- console.warn('Picker has not match defaultValue: ' + defaultVal);
- }
- }
- $picker.find('.weui-picker__group').eq(level).scroll({
- items: items,
- temp: lineTemp[level],
- onChange: function onChange(item, index) {
- //为当前的result赋值。
- if (item) {
- result[level] = new Result(item);
- } else {
- result[level] = null;
- }
- lineTemp[level] = index;
- if (isMulti) {
- if (result.length == depth) {
- defaults.onChange(result);
- }
- } else {
- /**
- * @子列表处理
- * 1. 在没有子列表,或者值列表的数组长度为0时,隐藏掉子列表。
- * 2. 滑动之后发现重新有子列表时,再次显示子列表。
- *
- * @回调处理
- * 1. 因为滑动实际上是一层一层传递的:父列表滚动完成之后,会call子列表的onChange,从而带动子列表的滑动。
- * 2. 所以,使用者的传进来onChange回调应该在最后一个子列表滑动时再call
- */
- if (item.children && item.children.length > 0) {
- $picker.find('.weui-picker__group').eq(level + 1).show();
- !isMulti && scroll(item.children, level + 1); // 不是多列的情况下才继续处理children
- } else {
- //如果子列表test不通过,子孙列表都隐藏。
- var $items = $picker.find('.weui-picker__group');
- $items.forEach(function (ele, index) {
- if (index > level) {
- (0, _util2.default)(ele).hide();
- }
- });
- result.splice(level + 1);
- defaults.onChange(result);
- }
- }
- },
- onConfirm: defaults.onConfirm
- });
- }
- var _depth = depth;
- while (_depth--) {
- groups += _group2.default;
- }
- $picker.find('.weui-picker__bd').html(groups);
- show();
- if (isMulti) {
- items.forEach(function (item, index) {
- scroll(item, index);
- });
- } else {
- scroll(items, 0);
- }
- $picker.on('click', '.weui-mask', function () {
- hide();
- }).on('click', '.weui-picker__btn', function () {
- hide();
- }).on('click', '#weui-picker-confirm', function () {
- defaults.onConfirm(result);
- });
- _sington = $picker[0];
- _sington.hide = hide;
- return _sington;
- }
- /**
- * datePicker 时间选择器,由picker拓展而来,提供年、月、日的选择。
- * @param options 配置项
- * @param {string=} [options.id=datePicker] 作为picker的唯一标识
- * @param {number=|string|Date} [options.start=2000] 起始年份,如果是 `Number` 类型,表示起始年份;如果是 `String` 类型,格式为 'YYYY-MM-DD';如果是 `Date` 类型,就传一个 Date
- * @param {number=|string|Date} [options.end=2030] 结束年份,同上
- * @param {string=} [options.cron=* * *] cron 表达式,三位,分别是 dayOfMonth[1-31],month[1-12] 和 dayOfWeek[0-6](周日-周六)
- * @param {string=} [options.className] 自定义类名
- * @param {array=} [options.defaultValue] 默认选项的value数组, 如 [1991, 6, 9]
- * @param {function=} [options.onChange] 在picker选中的值发生变化的时候回调
- * @param {function=} [options.onConfirm] 在点击"确定"之后的回调。回调返回选中的结果(Array),数组长度依赖于picker的层级。
- *
- *@example
- * // 示例1:
- * weui.datePicker({
- * start: 1990,
- * end: 2000,
- * defaultValue: [1991, 6, 9],
- * onChange: function(result){
- * console.log(result);
- * },
- * onConfirm: function(result){
- * console.log(result);
- * },
- * id: 'datePicker'
- * });
- *
- * // 示例2:
- * weui.datePicker({
- * start: new Date(), // 从今天开始
- * end: 2030,
- * defaultValue: [2020, 6, 9],
- * onChange: function(result){
- * console.log(result);
- * },
- * onConfirm: function(result){
- * console.log(result);
- * },
- * id: 'datePicker'
- * });
- *
- * // 示例3:
- * weui.datePicker({
- * start: new Date(), // 从今天开始
- * end: 2030,
- * cron: '* * 0,6', // 每逢周日、周六
- * onChange: function(result){
- * console.log(result);
- * },
- * onConfirm: function(result){
- * console.log(result);
- * },
- * id: 'datePicker'
- * });
- *
- * // 示例4:
- * weui.datePicker({
- * start: new Date(), // 从今天开始
- * end: 2030,
- * cron: '1-10 * *', // 每月1日-10日
- * onChange: function(result){
- * console.log(result);
- * },
- * onConfirm: function(result){
- * console.log(result);
- * },
- * id: 'datePicker'
- * });
- */
- function datePicker(options) {
- var nowDate = new Date();
- var defaults = _util2.default.extend({
- id: 'datePicker',
- onChange: _util2.default.noop,
- onConfirm: _util2.default.noop,
- start: nowDate.getFullYear() - 20,
- end: nowDate.getFullYear() + 20,
- defaultValue: [nowDate.getFullYear(), nowDate.getMonth() + 1, nowDate.getDate()],
- cron: '* * *'
- }, options);
- // 兼容原来的 start、end 传 Number 的用法
- if (typeof defaults.start === 'number') {
- defaults.start = new Date(defaults.start + '/01/01');
- } else if (typeof defaults.start === 'string') {
- defaults.start = new Date(defaults.start.replace(/-/g, '/'));
- }
- if (typeof defaults.end === 'number') {
- defaults.end = new Date(defaults.end + '/12/31');
- } else if (typeof defaults.end === 'string') {
- defaults.end = new Date(defaults.end.replace(/-/g, '/'));
- }
- var findBy = function findBy(array, key, value) {
- for (var i = 0, len = array.length; i < len; i++) {
- var _obj = array[i];
- if (_obj[key] == value) {
- return _obj;
- }
- }
- };
- var date = [];
- var interval = _cron2.default.parse(defaults.cron, defaults.start, defaults.end);
- var obj = void 0;
- do {
- obj = interval.next();
- var year = obj.value.getFullYear();
- var month = obj.value.getMonth() + 1;
- var day = obj.value.getDate();
- var Y = findBy(date, 'value', year);
- if (!Y) {
- Y = {
- label: year + '年',
- value: year,
- children: []
- };
- date.push(Y);
- }
- var M = findBy(Y.children, 'value', month);
- if (!M) {
- M = {
- label: month + '月',
- value: month,
- children: []
- };
- Y.children.push(M);
- }
- M.children.push({
- label: day + '日',
- value: day
- });
- } while (!obj.done);
- return picker(date, defaults);
- }
- exports.default = {
- picker: picker,
- datePicker: datePicker
- };
- module.exports = exports['default'];
- /***/ }),
- /* 25 */
- /***/ (function(module, exports) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var regex = /^(\d+)(?:-(\d+))?(?:\/(\d+))?$/g;
- var constraints = [[1, 31], [1, 12], [0, 6]];
- /**
- * Schedule
- */
- var Schedule = function () {
- function Schedule(fields, start, end) {
- _classCallCheck(this, Schedule);
- /**
- * dayOfMonth
- * @type {Array}
- */
- this._dates = fields[0];
- /**
- * month
- * @type {Array}
- */
- this._months = fields[1];
- /**
- * dayOfWeek
- * @type {Array}
- */
- this._days = fields[2];
- /**
- * start
- * @type {Date}
- */
- this._start = start;
- /**
- * end
- * @type {Date}
- */
- this._end = end;
- /**
- * cursor
- * @type {Date}
- * @private
- */
- this._pointer = start;
- }
- _createClass(Schedule, [{
- key: '_findNext',
- value: function _findNext() {
- var next = void 0;
- while (true) {
- if (this._end.getTime() - this._pointer.getTime() < 0) {
- throw new Error('out of range, end is ' + this._end + ', current is ' + this._pointer);
- }
- var month = this._pointer.getMonth();
- var date = this._pointer.getDate();
- var day = this._pointer.getDay();
- if (this._months.indexOf(month + 1) === -1) {
- this._pointer.setMonth(month + 1);
- this._pointer.setDate(1);
- continue;
- }
- if (this._dates.indexOf(date) === -1) {
- this._pointer.setDate(date + 1);
- continue;
- }
- if (this._days.indexOf(day) === -1) {
- this._pointer.setDate(date + 1);
- continue;
- }
- next = new Date(this._pointer);
- break;
- }
- return next;
- }
- /**
- * fetch next data
- */
- }, {
- key: 'next',
- value: function next() {
- var value = this._findNext();
- // move next date
- this._pointer.setDate(this._pointer.getDate() + 1);
- return {
- value: value,
- done: !this.hasNext()
- };
- }
- /**
- * has next
- * @returns {boolean}
- */
- }, {
- key: 'hasNext',
- value: function hasNext() {
- try {
- this._findNext();
- return true;
- } catch (e) {
- return false;
- }
- }
- }]);
- return Schedule;
- }();
- function parseField(field, constraints) {
- var low = constraints[0];
- var high = constraints[1];
- var result = [];
- var pointer = void 0;
- // * 号等于最低到最高
- field = field.replace(/\*/g, low + '-' + high);
- // 处理 1,2,5-9 这种情况
- var fields = field.split(',');
- for (var i = 0, len = fields.length; i < len; i++) {
- var f = fields[i];
- if (f.match(regex)) {
- f.replace(regex, function ($0, lower, upper, step) {
- // ref to `cron-parser`
- step = parseInt(step) || 1;
- // Positive integer higher than constraints[0]
- lower = Math.min(Math.max(low, ~~Math.abs(lower)), high);
- // Positive integer lower than constraints[1]
- upper = upper ? Math.min(high, ~~Math.abs(upper)) : lower;
- // Count from the lower barrier to the upper
- pointer = lower;
- do {
- result.push(pointer);
- pointer += step;
- } while (pointer <= upper);
- });
- }
- }
- return result;
- }
- /**
- *
- * @param expr
- * @param start
- * @param end
- * @returns {*}
- */
- function parse(expr, start, end) {
- var atoms = expr.replace(/^\s\s*|\s\s*$/g, '').split(/\s+/);
- var fields = [];
- atoms.forEach(function (atom, index) {
- var constraint = constraints[index];
- fields.push(parseField(atom, constraint));
- });
- return new Schedule(fields, start, end);
- }
- exports.default = {
- parse: parse
- };
- module.exports = exports['default'];
- /***/ }),
- /* 26 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * set transition
- * @param $target
- * @param time
- */
- var setTransition = function setTransition($target, time) {
- return $target.css({
- '-webkit-transition': 'all ' + time + 's',
- 'transition': 'all ' + time + 's'
- });
- };
- /**
- * set translate
- */
- var setTranslate = function setTranslate($target, diff) {
- return $target.css({
- '-webkit-transform': 'translate3d(0, ' + diff + 'px, 0)',
- 'transform': 'translate3d(0, ' + diff + 'px, 0)'
- });
- };
- /**
- * @desc get index of middle item
- * @param items
- * @returns {number}
- */
- var getDefaultIndex = function getDefaultIndex(items) {
- var current = Math.floor(items.length / 2);
- var count = 0;
- while (!!items[current] && items[current].disabled) {
- current = ++current % items.length;
- count++;
- if (count > items.length) {
- throw new Error('No selectable item.');
- }
- }
- return current;
- };
- var getDefaultTranslate = function getDefaultTranslate(offset, rowHeight, items) {
- var currentIndex = getDefaultIndex(items);
- return (offset - currentIndex) * rowHeight;
- };
- /**
- * get max translate
- * @param offset
- * @param rowHeight
- * @returns {number}
- */
- var getMax = function getMax(offset, rowHeight) {
- return offset * rowHeight;
- };
- /**
- * get min translate
- * @param offset
- * @param rowHeight
- * @param length
- * @returns {number}
- */
- var getMin = function getMin(offset, rowHeight, length) {
- return -(rowHeight * (length - offset - 1));
- };
- _util2.default.fn.scroll = function (options) {
- var _this = this;
- var defaults = _util2.default.extend({
- items: [], // 数据
- scrollable: '.weui-picker__content', // 滚动的元素
- offset: 2, // 列表初始化时的偏移量(列表初始化时,选项是聚焦在中间的,通过offset强制往上挪3项,以达到初始选项是为顶部的那项)
- rowHeight: 48, // 列表每一行的高度
- onChange: _util2.default.noop, // onChange回调
- temp: null, // translate的缓存
- bodyHeight: 5 * 48 // picker的高度,用于辅助点击滚动的计算
- }, options);
- var items = defaults.items.map(function (item) {
- return '<div class="weui-picker__item' + (item.disabled ? ' weui-picker__item_disabled' : '') + '">' + ((typeof item === 'undefined' ? 'undefined' : _typeof(item)) == 'object' ? item.label : item) + '</div>';
- }).join('');
- var $this = (0, _util2.default)(this);
- $this.find('.weui-picker__content').html(items);
- var $scrollable = $this.find(defaults.scrollable); // 可滚动的元素
- var start = void 0; // 保存开始按下的位置
- var end = void 0; // 保存结束时的位置
- var startTime = void 0; // 开始触摸的时间
- var translate = void 0; // 缓存 translate
- var points = []; // 记录移动点
- // 首次触发选中事件
- // 如果有缓存的选项,则用缓存的选项,否则使用中间值。
- if (defaults.temp !== null && defaults.temp < defaults.items.length) {
- var index = defaults.temp;
- defaults.onChange.call(this, defaults.items[index], index);
- translate = (defaults.offset - index) * defaults.rowHeight;
- } else {
- var _index = getDefaultIndex(defaults.items);
- defaults.onChange.call(this, defaults.items[_index], _index);
- translate = getDefaultTranslate(defaults.offset, defaults.rowHeight, defaults.items);
- }
- setTranslate($scrollable, translate);
- var stop = function stop(diff) {
- translate += diff;
- // 移动到最接近的那一行
- translate = Math.round(translate / defaults.rowHeight) * defaults.rowHeight;
- var max = getMax(defaults.offset, defaults.rowHeight);
- var min = getMin(defaults.offset, defaults.rowHeight, defaults.items.length);
- // 不要超过最大值或者最小值
- if (translate > max) {
- translate = max;
- }
- if (translate < min) {
- translate = min;
- }
- // 如果是 disabled 的就跳过
- var index = defaults.offset - translate / defaults.rowHeight;
- while (!!defaults.items[index] && defaults.items[index].disabled) {
- diff > 0 ? ++index : --index;
- }
- translate = (defaults.offset - index) * defaults.rowHeight;
- setTransition($scrollable, .3);
- setTranslate($scrollable, translate);
- // 触发选择事件
- defaults.onChange.call(_this, defaults.items[index], index);
- };
- function _start(pageY) {
- start = pageY;
- startTime = +new Date();
- }
- function _move(pageY) {
- end = pageY;
- var diff = end - start;
- setTransition($scrollable, 0);
- setTranslate($scrollable, translate + diff);
- startTime = +new Date();
- points.push({ time: startTime, y: end });
- if (points.length > 40) {
- points.shift();
- }
- }
- function _end(pageY) {
- if (!start) return;
- /**
- * 思路:
- * 0. touchstart 记录按下的点和时间
- * 1. touchmove 移动时记录前 40个经过的点和时间
- * 2. touchend 松开手时, 记录该点和时间. 如果松开手时的时间, 距离上一次 move时的时间超过 100ms, 那么认为停止了, 不执行惯性滑动
- * 如果间隔时间在 100ms 内, 查找 100ms 内最近的那个点, 和松开手时的那个点, 计算距离和时间差, 算出速度
- * 速度乘以惯性滑动的时间, 例如 300ms, 计算出应该滑动的距离
- */
- var endTime = new Date().getTime();
- var relativeY = $this[0].getBoundingClientRect().top + defaults.bodyHeight / 2;
- end = pageY;
- // 如果上次时间距离松开手的时间超过 100ms, 则停止了, 没有惯性滑动
- if (endTime - startTime > 100) {
- //如果end和start相差小于10,则视为
- if (Math.abs(end - start) > 10) {
- stop(end - start);
- } else {
- stop(relativeY - end);
- }
- } else {
- if (Math.abs(end - start) > 10) {
- var endPos = points.length - 1;
- var startPos = endPos;
- for (var i = endPos; i > 0 && startTime - points[i].time < 100; i--) {
- startPos = i;
- }
- if (startPos !== endPos) {
- var ep = points[endPos];
- var sp = points[startPos];
- var t = ep.time - sp.time;
- var s = ep.y - sp.y;
- var v = s / t; // 出手时的速度
- var diff = v * 150 + (end - start); // 滑行 150ms,这里直接影响“灵敏度”
- stop(diff);
- } else {
- stop(0);
- }
- } else {
- stop(relativeY - end);
- }
- }
- start = null;
- }
- /**
- * 因为现在没有移除匿名函数的方法,所以先暴力移除(offAll),并且改变$scrollable。
- */
- $scrollable = $this.offAll().on('touchstart', function (evt) {
- _start(evt.changedTouches[0].pageY);
- }).on('touchmove', function (evt) {
- _move(evt.changedTouches[0].pageY);
- evt.preventDefault();
- }).on('touchend', function (evt) {
- _end(evt.changedTouches[0].pageY);
- }).find(defaults.scrollable);
- // 判断是否支持touch事件 https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js
- var isSupportTouch = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;
- if (!isSupportTouch) {
- $this.on('mousedown', function (evt) {
- _start(evt.pageY);
- evt.stopPropagation();
- evt.preventDefault();
- }).on('mousemove', function (evt) {
- if (!start) return;
- _move(evt.pageY);
- evt.stopPropagation();
- evt.preventDefault();
- }).on('mouseup mouseleave', function (evt) {
- _end(evt.pageY);
- evt.stopPropagation();
- evt.preventDefault();
- });
- }
- };
- /***/ }),
- /* 27 */
- /***/ (function(module, exports) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var depthOf = exports.depthOf = function depthOf(object) {
- var depth = 1;
- if (object.children && object.children[0]) {
- depth = depthOf(object.children[0]) + 1;
- }
- return depth;
- };
- /***/ }),
- /* 28 */
- /***/ (function(module, exports) {
- module.exports = " <div class=\"<%= className %>\"> <div class=weui-mask></div> <div class=\"weui-half-screen-dialog weui-picker\"> <div class=weui-half-screen-dialog__hd> <div class=weui-half-screen-dialog__hd__side> <button class=\"weui-icon-btn weui-icon-btn_close weui-picker__btn\">关闭</button> </div> <div class=weui-half-screen-dialog__hd__main> <strong class=weui-half-screen-dialog__title>标题</strong> </div> </div> <div class=weui-half-screen-dialog__bd> <div class=weui-picker__bd></div> </div> <div class=weui-half-screen-dialog__ft> <a href=javascript:; class=\"weui-btn weui-btn_primary weui-picker__btn\" id=weui-picker-confirm data-action=select>确定</a> </div> </div> </div>";
- /***/ }),
- /* 29 */
- /***/ (function(module, exports) {
- module.exports = "<div class=weui-picker__group> <div class=weui-picker__mask></div> <div class=weui-picker__indicator></div> <div class=weui-picker__content></div> </div>";
- /***/ }),
- /* 30 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- var _gallery = __webpack_require__(31);
- var _gallery2 = _interopRequireDefault(_gallery);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- var _sington = void 0;
- /**
- * gallery 带删除按钮的图片预览,主要是配合图片上传使用
- * @param {string} url gallery显示的图片的url
- * @param {object=} options 配置项
- * @param {string=} options.className 自定义类名
- * @param {function=} options.onDelete 点击删除图片时的回调
- *
- * @example
- * var gallery = weui.gallery(url, {
- * className: 'custom-classname',
- * onDelete: function(){
- * if(confirm('确定删除该图片?')){ console.log('删除'); }
- * gallery.hide(function() {
- * console.log('`gallery` has been hidden');
- * });
- * }
- * });
- */
- function gallery(url) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- if (_sington) return _sington;
- options = _util2.default.extend({
- className: '',
- onDelete: _util2.default.noop
- }, options);
- var $gallery = (0, _util2.default)(_util2.default.render(_gallery2.default, _util2.default.extend({
- url: url
- }, options)));
- function _hide(callback) {
- _hide = _util2.default.noop; // 防止二次调用导致报错
- $gallery.addClass('weui-animate-fade-out').on('animationend webkitAnimationEnd', function () {
- $gallery.remove();
- _sington = false;
- callback && callback();
- });
- }
- function hide(callback) {
- _hide(callback);
- }
- (0, _util2.default)('body').append($gallery);
- $gallery.find('.weui-gallery__img').on('click', function () {
- hide();
- });
- $gallery.find('.weui-gallery__del').on('click', function () {
- options.onDelete.call(this, url);
- });
- $gallery.show().addClass('weui-animate-fade-in');
- _sington = $gallery[0];
- _sington.hide = hide;
- return _sington;
- }
- exports.default = gallery;
- module.exports = exports['default'];
- /***/ }),
- /* 31 */
- /***/ (function(module, exports) {
- module.exports = "<div class=\"weui-gallery <%= className %>\"> <span class=weui-gallery__img style=\"background-image:url(<%= url %>)\"></span> <div class=weui-gallery__opr> <a href=javascript: class=weui-gallery__del> <i class=\"weui-icon-delete weui-icon_gallery-delete\"></i> </a> </div> </div> ";
- /***/ }),
- /* 32 */
- /***/ (function(module, exports, __webpack_require__) {
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _util = __webpack_require__(2);
- var _util2 = _interopRequireDefault(_util);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * slider slider滑块,单位是百分比。注意,因为需要获取slider的长度,所以必须要在slider可见的情况下来调用。
- * @param {string} selector slider的selector
- * @param {object=} options 配置项
- * @param {number=} options.step slider的step,每次移动的百分比,取值范围 [0-100]
- * @param {number=} [options.defaultValue=0] slider的默认百分比值,取值范围 [0-100]
- * @param {function=} options.onChange slider发生改变时返回对应的百分比,取值范围 [0-100]
- *
- * @example
- * #### html
- * ```html
- * <div class="weui-slider-box">
- * <div id="slider" class="weui-slider">
- * <div class="weui-slider__inner">
- * <div class="weui-slider__track"></div>
- * <div class="weui-slider__handler"></div>
- * </div>
- * </div>
- * <div id="sliderValue" class="weui-slider-box__value"></div>
- * </div>
- * ```
- *
- * #### js
- * ```javascript
- * weui.slider('#slider', {
- * step: 10,
- * defaultValue: 40,
- * onChange: function(percent){
- * console.log(percent);
- * }
- * });
- * ```
- */
- function slider(selector) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var $eles = (0, _util2.default)(selector);
- options = _util2.default.extend({
- step: undefined,
- defaultValue: 0,
- onChange: _util2.default.noop
- }, options);
- if (options.step !== undefined) {
- options.step = parseFloat(options.step);
- if (!options.step || options.step < 0) {
- throw new Error('Slider step must be a positive number.');
- }
- }
- if (options.defaultValue !== undefined && options.defaultValue < 0 || options.defaultValue > 100) {
- throw new Error('Slider defaultValue must be >= 0 and <= 100.');
- }
- $eles.forEach(function (ele) {
- var $slider = (0, _util2.default)(ele);
- var $sliderInner = $slider.find('.weui-slider__inner');
- var $sliderTrack = $slider.find('.weui-slider__track');
- var $sliderHandler = $slider.find('.weui-slider__handler');
- var sliderLength = parseInt(_util2.default.getStyle($sliderInner[0], 'width')); // slider的长度
- var sliderLeft = $sliderInner[0].offsetLeft; // slider相对于页面的offset
- var handlerStartPos = 0; // handler起始位置
- var handlerStartX = 0; // handler touchstart的X
- var stepWidth = void 0; // 每个step的宽度
- function getHandlerPos() {
- var pos = _util2.default.getStyle($sliderHandler[0], 'left');
- if (/%/.test(pos)) {
- pos = sliderLength * parseFloat(pos) / 100;
- } else {
- pos = parseFloat(pos);
- }
- return pos;
- }
- function setHandler(distance) {
- var dist = void 0,
- // handler的目标位置
- percent = void 0; // 所在位置的百分比
- if (options.step) {
- distance = Math.round(distance / stepWidth) * stepWidth;
- }
- dist = handlerStartPos + distance;
- dist = dist < 0 ? 0 : dist > sliderLength ? sliderLength : dist;
- percent = 100 * dist / sliderLength;
- $sliderTrack.css({ width: percent + '%' });
- $sliderHandler.css({ left: percent + '%' });
- options.onChange.call(ele, percent);
- }
- if (options.step) {
- stepWidth = sliderLength * options.step / 100;
- }
- if (options.defaultValue) {
- setHandler(sliderLength * options.defaultValue / 100);
- }
- $slider.on('click', function (evt) {
- evt.preventDefault();
- handlerStartPos = getHandlerPos();
- setHandler(evt.pageX - sliderLeft - handlerStartPos);
- });
- $sliderHandler.on('touchstart', function (evt) {
- handlerStartPos = getHandlerPos();
- handlerStartX = evt.changedTouches[0].clientX;
- }).on('touchmove', function (evt) {
- evt.preventDefault();
- setHandler(evt.changedTouches[0].clientX - handlerStartX);
- });
- });
- return this;
- } /*
- * Tencent is pleased to support the open source community by making WeUI.js available.
- *
- * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved.
- *
- * Licensed under the MIT License (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://opensource.org/licenses/MIT
- *
- * 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.
- */
- exports.default = slider;
- module.exports = exports['default'];
- /***/ })
- /******/ ])
- });
- ;
|